И снова про иконки

November 21st, 2009 Begemot

На этот раз правда, не про бесплатные наборы иконок, а про правильное их использование в программе.

Заказал у дизайн главной иконки иконки у фрилансера,  $40, мне понравилось – я доволен, результат тут, спасибо маньяку за наводку. В процессе интеграции выяснил что, код который генерирует визард студии для работы с иконками – неправильный, и все эти годы у меня криво отображалась главная иконка. Раньше она и сама была кривая, так что на это внимание не обращал,  а теперь стало явно видно. Что генерирует визард

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

Проблема в том что LoadIcon грузит иконку весьма паршиво. И гораздо лучше использовать LoadImage, вот так

SetIcon(HICON(LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 32, 32, 0)), TRUE); // Set big icon
SetIcon(HICON(LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, 0)), FALSE); // Set small icon

Теперь и маленькая (таскбар, заголовок окна) и большая (алт-таб) иконка загрузятся корректно.

Но и это еще не все тонкости, грузить иконку для использования в трее надо так как написано выше, это понятно. Но если вы хотите корректно отображать иконку в трее для Windows 2000 – то необходимо делать две ветви кода, и для W2K грузить иконку с опцией LR_VGACOLOR

HICON(LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_VGACOLOR)

2000 винда умеет отображать в трее только 16 цветную иконку (ужас!), это нужно учесть и иметь формат с 4х битным цветом в вашем ico файле.

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

Отсюда мораль, если вы уже давно разрабатываете продукт – попробуйте абстрагироваться и посмотреть на него свежим взглядом…

За помощь и посвящения в тайны иконок, благодарю эксперта в этом вопросе  и по совместительству автора приятной программы для работы с иконками.

Кстати, тут сегодня Агентство переводов Alconost Translations выложило в открытый доступ Follow-up templates (шаблоны писем потенциальным клиентам), можно брать, пользоваться и даже добавлять свой любимый text repository for instant inserting 🙂


Подъездный маркетинг

November 17th, 2009 Begemot

Много всяких объявлений видел на подъезде – установка счетчиков, окон, подключение к кабельному, проверки етс. Но такого еще не видел

 

marketing

Теперь название этой конторы наверняка знает каждый владелец компа в нашем районе. Учитесь 🙂

Может, того набрать пакет софта, включить туда несколько триальных шаровар  – и ходить по домам устанавливать обучать народ ?:)


Осваиваю ноутбук Lenovo SL500, первые впечатления

November 3rd, 2009 Begemot

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

Основные задачи для ноутбука – оставаться на связи и иметь возможность работать в поездках, приезжая в деревню к родителям и смотреть кино на кухне 🙂 Исходя из этого изначально выбиралась бюджетная машина. С выбором у нас достаточно печально, все-таки не столица, ждать пока привезут выбранную модель было некогда, в итоге помучавшись два дня с выбором, взял Lenovo.

Основными критериями при выборе, помимо бюджетности были core 2 duo, 1200 * 800, и еще почему-то хотелось hdmi выход (есть слабая надежда, что через hdmi выход можно будет подключать ноут к dvi-монитору, хотя убедительных доказательств [не]возможности этого найти не удалось). Остановил свой выбор на LENOVO ThinkPad SL500 (NRJFMRT) 15.4" (1280 x 800) / Core 2 Duo T5870 (2.0 ГГц) / 2 ГБ / 250 ГБ / Intel GMA 4500MHD / DVD±RW / LAN / веб-камера / WiFi / Buletooth / Vista Home Basic / 2.85. Вот только с блютузом похоже облом и его там тупо нету:(.

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

Производительность – пока еще ничего серьезного не ставил, но скорость реакции гуи в висте и в убунте весьма радует, я боялся что в висте будет хуже. Опасения по поводу того что после 24" сидеть за 15" будет не возможно, пока тоже не подтвердились, хотя подожду пока поставлю студию и попробую реально работать. С тачпадом вроде освоился. В общем как по привыкну, испробую в реальных задачах напишу часть вторую.

P.S. Пост пишу на ноутбуке в электричке, боевое крещение:)


Ручная загрузка функций из DLL или как в программе использовать функции из Vista API

October 26th, 2009 Begemot

Наконец и до меня дошел прогресс и я все-таки решил перейти на Vista Clipboard API в своем Clipboard Manager. Логику продумал, код написал, код что-то наподобие :

if (vista)
CallNewVistaAPI();
else
UseOldAPI();

Запускаю в дебаге под XP, программа выдает ошибку и закрывается:

Clipdiary.exe – Entry Point Not Found
—————————
The procedure entry point AddClipboardFormatListener could not be located in the dynamic link library USER32.dll.

То есть даже в случае когда код не пытается вызвать новую функцию, программа все равно не запускается, плохо. Гугл мне почему-то не чем не помог, зато помогли добрые люди. Решение – не вызывать напрямую функции api появившиеся только в висте, а тихонько вручную подгружать их из USER32.dll, запоминать адреса и использовать через указатели. Мне собственно дали готовый класс для всего этого, который я переписал под свои нужды и свой стиль, и теперь могу поделиться:)

Заголовочный файл:

#pragma once

#pragma pack (push, 8)

class CDLLFunctionImports
{
public:
CDLLFunctionImports(void);

typedef BOOL (WINAPI * PADDCLIPBOARDFORMATLISTENER)(HWND);
typedef BOOL (WINAPI * PREMOVECLIPBOARDFORMATLISTENER)(HWND);

PADDCLIPBOARDFORMATLISTENER pRemoveClipboardFormatListener;
PREMOVECLIPBOARDFORMATLISTENER pAddClipboardFormatListener;

private:
void Import(void);
HMODULE GetModuleHandle(TCHAR * ModuleName);
};

extern CDLLFunctionImports DLLFunctionImports;

#pragma pack (pop)

typedef’ом определяем типы указатели на функции с нужной нам сигнатурой. В принципе, мне бы тут хватило и одного типа, но пусть уж будет два для благозвучия. Потом определяем экземпляры указателей на эти функции. Все просто. Еще объявляем глобальный объект, экземпляр нужного класса.

Файл реализации:

#include "ph.h"
#include "dllfunctionimports.h"

CDLLFunctionImports DLLFunctionImports;

CDLLFunctionImports::CDLLFunctionImports(void)
{
pAddClipboardFormatListener = NULL;
pRemoveClipboardFormatListener = NULL;

Import();
}

void CDLLFunctionImports::Import(void)
{
OSVERSIONINFO OSVersionInfo;
OSVersionInfo.dwOSVersionInfoSize=sizeof(OSVersionInfo);

if (GetVersionEx(&OSVersionInfo))
{
if (OSVersionInfo.dwMajorVersion >= 6)
{
HMODULE hModule = GetModuleHandle(_T("USER32.DLL"));
if (hModule != NULL)
{
pAddClipboardFormatListener = PADDCLIPBOARDFORMATLISTENER(GetProcAddress(hModule, "AddClipboardFormatListener"));
pRemoveClipboardFormatListener = PREMOVECLIPBOARDFORMATLISTENER(GetProcAddress(hModule, "RemoveClipboardFormatListener"));
}
}
}
}

HMODULE CDLLFunctionImports::GetModuleHandle(TCHAR * ModuleName)
{
HMODULE hModule = ::GetModuleHandle(ModuleName);
if (hModule == NULL)
{
hModule = ::LoadLibrary(ModuleName);
}

return hModule;
}

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

DLLFunctionImports.pAddClipboardFormatListener(handle);

Пользуясь случаем, хочу сказать спасибо человеку, который это все написал и поделился кодом. Еще он написал отличный и пока еще бесплатный lightweight yet powerful icon and bitmap editor, так что если кому приходится редактировать иконки, берите, а то он скоро зарелизит и захочет денег 🙂


TrialPay теперь поддерживат Payoneer, молодцы

October 25th, 2009 Begemot

Ура, то о чем так долго говорили большевики, свершилось! TrialPay добавил поддержку payoneera и дает эту опцию всему народу, а не только избранным.

Можно привязать существующую карту, для этого надо тыкнуть ссылку ‘Click here to create an account with Payoneer’, а потом ‘If you already own a prepaid MasterCard card from Payoneer,
Click Here!’, и дальше действовать по обстоятельствам.

Так что теперь у вас нет никакого оправдания не использовать TrialPay для конвертации как минимум uninstall page, а ведь некоторые успешные продукты используют его и на главных страница сайта и иногда неплохо получают:).

В общем если вы еще не зарабатываете с TrialPay’em вы ССЗБ :)  (вы по ссылке регистрируйтесь, а я потом в отчете по рефералам посмотрю кто из вас не ССЗБ :))

А что бы вы могли больше зарабатовать c TrialPay, вот вам ссылки много много советов по adwords и там в низу ссылка на free ebook где-то была. Дерзайте.


О работе, SEO и задумках

October 22nd, 2009 Begemot

Ведь вчера мы только брали с ним с тоски по "банке",

А сегодня он кричит: – Меняй коньки на санки!

Жалко тренера – он тренер неплохой… ну и бог с ним  (c)

Ударно поработал, целых 2 дня, уже и не помню когда последний раз был в таком ударе:) В результате успел написать, оформить и выложить, небольшую утилитку для удаления форматирования из текста в буфере обменаget plane text. Так что если у кого были проблемы со вставкой RTF – теперь, по идее,  вы должны быть счастливы:)

А потом меня жестко раскритиковали за seo, вернее за его отсутствие, вернее даже не просто раскритиковали, а можно даже сказать прямо взяли вот так вот и мордой об стол. Типа есть у меня мегаполезная программа такой себе text repository с возможностью быстрой вставки. А вот тайтлов и дескрипшинов нет, и всякой другой seo оптимизации тоже нет.  Мол распиздяй я последний и работать мне надо идти грузчиком.

С поисковой оптимизацией у меня действительно как-то не складывается, причем давно и упорно. Было дело пытался, даже не раз, но особого толку не было. Вот не стоит у меня на нее и все тут, что тут сделаешь? SEO это же вам не пришел, увидил, победил. Занимать им надо долго, упорно, и боюсь первое время безрезультатно. А перед этим еще и много читать было бы полезно.

И вот последнее время, я все чаще и чаще сталкивался с мыслью что стоит наверное все-таки вплотную этим делом заняться. И есть у меня такая задумка, не написать ли мне какую-нибудь свою seo utility (могу продать контекстную ссылку :)),  а там под шумок и сайты с оптимизирую. Я уже даже и придумал что писать буду – это будет такой универсальное центр поисковой оптимизации:) Осталось только определиться надо оно мне и миру или нет.

P.S. Карполан, я тебе торжественно обещаю исправится, в самое что ни на есть ближайшее время.

P.S.S Кстати о SEO – http://maxibiz.blogspot.com/2009/08/google-2009-1.html


Регистраторы, кризис или осеннее обострение?

October 19th, 2009 Begemot

Опять  о регистраторах, с ума что ли все посходили…? что попалось за последнии 2 дня.

Plimus

Пришел тикет от пользователя  сегодня

https://www.plimus.com/jsp/privacy.htm

….:
>>> Access Denied
The requested page is not publically available.
If you believe this is an error, please contact
support@plimus.com and mention the URL in question. <<< (That from a Firefox browser).

OK, the Plimus privacy statement is not >publically< available… Good. So much for trust into a company that does financial transactions.

 

Вот мой скриншот в доказательство

image 

 

Аvangate

Человек жалуется на политику партии, я согласен

 

Swreg

Эти тоже жгут не по-детски.

 

И при всем при этом Avangate на 1 месте, Plimus на 2 по количеству пользователей принявших участие в опросе “А кто у нас лучший регистратор


crazyegg : изучаем статистику

October 17th, 2009 Begemot

Если кто не знает http://crazyegg.com это такой сервис который позволяет собирать статистику и анализировать поведение пользователя не страницах,  есть платные и бесплатный типы аккаунтов. Бесплатного вполне хватает что бы поиграться с сайтом. Первые мои опыты с ним были больше года назад – тогда мне не удалось узнать ничего интересного и я немного разочаровался, в принципе все то, что сообщал мне сервис про поведение посетителей было очевидно и так.

Сегодня пришло письмо-напоминание, о том что у меня завершился очередной эксперимент. На этот раз данные мне показались интересными. Тестировалась страница Flashpaste Help Center, лимит 1000 кликов.

На первом месте как и ожидалось ссылка на online help 75 кликов (13%), а вот на втором почему-то ссылка на форум 72 клика, это стало большой неожиданность. Судя по всему народ видя, что есть форум идет его изучать, и это заставляет задуматься, прятать ссылку на форум или идти наводить там порядок :)  Дальше ссылка на обучающий ролик, на четвертом месте статья. Опять же интересно из 10 статей, одна лидирует с троекратным отрывом 34 клика, против 12 на вторую по популярности статью – можно сделать вывод что хочет народ от программы, а ведь это не самая главная ее функция…

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

Интересная картинка на  heatmap’e, интересно три ссылки лидеры расположены на одной линии – как раз по направлению взгляда, не потому ли они лидеры ?

 

heatmap

Одно ясно страницу надо менять, хотя я это и так собирался сделать. Теперь буду править вооруженный знанием о поведении пользователей.

А вы подсматриваете за посетителями?:)


Сайт лежит только для меня или для всех

October 13th, 2009 Begemot

 http://downforeveryoneorjustme.com/ – название говорит само за себя, полезный сервис. Теперь не приходится дергать людей в аське\мирке что бы узнать у хостера проблема или у провайдера.


Сврус-Киев, часть третья, и надеюсь последняя – о регистраторах

October 7th, 2009 Begemot

Так получилось, что я последнем посте незаслуженно обидел PayPro Global, не упомянув их презентацию. На шароварке были представители сразу трех регистраторов шареита, авангейта и пайпро глобала, причем последнии вели себя скромнее всех:) ограничившись только стендом, без доклада. И не вспомнил бы я про них, если бы вчера утром мне не потребовалось отнести фотографии распечатать в салон, а флешку забрала жена на работу. И тут я вспомнил, а ведь у PayPro к бумажному буклету была приклеена флешка! Вот так мы нашли друг друга:)

Если кто не знает, PayPro Global новый регистратор. Судя по презентации – весьма технологичный, в смысле контрольной панели, судя по презентациям. Но сам сайт на меня такое впечатление не произвел почему-то, хотя контрольной панели я не видел. Из плюсов принимают вебмани, бесплатно дают систему защиты\активации софта, из минусов  – тарифов на сайте нет, и что бы узнать надо писать в поддержку…

Собственно сама презентация.

 

В тему: Andy Brice, проводит опрос что бы определить лучшего регистратора, можете помочь ему заполнив анкету.