Поворачиваю к Qt

May 20th, 2010 Begemot

Язычники живут в своем аду.
Я там чужой и дел их не веду.
Но средство есть. (c)

Жизнь удивительна и не предсказуема:) Пару лет уже пишу на wxWidgets мечтаю о том что когда-нибудь у меня все-таки дойдут руки до портирования своих утилит на unix\Mac OS. В свое время выбрал wxWidgets вместо Qt, так как Qt на тот момент была еще слишком дорога и из-за ряда преимуществ wxWidgets конкретно для моих проектов.

Месяц назад начал писать новый проект, не мой, на заказ. Задание – переписать существующее приложение, кроссплатформенно с тем что бы добиться поддержки 64х битных систем (сейчас есть проблемы, спасибо MS:) и захватить рынок MacOS пользователей, которые неоднократно выражали желание купить эту программу.

Начал писать как специалист по wxWidgets, написал прототип – уперся в некоторые проблемы, не то что бы совсем не решаемые, но все-таки… В общем так сложились обстоятельства что сейчас я резко осваиваю Qt, и похоже мой первый реальный кроссплатформенный проект будет именно на нем, забавно правда? :)

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


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


О реакции пользователей

May 13th, 2010 Begemot

Прикрутил локализацию к фриваре, за две недели получил 7 локализаций, включая арабскую (прикольно выглядит!) и японскую, и это при том что я даже не просил переводить (провтыкал). Люди сами замечали что появился этот механизм и спрашивали как перевести. Это приятно.

Но при этом я допустил ошибку, при запуске программы с английским языком интерфейса – выскакивал мессадж бокс с сообщением об ошибке отстутствия каталога, и хоть бы одна собака написала об этом…

Ни кто не пожаловался на ошибку, а ведь какое-то количества народа ее все-таки использует…

p.s. Кто-нибудь использует http://reformal.ru/ стоит ли его смотреть\пробовать?


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


Отключаем report post в phpBB

May 5th, 2010 Begemot

Задолбал форумный спам – ходят по форуму phpBB и отсылают “репорты” что мол посты плохие, ну и куча ссылок в репортах.

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

1. идем в админ панель
2. permission -> Forum permissions
3. внизу Avaiable forums, жмем Submit
4. выбираем Guest, жмем Edit permision
5. для Avaiable forums  раскрываем  Advanced Permissions
6. отмечаем галочками все остальные форумы
7. идем в Action -> Can Report Post -> Never
8. применяем изменения


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


О рекламе на русском рынке

May 1st, 2010 Begemot

“На русском рынке продаж нет”, ”На русском рынке можно и нужно продавать” – мнения по этому вопросу в шароварной тусовке  ходят весьма противоположные.

Полтора месяца назад попалось мне вот такое заманчивое предложение попиарится на русском рынке, я подумал и решил, а почему бы и нет?

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

С одной стороны получается что продавать на русском рынке все-таки можно, если заниматься маркетингом, а с последним у меня напряжно. Но с другой стороны, обычные продажи в рунете у меня ~1 в месяц, этот всплеск целых 4 :)

Статья в тему: Что нужно для продажи софта в РФ?


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


Локализация, это полезно

April 22nd, 2010 Begemot

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

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

Смотрю теперь на свою привычную программу новыми глазами:) Заодно в процессе задумался над логичностью некоторых названий, подправил ряд строк, изменил несколько сообщений – в общем навел порядок.

Кстати, локализация один из необходимых шагов для продвижения на русскоязычном рынке.

А вы ощущаете разницу между англоязычной и локализованной версией программы?


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


Tidy Forums – оптимизируем процесс чтения форума

April 20th, 2010 Begemot

Tidy Forums - небольшая утилита предназначенная для более удобной проверки новых сообщений\чтения активных тем на севастопольском городском форуме. Писал для себя, посколько стандартный вариант новых сообщений в phpbb мне не нравился и надо было что-то делать, к тому же давно чесались руки попробовать питон в "реальной" задаче. Я долго вынашивал идею потом пользуясь моментом, свободным временем на пасху, наконец решился.

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

Кто как читает форум? Я обычно захожу раз в день\два\три - кликаю на новые сообщения, дальше просмотриваю список тем и открываю интересные в новом окне. Если вы читаете так же - то эта тема для вас :)

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

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

Как следствие времени уходит море, и захожу редко, а хотелось бы читать чаще и не пропускать интересных тем. Не понимаю почему функционал фильтрации форумов\тем не добавили с движок форума, по моему это не правильно:) Решил исправить эту проблему для себя и заодно может еще кому-нибудь пригодится.

Скачать TidyForums

Настройка:

  1. Распаковать в любое место.
  2. Переименовать, а лучше скопировать, template ignoredforums.cfg  в ignoredforums.cfg
  3. Открыть в редакторе, удалить названия всех форумов которые вы ХОТИТЕ ЧИТАТЬ, то есть в файле должны остатся только
  4. форумы которые должны быть проигнорированны.
  5. Открыть config.cfg, указать свой логин и пароль, сохранить, закрыть.

Использование:

Запускаете TidyForums.exe. Ждете, процесс к сожалению не быстрый - 5-10 секунд в зависимости от количества у вас непрочитанных сообщений - при этом видимого прогресса нет. В результате в броузере открывается страница со списком всех новых сообщений, дальше как обычно.

Следует учесть что логин\пароль лежат в открытом виде в файле, вдруг для вас это критично.

Если вдруг что не работает или работает не так, пишите буду думать.

И помните - время это одно из самых ценных вещей, которые у нас есть :)


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


TidyForums – про питон, форумы, модеров и хрень

April 20th, 2010 Begemot

В связи с переездом в Севастополь зарегистрировался и начал общаться на Севастопольском городском форуме – типа надо быть в курсе событий места где живешь:) В процессе встретилось одно неудобство – беглое слежение за форумом отбирает слишком много времени. Подумалось что могу это исправить небольшим скриптом, заодно и попробую питон на “реальной” задаче.

Питон попробовал – мне по прежнему нравится:) Писать\тестировать\осваивать язык – легко. Ехешники делать можно – они даже работают, хотя конечно вес и размер занимаемой памяти соответствующий, вопрос насчет того насколько доступны исходники после компиляции в exe для меня остается открытым.

Интересно будет попробовать собрать это для мака или линукса, по идее скрипт достаточно просто и проблем быть не будет – но надо пробовать.

На форуме меня сразу же забанили, после того как написал про скрипт, так что путевки в жизнь программа не получила:) Вообще конечно админы меня удивили, интересно в чем причина такой …эээ неадкватности, ну да ладно. Пока еще не решил обидеться и послать все в *** или все-таки зарегаться под новым ником и начать жизнь с нуля :)

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

Tidy Forums – оптимизируем процесс чтения форума


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


Добавляем поддержку trialpay к NSIS Uninstall скрипт

April 1st, 2010 Begemot

Использовать trialpay для получение дополнительного дохода – хорошая идея, а предлагать пользователям получить программу бесплатно перед uninstall’ом просто замечательная :)

Итак будем добавлять поддержку trialpay в наш анинсталлер, я пользуюсь NSIS, соответственно код для него. Создаем специальную страницу под это дело, я использовал HM NIS Edit IO designer для визуального конструирования, в итоге получился вот такой вот файл UninstallTrialPay.ini

; Ini file generated by the HM NIS Edit IO designer.
[Settings]
NumFields=2

[Field 1]
Type=Label
Text=Because of our partnership with TrialPay, you can now get the fully-licensed version of Clipdiary, a $19.95 value, for free simply by trying or buying a product from one of our trusted partners.\r\n\r\nThat means you'll continue to enjoy all Clipdiary feature for Free!\r\n\r\n\r\nWith offers from trusted names such as eBay, Blockbuster, Stamps.com, and 100+ others, we're sure you'll find something you like!
Left=0
Right=300
Top=0
Bottom=112

[Field 2]
Type=Button
Text=Get it FREE now!
Flags=NOTIFY
Left=139
Right=284
Top=115
Bottom=138

Теперь добавляем его в основной скрипт,

!define MUI_FINISHPAGE_RUN_PARAMETERS
!insertmacro MUI_PAGE_FINISH
;;; From here!
; Uninstaller pages
  ReserveFile "UninstallTrialPay.ini"

;!insertmacro MUI_UNPAGE_CONFIRM
UninstPage custom un.PageUninstallTrialPay un.LeavePageUninstallTrialPay
!insertmacro MUI_UNPAGE_INSTFILES
;;; to here!
; Language files
!insertmacro MUI_LANGUAGE "English"

Дальше...

;-------------------------------- UNINSTALL FUNCTIONS

Function un.onInit
 …
;;; This line
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "UninstallTrialPay.ini"[/b]
...
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" /SD IDYES IDYES +2
Abort
FunctionEnd

Ну и наконец две основные функции

Function un.PageUninstallTrialPay
  !insertmacro MUI_HEADER_TEXT "Don't go yet! Get Clipdiary for FREE!" ""
;  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "UninstallTrialPay.ini"

  !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "UninstallTrialPay.ini"
  Pop $HWND ;HWND of dialog

  !insertmacro MUI_INSTALLOPTIONS_READ $DLGITEM "UninstallTrialPay.ini" "Field 1" "HWND"

  ;$DLGITEM contains the HWND of the first field
  CreateFont $FONT "Tahoma" 10 700
  SendMessage $DLGITEM ${WM_SETFONT} $FONT 0

  !insertmacro MUI_INSTALLOPTIONS_READ $DLGITEM "UninstallTrialPay.ini" "Field 2" "HWND"
  SendMessage $DLGITEM ${WM_SETFONT} $FONT 0

  !insertmacro MUI_INSTALLOPTIONS_SHOW

FunctionEnd

Function  un.LeavePageUninstallTrialPay
  ; At this point the user has either pressed Next or one of our custom buttons
  ; We find out which by reading from the INI file
  ReadINIStr $0 "$PLUGINSDIR\UninstallTrialPay.ini" "Settings" "State"
  StrCmp $0 0 done      ; Next button?
  StrCmp $0 2 openurl  ; "Install support for X"?
;  Abort ; Return to the page

openurl:
  ExecShell "" "http://clipdiary.com/free-clipboard-manager.php?s=untrialpay"
  Abort ; Return to the page

done:
FunctionEnd

Ну вот, вроде ничего не забыл. И пусть вам придет больше лишних денег :)


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


С++ Получение списка процессов и путей к exe файлам

March 23rd, 2010 Begemot

Вот неожиданно понадобилось получить список из всех запущенных exe файлов. Xотя казалось бы зачем оно такое может быть надо в simple end-user utility for storing clipboard history, но оказалось что надо. Пришлось изобретать велосипед, что бы труды не пропадали – решил опубликовать.

Вкратце получаем снимок всех процессов в системе CreateToolhelp32Snapshot, итерируясь по нему, для каждого процесса делаем снимок его модулей и получаем полный путь к ехе файлу. Если полный путь не нужен, а достаточно только имени файла – то вторую часть делать не нужно.

Теперь просто код, он простой, написан для универсальности с использованием stl.

typedef  map<wstring, wstring> ProcessMappingType;

wstring GetFullPathForProcess(DWORD pid)
{
    // Take a snapshot of all modules in the specified process.
    HANDLE hModuleSnap = NULL;
    hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
    if (hModuleSnap == INVALID_HANDLE_VALUE) return _T("");

    MODULEENTRY32 me32 = {0};
    me32.dwSize = sizeof(MODULEENTRY32);
    if (!::Module32First(hModuleSnap, &me32))
    {  
        ::CloseHandle(hModuleSnap);
        return _T("");
    }
    ::CloseHandle(hModuleSnap);
    return wstring(me32.szExePath);
}

ProcessMappingType GetAllRunningApplication()
{
    ProcessMappingType m;

    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 proc;
        proc.dwSize = sizeof(PROCESSENTRY32);
        if (Process32First(hSnap, &proc))
        {
            m[proc.szExeFile] = GetFullPathForProcess(proc.th32ProcessID);
            while (Process32Next(hSnap, &proc))
                m[proc.szExeFile] = GetFullPathForProcess(proc.th32ProcessID);
        }
        else wxFAIL_MSG(wxString::Format("Error Process32First: %i", GetLastError()));
       
        ::CloseHandle(hSnap);
    }
    else  wxFAIL_MSG(wxString::Format("Error Load ToolHelp:  %i", GetLastError()));  
   
    return m;
}

Все, с вас конфетка :)

P.S. И еще, хорошие люди просили сослаться на скандинавский аукцион в Киеве, дык мне не трудно :) А вы верите в подобное?


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


Про установку Mac OS на хакинтош

March 16th, 2010 Begemot

Меня несколько раз в привате спрашивали про установку Mac OS, решил написать пост по горячим следам, пока не забыл.

Read the rest of this entry »


Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.