Обо мне

Моя фотография
Индивид, которому нравится слушать качественную музыку, а потом делиться впечатлениями с другими!
Показаны сообщения с ярлыком development. Показать все сообщения
Показаны сообщения с ярлыком development. Показать все сообщения

суббота, 5 ноября 2011 г.

[Eclipse, Android] Автоматическое форматирование кода - проставление отступов

Удобное автоматическое форматирование кода, в данном случае проставление indent'ов (отступов) в Eclipse, доступно по-умолчанию. Достаточно выделить весь текст (Ctrl+A) и нажать сочетание клавиш Ctrl+I.

суббота, 29 октября 2011 г.

По поводу Андроид

Уважаемые немногочисленные читатели, ежели таковые имеются! Считаю своим долгом сообщить, что всвязи с недавно появившимся интересом к программированию под платформу андроид, отныне помимо заметок о Qt буду также размещать небольшие заметки о программировании под Android.

Спасибо за внимание! 

пятница, 29 июля 2011 г.

[Delphi, Oracle] Создание информационного табло

Хотел бы разместить здесь небольшую свою заметку о том, как создавал в свое время систему информационных табло для предыдущего места работы. Оригинал статьи на Хабре

В суде я работаю работал секретарем судебного заседания – помощником судьи, но иногда меня привлекают для участия в более сложных и важных мероприятиях, таких как, например, создание очередного программного обеспечения для внутреннего пользования (замечу сразу - никаким техническим образованием не обладаю).

Так случилось и месяц назад, хотя слухи об этом событии ходили уже давно – одной из важнейших задач, сопровождающих реконструкцию здания, является создание электронной системы распределения залов судебных заседаний, а также написание программы, обеспечивающей вывод информации на плазму и 7 мониторов перед каждым залом судебного заседания.


[Qt] Настройка колонок для QHeaderView в QTreeWidget

При работе со списками часто возникает необходимость предоставить пользователю возможность настраивать колонки, как это показано на рисунке ниже:


Когда-то очень давно сделал себе такой класс (существует несколько разновидностей, но сегодня выложу для QTreeWidget)

Скачать архив с классом

Использовать достаточно просто:

MenuForHeaderView *mm = new MenuForHeaderView(this);
QMenu *headerMenu= new QMenu;
docTree->header()->addAction(headerMenu->addMenu(mm->createMenu(this, docTree) ));
docTree->header()->setContextMenuPolicy(Qt::ActionsContextMenu);

foo_qip_nowplaying

Всем привет! В последнее время стали одолевать письмами с просьбой перезалить плагины, в связи с тем, что файлкипер прикрыли.

Вот, пожалуйста:
- foo_qip_nowplaying_0.5.1 English
- foo_qip_nowplaying_0.5.1 Русская версия

Ну, и в качестве бонуса, файл справки:
- Скачать

четверг, 28 июля 2011 г.

[Qt] Создание нового документа MS Word с параметрами по-умолчанию

Добрый день! Возникла необходимость создать новый документ Microsoft Word с заданными по-умолчанию некоторыми параметрами, например, пароль на открытие файла. Достичь желаемого результата можно очень и очень просто! Нам на помощь опять приходит нет-нет, не Чип и Дейл, а сокровищница знаний MSDN...


суббота, 23 апреля 2011 г.

[Qt] Сборка vlc-qt. Пошагово. Часть 1

Сегодня я хотел бы рассказать о том, как можно собрать и использовать в своем проекте замечательную библиотеку vlc-qt, посредством которой становится возможным воспроизведение любых мультимедийных файлов.

1. Скачиваем саму библиотеку vlc-qt по ссылке http://qt-apps.org/content/show.php/VLC-Qt+library?content=133649

2. Скачиваем исходный код проигрывателя VLC по ссылке http://sourceforge.net/projects/vlc/files/1.1.9/vlc-1.1.9.tar.bz2/download, а также собранный дистрибутив проигрывателя, который сразу же устанавливаем.

3. Скачиваем дистрибутив CMake, который понадобится нам для сборки библиотеки по ссылке http://www.cmake.org/cmake/resources/software.html

4. Убеждаемся в том, что у нас в системе есть библиотека Qt, компилятор mingw32 и, что пути к ним прописаны в системном PATH.

5. Создаем директорию, например, D:\VLC

6. Распаковываем в нее исходники библиотеки vlc-qt, которую скачали в п.1 (у нас должно получиться D:\vlc\libvlc-qt-0.5.0\)

7. Из исходников VLC копируем (распаковываем) папку vlc, которая находится в папке vlc-1.1.9\include\vlc в D:\vlc\libvlc-qt-0.5.0\src (должно получиться D:\vlc\libvlc-qt-0.5.0\src\vlc)

8. Создаем каталог D:/vlc/libvlc-qt-0.5.0/build

9. Устанавливаем Cmake и запускаем cmake gui

10. "Where is the source code" нажимаем кнопку Browse Source и выбираем каталог D:/vlc/libvlc-qt-0.5.0

11. "Where to build the binaries" нажимаем кнопку Browse Build ... и выбираем каталог D:/vlc/libvlc-qt-0.5.0/build

12. Нажимаем кнопку Configure

13. Получаем ошибку. Не расстраиваемся и делаем все в соответствии с изображением из следующего пункта

14.

Смысл в том, чтобы для поля LIBVLC_INCLUDE_DIR выбрать в качестве параметра директорию D:/vlc/libvlc-qt-0.5.0/src/vlc (то есть ту папку в которую мы копировали заголовочные файлы из архива с исходниками самого проигрывателя)

Для параметра LIBVLCCORE_LIBRARY выбираем библиотеку C:/Program Files/VideoLAN/VLC/libvlccore.dll, которая установилась с проигрывателем VLC из п. 2

Для параметра LIBVLC_LIBRARY выбираем библиотеку C:/Program Files/VideoLAN/VLC/libvlc.dll, которая установилась с проигрывателем VLC из п. 2

Установленные библиотеки нужны для линковки.

15. Снова нажимаем Configure

16. Нажимаем на кнопку Generate

17. Закрываем Cmake

18. Открываем командную консоль (Меню Пуск-Выполнить-cmd либо через Total Commander, если пользуетесь им, Open Terminal Here)

19. В консоли переходим в нужный нам каталог, если не перешли ранее, cd D:/vlc/libvlc-qt-0.5.0/build

20. Собираем библиотеку. В консоли вводим команду mingw32-make (при условии, что путь к компилятору у вас добавлен в PATH, либо пишете полный путь к компилятору D:\Qt\2010.05\mingw\bin\mingw32-make.exe

21. ждите

22. Вроде собралось без ошибок.

Всё, на этом сборка собственной библиотеки закончилась. На днях я подробно расскажу о том, как подключить к своему проекту данную библиотеку. Для нетерпеливых рекомендую ознакомиться с примерами vlc-qt. Там все ясно и понятно.

Обсуждение на Russian Qt forum

Постоянный партнер блога:

Профессиональные услуги адвоката в Минске. Абрамович В.А. Корректировка таможенной стоимости. Защита интересов в хозяйственных судах. Признание и приведение в исполнение судебных постановлений иностранных судов на территории Республики Беларусь. - Abramovich.by

Syntax Code Highlighter

Долгие попытки найти достойный онлайн-сервис для подсветки кода, наконец-то, увенчались успехом - pastebin.com удовлетворяет всем потребностям.

четверг, 21 апреля 2011 г.

[Qt] очистка QHeaderView

Возникла ситуация, когда один и тот же QTreeWidget необходимо использовать для отображения различных данных с разным количеством столбцов в зависимости от ситуации. Как таковой функции clear() у QHeaderView нет, а использование reset() к желаемому результату не приводит, и столбцы не очищаются.

Решением в данной ситуации является использование treeWidget->setColumnCount(0) перед отображением новых данных.

пятница, 15 апреля 2011 г.

[Qt] скрытие полос прокрутки в QWebView

Сейчас активно переписываю свой информационный киоск для хозяйственного суда с Delphi на Qt. Одним из элементов отображения текстовой информации я выбрал QWebView (webkit).

Важным условием просмотра информации являлся программный скролл и отсутствие видимых полос прокрутки - второе достигается достаточно просто:

QWebFrame* frame = browser->page()->mainFrame();
frame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
аrame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);


пятница, 8 апреля 2011 г.

пятница, 1 апреля 2011 г.

[Qt] Создание красивого всплывающего окошка OSD

Для своей программки LinForismatic, отображающей цитаты на рабочем столе, понадобилось выводить красивые всплывающие окошки содержащие произвольный текст и, по мере необходимости, небольшое изображение-иконку.

Под линуксом с этим проблем нет - libnotify поможет всем. Однако хотелось кросс-платформенного решения, под определение которого подпадал widget для вывода OSD из состава музыкального проигрывателя Clementine.

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

В итоге получаем:


Если кому интересно, то я выложил отдельный архив:
http://dl.dropbox.com/u/6896945/prettyosd.zip

Использовать можно следующим образом:

osd = new OSDPretty(OSDPretty::Mode_Popup);
osd->set_fading_enabled(true);
QFont font("Tahoma",11);
osd->setOsdFont(font);
osd->set_popup_duration(20000);
osd->SetMessage(name,text,QImage());
osd->show();


среда, 30 марта 2011 г.

[Qt] Поиск и замена текста в Microsoft Word посредством ActiveQt

Обратил внимание на то, что в интернете на форумах достаточно сложно найти информацию о том, как производить поиск и замену текста в Microsoft Word посредством ActiveQt. Для собственного проекта написал следующую процедуру:

void MsWordDocument::replaceString(const QString& oldString, const QString& newString)
{
  QAxObject* WordSelection = WordApplication->querySubObject("Selection");

  QAxObject* Find = WordSelection->querySubObject("Find");
  if (!Find) return;
  Find->dynamicCall("ClearFormatting()");

  QList<QVariant> params;
  params.operator << (QVariant(oldString));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant(true));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant(newString));
  params.operator << (QVariant("2"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  Find->dynamicCall("Execute(const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,const QVariant&)",
                    params);
 
}
Более подробную информацию о передаваемых параметрах можно прочитать на MSDN 

воскресенье, 27 марта 2011 г.

[Qt] Изменение шрифта во всем документе Microsoft Word посредством ActiveQt

Сегодня хотел бы написать небольшую заметку о том, как изменить шрифт во всем документе, созданном в Microsoft Word. Не буду многословен, а просто доработаю предыдущий пример:


  1.  QAxObject* WordApplication = new QAxObject("Word.Application");
  2.  if (!WordApplication) return;
  3.  WordApplication->dynamicCall("SetVisible(bool)", false);
  4.  WordApplication->querySubObject("Documents")->querySubObject("Open(QVariant)", _filename);
  5.  
  6.  QAxObject* active_doc = WordApplication->querySubObject("ActiveDocument");
  7.  QAxObject* WordSelection = WordApplication->querySubObject("Selection");
  8.  WordSelection->dynamicCall("WholeStory()");
  9.  QAxObject *Font = WordSelection->querySubObject("Font");
  10.  Font->setProperty("Size", 22);
  11.  QVariant newF(_outputDir + newFilename);
  12.  QVariant fileFormat(6); //Saving as filtered rtf
  13.  active_doc->querySubObject("SaveAs(const QVariant&, const QVariant&)", newF, fileFormat);
  14.  
  15.  WordApplication->querySubObject("ActiveDocument")->dynamicCall("Close()");
  16.  WordApplication->dynamicCall("Quit()");
* This source code was highlighted with Source Code Highlighter.

четверг, 24 марта 2011 г.

[Qt] Вывод текстовых сообщений посредством libnotify OSD в ubuntu

При написании своей небольшой программки LinForismatic, которая отображает произвольные цитаты через заданные промежутки времени, захотелось отображать текст посредством стандартного OSD вывода под Linux, конкретно в ubuntu.

Проблема решилась достаточно просто:
1. устанавливаем libnotify-bin
2. используем notify-send для вывода сообщения

QString program = "notify-send";
QStringList arguments;
arguments << name << text;
QProcess* myProcess = new QProcess(this);
myProcess->start(program, arguments);

Имейте ввиду, что по некоторым причинам параметр командной строки для notify-send "--expire-time=" не работает.

понедельник, 24 января 2011 г.

Насущное. Подведены итоги

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

потихонечку буду писать сюда о новом.

вторник, 27 апреля 2010 г.

SQL \ Oracle "Множественность"

Хотел бы открыть небольшую серию постов с небольшими решениями на SQL, которые я использовал для написания программы "Электронное табло".
Многим, возможно, это будет неинтересно, но пусть будет!

Представим ситуацию: у вас есть несколько таблиц, в которых хранится разного рода информация, например, о делах, о сторонах о сущности спора. Теперь необходимо отобразить определенные поля. И все бы ничего, но случаются такие ситуации, когда в одном деле участвует несколько истцов и ответчиков.
Про себя я назвал данную ситуацию "множественность истцов, ответчиков".

Запросом вывести сразу всю информацию достачно просто и с этой задачей справится даже школьник. Однако пока не появляется наша множественность.

Для себя я решил эту проблему таким образом. Создается view, который содержит информацию о сторонах. Когда в деле участвует несколько истцов-ответчиков, информация о них записывается в одну строку, разделенную символом ;

CREATE VIEW PLAINTIFF AS
select suit_id, max(LTRIM(sys_connect_by_path(name,'; '),'; ')) app
from (SELECT naznach.suit_id, app_resps.name, row_number() over (partition by naznach.suit_id order by app_resps.name) rn
from Naznach INNER JOIN App_resps ON naznach.suit_id = app_resps.suit_id
WHERE ((app_resps.TYPE=1) Or (app_resps.TYPE=4) Or (app_resps.TYPE=10) Or (app_resps.TYPE=14) Or (app_resps.TYPE=13)))
start with rn = 1
connect by prior rn = rn-1
and prior suit_id = suit_id
group by suit_id
order by suit_id

И уже дальше из своего запроса основного я связываюсь с этой виртуальной таблицый и получаю информацию.

воскресенье, 28 февраля 2010 г.

Калькулятор курсов валют

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

Внешний вид программы

Основными возможностями программы являются:

- отображение курсов валют на определенную дату
- конвертация в белорусские рубли
- конвертация в иностранную валюту из белорусских рублей
- соотношение курсов валют
- выделение определенным цветом интересующие курсы валют
- экспорт данных в Microsoft Excel

Для работы с программой вам необходим доступ в интернет (для получения курсов валют)

Скачать можно здесь (архив, не требует установки) 475 КБ.

суббота, 6 февраля 2010 г.

Киноманы, ваше мнение?

Господа-киноманы, интересует такой вопрос: есть ли такая программа, которая автоматически из имени файла фильма могла бы произвести поиск в интернете (например, на кинопоиске) и переименовать файл в более божеский вид?

Например, файл имеет название "Ironia.Sudby[torrents].ru.avi" находила бы и переимновывалы в Ирония Судьбы (1978).avi

Сразу во избежание упреков в том, что такое невозможно в принципе, замечу - если вы в кинопоиске введете Ironia.Sudby[torrents].ru.avi, то сайт найдет фильм!

Спрашиваю потому, что если, такой программы нет, я мог бы ее написать. Не за день, не за два, но в разумные сроки. Не хотелось бы повторять чью-то работу.

Что скажете?

пятница, 29 января 2010 г.

Мое гостеприимство или будьте они все прокляты!

По итогам вроде как удавшейся пивной вечеринки напишу следующее. Все что накипело.

Вчера к нам из хозяйственного суда Гомельской области приехал программист-системный администратор (назовем его ПОКА так) по обмену опытом. Как бы само понятие обмена опытом подразумевает некий обмен, будь то идеи, исходный код или готовые собранные, используем такое слово, программы. Приехал он к нашему программисту, который загодя предупредил меня о его приезде, намекнув, что направит его и ко мне. Прим. - моя должность не программист, и уж, тем более, не системный администратор.

Немножко предистории: еще будучи практикантом в нашем хозяйственном суде (Брестской области), где сейчас и работаю, я разработал совместно с на сегодняшний день судьей мою первую программу для суда - "Посредник". Второй, третьей, четвертой - стали "небольшие" программы довески взаимодействующие с Посредником. Пятой и самой важной программой стал Судебный калькулятор, который мы, в смысле работники хозсуда Брестской области, активно тестируем, чтобы, помимо прочего, потом выложить в открытый доступ. (Я называю это - "чтобы утереть всем остальным судам нос"). На этом с предисловием закончу и продолжу по существу.

Небольшое лирическое отступление - почему для обмена опытом, программиста этого направили именно к нам? Да, потому что, благодаря Высшему Хозяйственному Суду, который после предыдущего приезда к нам, растрезвонил всем судам, хозяйственным, что в нашем "логове" сосреоточились самые сильные программисты.

12:58 28.01.2010 года. 2 минуты до обеда. Он пришел ко мне. С виду вполне обыкновенный человечек: Невысокого роста (по сравнению со мной, многие кажутся невысокими), одет скромно, цвет кожи бледный, глажки маленькие и, как оказалось впоследствие, не могут сфокусироваться на одном объекте надолго. Речь разборчивая, но мысли порою "скачут".

Далее следует примерный диалог:
Он: впечатлен вашими программами, есть много вопросов. Начну с вашего посредника. Какую базу вы используете? Каким образом к ней подключаетесь? Где она хранится? На каком языке написана? Я скопировал вечером на ноутбуке покручу.

Я: (кратко для ЖЖ) С++. Sqlite, не самый удачный выбор, но так того требовала ситуация, существовавшая на момент написания программы. Да, одновременно могут работать много пользователей, хоть авторы библиотеки и не рекомендуют. ...

Он: Я вот недавно начал работать в суде, и мое руководство послало меня к вам, чтобы я взял у вас программы привез их к нам в суд, установил и мы начали работать. Меня очень заинтересовал судебный калькулятор. Я подумал - раз уж все написано, может ты мне даш исходный код, чтобы я просто поменял надпись хозяйственный суд Брестской области на хозяйственный суд Гомельской области? (*** Богом клянусь, чем хотите, у меня 4 свидетеля, но он так сказал)

После этой фразы мне стало многое понятным. Это просто пиздец какой-то. Я на минуту, не меньше, дар речи потерял - не знал что ответить, и единственной мыслью было "блять, взять бы тебе и пасть разорвать". Скажу честно, расценил, как кощунство. Простой пример - вы нарисовали картину. Кто-то другой ее взял, написал свою фамилию и выставил напоказ.

Я: Исходный код не даю никому, в принципе. Отдельным куском помочь могу, но все - никогда.

Он: А, если мой председатель попросит вашего?

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

Он: тогда может вы хотя бы измените надпись в ваших программах "хозяйственный суд Брестской области" на "хозяйственный суд Гомельской области"? 

Я: категорически НЕТ! Что вам мешает пользоваться нашими программами, заметьте я не давал своего разрешения на их копирование, с нашими реквизитами?!

Он: просто поймите, я нахожусь меж двух огней - с одной стороны Вы, с другой - мой председатель.

Я: я все понимаю, но ничем помочь ТАКИМ не могу. По отдельным вопросам - пожалуйста, готовый продукт - никогда!

----

Далее, чтобы вы поняли какой он из себя программист, приведу небольшой пример из его высказывания:

Он: Вот меня заинтересовало, каким образом вы подсчитываете количество дней (***чтобы вам было понятно, между двух дат).

Вы, конечно, друзья, извините,но это пиздец! Я спрашивал у своих девчонок-коллег-непрограммистов как посчитать количество дней между двумя датами и то получал ответ, а не то, что это быдло.

Господа, как бы вы поступили в данной ситуации? Написал без прикрас - все как было. Вчера заснуть не мог, думал убью.