суббота, 12 октября 2013 г.

Отсутствую...

Отсутствовал долгое время...

Помимо основной работы, решил пофрилансить. И это увлечение поглотило меня полностью.
Занятие это оказалось довольно таки выгодным и интересным. А еще в некоторые периоды стало приносить больше шеккелей чем основная работа. Так что всем советую.

Работать на одной работе, да и притом долгое время вредно для программиста.
Ведь известно, что при смене работы происходит резкий рост зп для айтишника.
Так же, в такие моменты, резко растет квалификация. Узнаешь новые технологии, программы, заводишь уйму знакомств.

Основную цель фриланса я для себя обозначил довольно таки ясно - диверсификация рисков.
А именно, найти 3-х клиентов на которых можно работать в спокойном ритме (около 10 часов в неделю / поддержка).
Таким образом я становлюсь абсолютно независим от настроения работодателя, а он ко мне начинает относиться как к партнеру, а не рабу (забавная точка зрения подхваченная мною от коллеги ).

воскресенье, 20 января 2013 г.

Донецкие IT компании (суперполезный список)

Суперполезный список для безработных программистов/художников/менеджеров и для HR хэдхантеров из Донецка.
Первые - юзайте как спам базу. Последние - как базу поиска донецких кандидатов по линкед ину. По мере вспоминания буду обновлять, и когда нибудь сгруппирую по интересности.

В начале те, кто засветились на ДОУ:

  1. Ciklum
  2. Ebola Communications
  3. Lime systems
  4. Xitex Software
  5. Binary Studio
  6. Exadel
  7. Herocraft Ukraine
  8. АМИ
  9. Magento
  10. Soft-Xpansion
  11. M9 Ukraine Ltd
  12. Alivest Software
  13. LogNet
  14. topsoft
  15. Сенанта
  16. Webmanagement Ukraine
  17. MLSDev
  18. Akorobka
  19. Fresh2L IT
  20. Lemsys
  21. Nexstep Solutions LLC
  22. TrueConf 
  23. SteelKiwi Development
  24. КОИНС
  25. JetThoughts LLC
  26. МЕМО
  27. SV-SoftEx
  28. Xenao Games
  29. Anahoret
  30. Smart Cloud Solutions
ниже, те которых не было на ДОУ (DOU) но всплыли в памяти :)

31. Biruza software
32. Vogat interactive
33. Donix
34. Grand soft studio
35. 
Кронос, ООО, НПП
36. Авалон Альянс
37. IT Group
38. Алго-ритм39. Булат
40. ПиСиЛЮКС
41. Industrial infosystems
42. Happy Artist
43. Lucky soft
44. Brioline Studio Ltd
45. media-art ( T1 Games ?? )
46. NCryptedCloud, LLC

Трупики:
47. Maus soft
48. Maxbill
49. Xitex
50. Dragon altar games

воскресенье, 9 декабря 2012 г.

Сам себе профайлер (сниппет)

Нужно измерить производительность программы ? ищешь тормоза в коде ? интерфейс замерзает ?

Хороший профайлер и трезвая голова - помогает.
Но иногда 1-го пункта может не оказаться: или под нужную платформу или под рукой или он дорогой.

Тогда мне помогает пункт 2-й и небольшой сниппет

#include <time.h>

clock_t cl = clock();

// some code

std::cout << "Code duration: " << (double) ( clock() - cl ) / ( CLOCKS_PER_SEC / 1000 ) << " ms" << std::endl;

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

Увлекательно, но метод заставляет думать, а не наблюдать :) иногда это бывает полезнее, коллегам понравился... может быть понравится и тебе.

Со временем, начинаешь понимать сколько должна длиться та или иная операция. За сколько времени обрабатывается гигабайт информации и за сколько времени он может обработаться. Приходит понимание времени и осознания масштабов миллисекунд и тактов. I like it.

суббота, 10 ноября 2012 г.

Использование Poco из Qt и MinGW

Подключить Poco для QMAKE проекта дело несложное но с особенностями.

добавляем пути поиска инклудов к проекту:

INCLUDEPATH += путь к Poco инклудам
INCLUDEPATH += путь к Poco::Net инклудам
INCLUDEPATH += путь к Poco::XML инклудам INCLUDEPATH += путь к Poco::Util инклудам
Для простоты все инклуды я скинул в одну папку.

Добавляем пути к либам:

QMAKE_LIBDIR += путь к папке к либам
А теперь сама либа:

LIBS += -lPocoFoundation

ЗЫ: Если либ несколько одновременно - важен порядок !

Я всё это вынес в отдельный .pri файл. И когда я работаю с Poco - инклудю его целиком. В моем случае он выглядит так:
INCLUDEPATH += $$PWD/1.4.4_mingw_32/include
QMAKE_LIBDIR += $$PWD/1.4.4_mingw_32/lib
#Always the first
LIBS += -lPocoNet
#Always the second
LIBS += -lPocoUtil
#Always the third
LIBS += -lPocoFoundation
#windows specific defines
#getaddrinfo
LIBS += -lWs2_32
#GetAdaptersInfo
LIBS += -lIphlpapi
Всё.

Сборка Poco под MinGW

Собирается Poco по этой инструкции несложно.

1. Если MSYS не стоит, то ставим MSYS с сайта MinGW.

2. В MinGW shell переходим в папку с распакованным Poco

3. Вызываем :
configure

4. Потом :
make

5. Если не вышло, с ошибкой: "что то там -mno-cygwin". Идем в каталог {mingw_home}\build\config
В файле MinGW удаляем ключ -mno-cygwin.

6. Повторяем пункты 3, 4

7. У меня тесты не пошли но либы появились в папке lib.


Note: для сборки без зависимостей я делал 3й пункт через:
configure --omit=NetSSL_OpenSSL,Crypto,Data/ODBC,Data/MySQL

пятница, 9 ноября 2012 г.

Переход с SVN на GIT

Сегодня я покинул кампанию сомневающихся и перевел свои проекты на Git.

Весь процесс (2 шага) у меня занял не более 15 минут.

  • sudo apt-get install git-svn
  • git svn clone АдресРепозитория АдресКудаКлонировать

В моем случае 2й шаг выглядел так:

git svn clone file:///home/serg/repositary/ .

После конвертации gitk показал такую картинку:

gitk linux svn to git

Авторы коммитов, дата и весь код сохранился успешно.

вторник, 19 июня 2012 г.

QML виджет верхнего уровня & повернутый градиент

Вчера писал гуй для GTD клиента. В рамках спортивного программирования и качания скиллов в декларативном Qt/QML. На старте нарисовались 2 задачи, притом не решаемые без угнетающих костылей. Например:
Изображение Hint для програмирования на QML
Фактически это Hint на QML
Вроде бы и ничего страшного ? закругленный прямоугольник размером с childrect внутри image + text привязанные друг к другу, появляются по событию мыши. 2 минуты работы и ... хинт оказывается под следующим компонентом:
Z-order у хинта
Кажется тут и пригодится ранее неиспользуемое мной свойство визуальных компонентов: координата z... а вот не тут то было :)... ничего не меняется!. Хотя гугл, форумы и все все все говорят использовать его... хмм. Читаем внимательно и вдумчиво мануал, ага z-order учитывается только для sibling компонентов. А у меня хинт - чайлд кнопки, кнопка - чайлд панели (иголка в яйце, яйцо в зайце, заяц в шоке), а уже сама тулпанель sibling для правого компонента... вобщем на глаза грабля правильной архитектуры ;). Изменение z координаты для всей панели дало ожидаемый результат, но это не совсем то, что нужно. В конкретно данном случае, работает, а если 2 панели рядом - уже нет...

Выход ? сделать хинт - потомком Root`a. Архитектура получается жесть :) Это не наш путь. Выход №3 ? создать на root компоненте глобальный Loader и грузить в него компонент нашего хинта, но тогда anchor`ы использовать низя, а вместо них гораздо более медленные бинды, и добавляется лишний загрузчик картинки которого можно было бы (и хочется) избежать. Больше ничего не придумывается. Может быть, однажды, ToolTip переберется из симбиан в десктоп, а пока будем экспериментировать дальше.

А теперь страшная и неожиданная новость намбер ту: градиенты в QML бывают только сверху вниз :) и что бы сделать градиент слева направо рисуем его в отдельном Rectangle и применяем к нему нехитрые трансформации поворота и переноса :) Как по мне - это бессовестный костыль учитывая какие возможности имеются у обыкновенных Qt виджетов по рисованию градиентов.

Вместо:
Rectangle {

...
        gradient: Gradient {
            GradientStop {
...
            }
            GradientStop {
...
            }
}
}

пишем:
Rectangle {
...

//
выходим из ситуации при помощи дополнительно объекта
    Rectangle{

        // поворот
        rotation: 90

        // меняем ширину с высотой
        width: parent.height
        height: parent.width


        // передвигаем
        x: height

        // ... и сам градиент
        transformOrigin: Item.TopLeft
        gradient: Gradient {
            GradientStop {
...
            }
            GradientStop {
...
            }
        }

    }