Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #96


Клуб профессиональных программистов "Весельчак У"
Информационная рассылка сайта и форума.  Выпуск No96 (2010-08-22).

Здравствуйте, уважаемые читатели!

Сегодня в выпуске — подборка интересных тем форума, появившиеся за время, прошедшее с предыдущей рассылки. Обещанные свежие статьи (аж три штуки) сейчас проходят редактуру и будут опубликованы в следующих выпусках.



  • Программирование :: С/С++ :: WinAPI & Visual C++
  • Создаю отдельную процедуру для обработки сообщений от элементов, которые находятся на GroupBox.
    сам GroupBox лежит на главной форме. Всё работает нормально, но только GroupBox не хочет отрисовываться на форме ((

    Код:
    WNDCLASS ww;

    GetClassInfo(hInst,"BUTTON",&ww);
    ww.lpszClassName = "grpBox";
    ww.lpfnWndProc = GrpBoxWndProc;
    RegisterClass(&ww);

    //не хочет рисовать GroupBox на форме
    HWND hGroupBox = CreateWindow("grpBox","Traning",WS_CHILD |WS_VISIBLE | WS_BORDER | BS_GROUPBOX,10,10,300,100,hWnd,(HMENU) 100, hInst,NULL);

    //Кнопку рисует
    CreateWindow("button", "Start Traning", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 20,200,100, hGroupBox, (HMENU)118, hInst, NULL);

    Процедура обработки кнопки
    Код:
    LRESULT CALLBACK
    GrpBoxWndProc(HWND hGroupBox, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message)
    {
    case WM_COMMAND:

    if(LOWORD(wParam)==118)
    {
    MessageBox(hWnd, "работает", "!", MB_YESNO|MB_ICONQUESTION);
    }
    break;
    default:
    return DefWindowProc(hGroupBox, message, wParam, lParam);
    }
    return 0;
    }
  • есть код, который делает снимок с окна IE(причём полностью всего, а не только содержимого страницы - надо именно так) .
    Всё хорошо работает снимок делается, в файлик записывается, но тут оказывается интересный момент, что на IE 6 — всё отлично работает, а на IE 8 — от случая к случаю, т.е. например, если открыт сайт youip.ru — всё будет хорошо, а вот если в строку адреса передать, например mail.ru или yandex.ru — то отобразит всё, кроме содержимого страницы, на этом месте будет чёрный квадрат, причём не всегда. Может отработать корректно и всё будет отлично.
    вот код, которым делаю снимок и сохраняю в файл.

    Код:
    hFind — HANDLE окна(ИЕ), 
    RECT rcWnd;
    HDC hDCMem;
    HBITMAP hBmMem;
    HGDIOBJ hBmOld;
    HDC hDCScr;
    PBYTE pBmData;
    PBITMAPINFO pBmInf;
    HANDLE hFile;
    int nResult = 0;
    WORD wWidth;
    WORD wHeight;

    GetWindowRect(hFind, &rcWnd );
    wWidth = (rcWnd.right - rcWnd.left);
    wHeight = (rcWnd.bottom - rcWnd.top);
       
    hDCScr = GetDC(hFind);
    hDCMem = CreateCompatibleDC(NULL);
    hBmMem = CreateCompatibleBitmap(hDCScr, (rcWnd.right - rcWnd.left), (rcWnd.bottom - rcWnd.top));
    hBmOld = SelectObject(hDCMem, hBmMem);

    PrintWindow( hFind, hDCMem, 0);

    BitBlt(hDCScr,  rcWnd.left, rcWnd.top, wWidth, wHeight, hDCMem, 0, 0, SRCCOPY);
    pBmInf = (PBITMAPINFO)VirtualAlloc(NULL, sizeof(BITMAPINFO), MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);

    if(hDCMem != NULL && hBmMem != NULL && pBmInf != NULL)
    {
        pBmInf->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        pBmInf->bmiHeader.biWidth = wWidth;
        pBmInf->bmiHeader.biHeight = wHeight;
        pBmInf->bmiHeader.biCompression = BI_RGB;
        pBmInf->bmiHeader.biBitCount = 24;
        pBmInf->bmiHeader.biClrUsed = 16777216;
        pBmInf->bmiHeader.biPlanes = 1;

        pBmInf->bmiHeader.biSizeImage = (wWidth + 7) / 8 * wHeight * 24;
        pBmData = (PBYTE)VirtualAlloc(NULL, pBmInf->bmiHeader.biSizeImage, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
        if(pBmData != NULL)
        {
            if(GetDIBits(hDCMem, hBmMem, 0, wHeight, pBmData, pBmInf, DIB_RGB_COLORS))
            {
                BITMAPFILEHEADER BmFileHdr;
                BmFileHdr.bfType = 0x4D42;
                BmFileHdr.bfReserved1 = BmFileHdr.bfReserved2 = 0;
                BmFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
                BmFileHdr.bfSize = BmFileHdr.bfOffBits + pBmInf->bmiHeader.biSizeImage;   

                hFile = CreateFile(sFilePath, GENERIC_WRITE, FILE_SHARE_WRITE,    NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
                if(hFile != INVALID_HANDLE_VALUE)
                {
                    DWORD dwBytes = 0;
                    WriteFile(hFile, &BmFileHdr, sizeof(BITMAPFILEHEADER), &dwBytes, NULL);
                    WriteFile(hFile, pBmInf, sizeof(BITMAPINFOHEADER), &dwBytes, NULL);
                    WriteFile(hFile, pBmData, pBmInf->bmiHeader.biSizeImage, &dwBytes, NULL);
                    FlushFileBuffers(hFile);
                    CloseHandle(hFile);
                }
                else
                    nResult = -5;
            }
            else
                nResult = -6;
            if (pBmData != NULL)
                VirtualFree(pBmData, 0, MEM_RELEASE);
        }
        else
            nResult = -7;
    }
    else
        nResult = -8;
    if(pBmInf != NULL)
    VirtualFree(pBmInf, 0, MEM_RELEASE);
    SelectObject(hDCMem, hBmOld);
    DeleteDC(hDCMem);
    DeleteObject(hBmMem);
    return nResult;

    Пожалуйста подскажите, почему так.
  • Программирование :: Delphi
  • А кто-нибудь доступно объяснит как использовать firebird embedded? Я с ним первый раз столкнулся, нужно перенести приложение со суперсервера. К суперсерверу подключался компонентом TIBDatabase. Из ридми по огнептице я вынес "Just copy fbembed.dll, icudt30.dll, icuin30.dll and icuuc30.dll into the directory with your application." А... дальше? Из них, видимо, нужно вызвать какую-то процедуру подключения, но я даже названия ее нигде не встретил.
  • Программирование :: VisualBasic :: Visual Basic .NET
  • Здравствуйте все!
    Как в контроле MonthCalendar программно изменять язык написания названий дней недели, месяца и слова "Сегодня"? Условно это выглядит так:
    With MonthCalendar
            If rej = "en" Then
                .MonthName="August"
                .WeekDay1="Su"
                .WeekDay2="Mo"
                .ConstToDay="Today"
           End If
           If rej = "ru" Then
                .MonthName="Август"
                .WeekDay1="Пн"
                .WeekDay2="Вт"
                .ConstToDay="Сегодня"
           End If
    End With
    Благодарю за внимание
  • Программирование :: Java
  • Здравствуйте.
    Только начал изучение потоков.
    Написал простенькую программу отображающую системное время на трёх линейных регуляторах.
    При запуске программы, диспетчер задач Windows показывает увеличение файла подкачки на 45-50 МБ (Физической памяти: 1 ГБ).
    Вопрос: должно ли так быть и, если нет, как это возможно исправить? А заодно может укажете на другие ошибки.

    Заранее спасибо.

    Вот код программы:

    Код:
    package org.vsubhuman;

    import java.awt.*;
    import java.util.*;
    import javax.swing.*;

    public class SliderClock extends Thread
    {
    JSlider jsldrHours;
    JSlider jsldrMinutes;
    JSlider jsldrSeconds;

    SliderClock()
    {
    /* FRAME */

    JFrame jfrm = new JFrame("Slider Clock");
    jfrm.setLayout(new GridLayout());
    jfrm.setSize(300, 300);
    jfrm.setResizable(false);
    jfrm.setLocation(362, 200);
    jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jfrm.setVisible(true);

    /* SLIDERS */

    jsldrHours = new JSlider(JSlider.VERTICAL, 0, 24, 0);
    jsldrMinutes = new JSlider(JSlider.VERTICAL, 0, 60, 0);
    jsldrSeconds = new JSlider(JSlider.VERTICAL, 0, 60, 0);

    // Set Tick Spacing
    jsldrHours.setMajorTickSpacing(3);
    jsldrHours.setMinorTickSpacing(1);
    jsldrMinutes.setMajorTickSpacing(5);
    jsldrMinutes.setMinorTickSpacing(1);
    jsldrSeconds.setMajorTickSpacing(5);
    jsldrSeconds.setMinorTickSpacing(1);

    // Set Ticks and Labels Paint
    jsldrHours.setPaintTicks(true);
    jsldrHours.setPaintLabels(true);
    jsldrMinutes.setPaintTicks(true);
    jsldrMinutes.setPaintLabels(true);
    jsldrSeconds.setPaintTicks(true);
    jsldrSeconds.setPaintLabels(true);

    // Set Focusable
    jsldrHours.setFocusable(false);
    jsldrMinutes.setFocusable(false);
    jsldrSeconds.setFocusable(false);

    /* ADDING */

    jfrm.add(jsldrHours);
    jfrm.add(jsldrMinutes);
    jfrm.add(jsldrSeconds);

    /* END */

    JPanel panel = (JPanel)jfrm.getContentPane();
    panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

    this.start();
    }

    public void run()
    {
    while(true)
    {
    try
    {
    jsldrHours.setValue(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));
    jsldrMinutes.setValue(Calendar.getInstance().get(Calendar.MINUTE));
    jsldrSeconds.setValue(Calendar.getInstance().get(Calendar.SECOND));

    Thread.sleep(500);
    }
    catch (InterruptedException e)
    {
    e.printStackTrace();
    }
    }
    }

    public static void main(String[] args)
    {
    SwingUtilities.invokeLater(
    new Runnable()
    {
    public void run()
    {
    new SliderClock();
    }
    }
    );
    }
    }
  • Программирование :: Perl
  • Есть файл с записями

    data
    {
    ключ1 = значение
    ключ2 = значение
    ...
    ключN = значение
    }
    ...

    Нужно считывать записи между скобками в хеш. Есть ли в Perl какая-нибудь функция или нужно циклы делать и проверки - все ручками?
  • Программирование :: Программирование 1С
  • Недавно пришел работать в одну контору где уже стояла и была настроена 1С.
    Все выглядит следующим образом: в бухгалтерии 5 компов в сетке через свич. На компе главбуха база 1С в расшаренной папке. Везде стоит 1С Предприятие 7.7 (сетевая версия) (7.70.025). На компах в сети прописан путь к базе так: "\\Pc-5\1c_base\config\". Все работает, но есть проблема.
    Если 1с запущена только на одном компе, то все работает очень шустро, но стоит только запустить 1с-ку хотя бы еще на одном компе работа идет очень медленно, вместо обычных 2-4 сек документ может формироваться по 5-7 мин(!!!). Причем на компе главбуха, где хранится база, все летает постоянно без разницы запущена прога еще где-нибудь или нет. Такая проблема наблюдается только на компах, обращающихся к базе по сети.
    Хочу спросить у опытных людей можно ли с этим что-то сделать и если да то как все правильно настроить.
  • Программирование :: Программирование 1С :: 1С 7.x
  • Появилась мысль управлять шириной присоединяемых секций в зависимости от разрядности значения в них.
    Таблица НЕ ДЛЯ ВВОДА данных.
    Конечно можно подготовить секции с разной шириной и использовать их.
    Но можно ли воспользоваться командой ШиринаСтолбца???
  • Программирование :: Программирование 1С :: 1С 8.x
  • Приветствую всех!

    Выполняется следующий запрос:

    Код:
    Запрос6 = Новый Запрос;
    Запрос6.Текст = "ВЫБРАТЬ
                   | РеализацияТоваровУслуг.Дата,
                   | РеализацияТоваровУслуг.Товары.(
                   | Количество,
                   | Номенклатура.Ссылка КАК Ном,
                   | Сумма,
                   | СуммаНДС,
                   | Цена
                   | )
                   |ИЗ
                   | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                   |ГДЕ
                   | РеализацияТоваровУслуг.Контрагент.Ссылка = &Контраг";

    Запрос6.УстановитьПараметр("Контраг", ЭлементыФормы.ПолеВвода1.Значение);
    Результат6 = Запрос6.Выполнить();
    ВыборкаОбщийИтог1 = Результат6.Выбрать();

    ТЗДвиженияПоБанку = Новый ТаблицаЗначений;
    ТЗДвиженияПоБанку.Колонки.Добавить("пНоменклатура");

         
    Пока ВыборкаОбщийИтог1.Следующий() Цикл
    НовСтрТЗ = ТЗДвиженияПоБанку.Добавить();
    НовСтрТЗ.пНоменклатура = ВыборкаОбщийИтог1.Ном;
    КонецЦикла;

    Возникает ошибка:"Поле объекта не обнаружено (Ном)"
    Почему?

  • Всем привет.

    Написал свой редактор реестра. Старался создать похожий на системный.

    (http://forum.shelek.ru/index.php?action=dlattach;topic=23252.0;attach=4286)

    Программа написана в CBuilder 2006 с использованием VCL и подписана.

    P.S.: Сейчас версия 0.2. Исправлена остановка поиска при ошибке чтения раздела и строку пути
             теперь можно копировать...

  • Создал программу учёта товаров, прошу дать оценку!
    Мне важно Ваше мнение, критика ...

    Подробная информация и сама программа здесь!
    h**p://warehous.at.ua

    (http://i9.fastpic.ru/big/2010/0816/b1/3b084c699162e02ff72b0df2fb682ab1.jpg)
     
    Предназначена для автоматизации учёта товаров на складе и обеспечения возможности
    ведения торговли на предприятии с учётом всех операций пользователей программы.
    Создавалась для предпринимателей и предприятий малого и среднего бизнеса.
    Отличается простотой использования и интуитивно понятным интерфейсом.

    Выполняемые функции:
    Создание и учёт приходных и расходных накладных.
    Оформление и учёт счетов.
    Резервирование товара для потенциального покупателя с автоматическим снятием товара с резерва.
    Оформление и учёт документов на доставку товара покупателю по указанному им адресу.
    Выполнение инкассаций проведённых товарных чеков.
    Оформление налоговой накладной.
    Возможность загрузки прайс-листов поставщиков из файла Excel в нуменклатор программы!
    Удобная инвентаризация склада, быстрый прайс-лист для покупателей.
    Оформление и учёт платёжных банковских поручений.
    Ведение истории наличия товаров на складе на начало рабочего дня.
    Оперативное изменение цены, как на весь товар, так и на отдельные группы товаров.
    Ведение журнала действий, выполняемых пользователем программы.
    Возможность работы с различными типами валют и различными единицами измерения товара.
    Возможность оплаты покупателем товара в наличной, безналичной форме.
    Печать ценников на товар с возможностью оперативного изменения цены на товар.
    Експорт\импорт отчётов и документов в различные форматы (Excel, Word, Internet Explorer)
    Печать штрих-кода (Code 128 и т.п.) на товар из базы данных и по шаблонам (например для дисконтных карточек покупателей)
    Возможность ведения торговли с использование сканера штрих-кода (например "Metrologic MS9500 Voyager" и др.)
    Возможность оформления фискальных чеков на товар с использыванием фискального регистратора - "DATECS FP3530T"

    Ведение статистики по:
    - приходным и расходным документам.
    - оперативные текущие продажи.
    - поставщикам товаров.
    - покупателям товаров.
    - отложенному товару, для потенциальных покупателей.
    - текущим оперативным продажам.
    - оформленным доставкам на товар.
    - инкассациям за период времени.
    - остаткам товара на складе.
    - прибыли за период времени.
    - движению отдельной единицы товара за период времени.

    Программа реализует учёт:
    - движения товаров по нескольким Вашим предприятиям с одного склада.
    - поступлений товара от поставщиков.
    - возвратных накладных на товар для поставщиков.
    - движения товара по покупателям.
    - оформление и учёт возвратных накладных для поставщиков.
    - оформление гарантийных талонов для различных категорий товаров.

    Дополнительно:
    - используются справочники - предприятий, покупателей, пользователей, товаров, категорий цен, нуменклатор товаров, валют и т.п.
    - возможность работы с различными типами валют.
    - обеспечивается высокая скорость работы программы даже на маломощных компьютерах.
    - функция автоматического востановления базы данных на случай внезапного сбоя.
    - ежедневное автоматическое создание бэкапа базы данных при старте программы.
    - функция быстрой очистки информации в базе данных.
    - автоматическое обновление программы через сеть Интернет.
    - On-Line поддержка пользователей (помощь по функционалу программы, инсталляции, устранение ошибок и пр.)
    - данная версия программы поддерживает только однопользовательский режим работы.
  • Операционные системы :: Unix и другие
  • День добрый. Собираю образ загрузочной флешки с линуксом на ядре 2.2.5 (ядро досталось в наследство, уже скомпиленое). Суть проблемы - есть initrd образ, который грузит дрова дисковой подсистемы, это может быть DiskOnChip или, как в моем случае, модули IDE: ide_mod.o ide_disk.o ide_probe.o. Под виртуальной машиной(VmWare) образ перкрасно грузится, также он грузится под стареньким Pentium166MMX, однако стоит перейти на Geode LX, как загрузка тут же обламывается, примерно так:
    Код:
     insmod /lib/ide_mod.o
       /lib/ide-mod.o unresolved symbol ide_hwifs_R684876f1
     .....
    ERROR: /bin/insmod exited abnormally!
    Все прочие модули также отказываются грузиться нормально. Соотвественно и корень не монтируется. Что я только не перепробовал: и так и сяк, перекомпиливал insmod из исходников и вставлял в initrd - ничего не помогает. Подскажите кто что сможет, уже всю голову сломал...

    ЗЫ ядро 2.2.5 - это ТЗ, его я менять не могу, под него важная софтина заточена.
  • Направления программирования :: Сети
  • Ситуация такая... Для поиска устройств в сети надо просканировать  диапазон адресов, например 10.0.0.1 - 10.0.200.255 на предмет подключения по TCP на определенный порт и получения отклика на запрос. Время отклика может достигать 1 сек.

    Для решения задачи за разумное время порождаются потоки с не блокирующими сокетами для групп адресов 10.0.0.1 - 10.0.0.255, 10.0.1.1 - 10.0.1.255 и т.д.  допустим 50 шт.

    Проблема в том что при отсутствии устройства сокет уходит в состояние SYN_SENT на несколько секунд и быстро достигается предел Half-open connections для Windows XP. Т.е. ситуация понятна и прозрачна.

    Получается, что если открывается новый сокет - открытие проходит успешно без ошибок, только данные после этого уходят в никуда и без кода ошибки. А т.к. работа ведется через select с таймаутом 1 сек - то непонятно или нет устройства или мы заткнулись на Half-open.

    Рассмотрение похожего вопроса в теме http://forum.shelek.ru/index.php/topic,6663.0.html прочитано и понятно, только ситуация есть...

    И вот  вопросы к Уважаемым Знатокам:
    -  Как при открытии нового сокета определить, что достигнут этот "неприятный" предел в 10 подключений?
    -  Есть ли возможность закрыть состояние SYN_SENT программно или установить свой тайм-аут для этого состояния?
    -  Может есть еще мысли как ситуацию разрулить?


  • Направления программирования :: Web
  • Многоязычный громко сказано, но три языка есть (ru, ua, en)

    Основной контент - русский.
    На другие языки - перевод делается по мере сил и возможностей.
    Существует три языковых меню сайта - с этим достаточно просто.

    есть меню выбора языка.
    Сейчас это сделано следующим образом.

    Если есть языковые версии страницы, то отображается меню выбора языков.
    Пользователь может выбрать нужный ему язык именно этой статьи (страницы).

    Если нет языковой версии - отображается только русский.
    Минус такого подхода - человек не знает о наличии другого языка.

    Так как перевод делается с русского (как наполненного контентом) на другие, то соответственно и ссылки также "переводятся", хотя реальной переводной страницы нет. И тогда в языковой версии отображается только русская версия.

    Существует другой подход к языковым версиям
    Просто постоянное меню выбора языка с ссылкой на главную языковую. Это затрудняет, на мой взгляд, ориентирование пользователя в поисках нужной языковой версии.

    Хотелось бы услышать ваше мнение о своем видении решения.

    чтобы не быть голословным и не быть неправильно понятым вот ссылочка  http://alliance-s.com.ua/

    зы дизайн не мой - верстка моя.


  • Направления программирования :: Web :: Клиентские скрипты
  • проблема в следующем... для разработки используются MS VS 2010, C#, ASP.NET, jquery. Суть - с клиента делается асинхронных запрос на сервер (методы jquery пробовал post и ajax) на локале работает и так и так как часы, а вот в боевом окружении дает ошибку... При этом запрос осуществляется к методу webservice'а без параметров, возвращающих xml документ.

    на локале используется стандартный встроенный в VS web сервер для разработки. Боевое окружение IIS 7 в виртуальном хостинге на masterhost.

    В чем может быть дело? Уже не знаю где искать...
  • Направления программирования :: Web :: Непрограммистские вопросы по web
  • Люди добрые, подскажите.
    Может кто знает, пользует такие?

    Очень хочется чего-то наподобие веб-инспектора или файербага, но чтобы работало с IE. Да ещё и со всеми его актуальными версиями (6—8)
    Такое вообще возможно?

    А то мне до сих пор пока не удалось найти ничего подобного :(
  • Практические разделы :: Базы данных
  • Есть таблица категорий, есть таблица статей

    Нужно выбрать 10 последний статей из каждой категории

    1.SELECT cat_name, cat_id FROM cat
    2. и потом в цикле делать
    SELECT * FROM article WHERE cat_id = $cat_id LIMIT 10

    задумался... А можно ли это в один запрос впихнуть?
    типа
    select article.*
    from article
    left join cat on article.cat_id=cat.cat_id
    order by cat_id

  • Здравствуйте! Просьба помочь в составлении схемы БД для рассписания электричек.

    Помощь нужна в правильной организации таблиц маршрутов и расстояний.

    Расстояния нужны для информации пользователей системы (Например, человек подошел к системе, ввел заданный пункт, система ему вывела на экран все маршруты на сегодня до этого пункта + расстояние до него), а также от расстояния зависит стоимость проезда, и хочется сделать так, чтобы система не зависела от конкретного пункта отправления (Например, если система будет находиться в Минске, то можно сохранять расстояние от Минска до пунктов движения - это плохой вариант). Теперь давайте поподробнее.

    У нас есть следующая схема движения электричек
    (http://s001.radikal.ru/i196/1008/e9/50ee50655bbc.jpg)
    в данном случае минимизированная схема - для простоты. Цифры - это расстояние между пунктами.

    Составленная мною схема БД для маршрутов выглядит так:
    (http://i057.radikal.ru/1008/8f/e129d461ecf2.jpg)
    т.е. маршруты будут вводиться руками, промежуточные станции, которые включаются в этот маршрут, тоже, а вот расстояние между станцией отправления и станцией куда следует пассажир должно каким-то образом подсчитываться автоматически (Вот я у Вас и прошу помочь разобраться каким таким образом?). Навреное нужно добавить еще одну таблицу с расстояниями между двумя соседними пунктами, но я не могу понять как это организовать, поэтому спрашиваю у Вас. (Возможно нужно даже 2 таблицы добавить, а потом воспользоваться декартовым произведением или чем-нибудь в этом роде). Принимаются все варианты, даже очень сложные.

    Если что-то непонятное написал уточняйте... Заранее спасибо.

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное