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

Протекторы и паранойя антивирусов

Ночка выдалась – разработческая, добротная, с приключениями и со счастливым концом. Хотя, скорее это уже было счастливое “начало”, т.к. этот самый счастливый “конец” наступил только под раннее утро.

Разработал, значитъ-панимаешь, софтинку. Закрыл ее, значитъ, протектором. Гружу на сайт по FTP – у-у-упс! Облом! Закачка проходит, но в последний момент файл отвергается сервером… Эка, блин!

Смотрю логи. Оказывается это антивирь на сервере ругается. Троян я оказывается написал… О, как! Ну, ладно – троян так троян – не в первой же! Перепишем, перекодим и станет “троянчик” белым да пушистым.

Начинаю разбираться: собираю exe-шник в разных конфигурациях, по очереди вырубаю элементы защиты, гружу по фтп непротекченный exe-шник. Долго ли коротко, но выясняется, что антивирю не нравится именно запротекченный код – чистый exe-шник грузится в нормально. ОК! Бегом на virustotal, сканируются разные варианты exe-шника, вычисляются возможные кандидаты на паранойю. Выявляется парочка-троечка. Начинаю теребить тех. поддержку хостинга: что за антивирь, отчего паранойя? Выясняется виновник – ClamAV.

Ну да ладно, начинаются игры с протектором: меняем настройки так, сяк, эдак! В момент Икс все срабатывает, и проблемный exe-шник уже на сервере, да и на virustotal проходит проверку вчистую. Отлично! Поют сердца. Качество работы антивиря впечатлило безмерно. Многие элементы защиты в проблемном exe-шнике применялись и в другом софте: контроль целостности кода, собственные виртуальные машины, асимметричная криптография, поверх пройтись протектором – и хоть бы хны! На всех этих приложениях не возникало ни малейшей проблемы, а тут на тебе!

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

Эка разобрали мои письма тех. поддержку, если даже новость через сутки вывесили!?! Правда, новость не то чтобы не достоверная. О нет! Все вполне верно. Это правда, только правда и ничего кроме правды. Только это не вся правда! Проблема-то была не вирусах, а в недоантивирусах :). На virustotal версия ClamAV и сигнатурные базы за сутки так и не сменились, но в конце концов clamAv exe все-таки пропустил. И смех, и грех!

В завершение: практически сразу был опробован метод загрузки на ftp-сервер запароленных архивов, кои антивирь, конечно же, пропускал без вопросов. Собственно говоря, кто мешает указать пароль к архиву в комментариях? Вроде как выход? Да и архив аккурат был c portable-версией – как бы подразумевается, что пользователь распаковкой владеет!?! Только как-то это более привычно для вареза на рапидшарах – уж больно подозрительно это – архив для публичного скачивания под паролем!
Имхо, запароленный архив скорее приведет к проверке на том же virustotal, с последующими закономерно и бесконечно вытекающими вопросами пользователей.

PS: а сегодня день рождения Джона Леннона! Сегодня бы ему, между прочим, стукнуло бы уже 69 лет…

суббота, 3 октября 2009 г.

Дзен. Две статьи

Сегодня немного о Дзен – две ссылки на любопытнейшие статьи:

Жизненный цикл программиста
Статья Михаила Донского. Это тот самый Донской, который автор ДискоКоммандера и основатель конторы ДИСКо. Личность более чем легендарная в нашей отрасли!  Кстати говоря, когда-то, по молодости, уже в какие-то незапамятные времена был на собеседовании в этой самой ДИСКо. Уж, конечно с Михаилом мне пообщаться не довелось, но картина самого посещения до сих пор в памяти осталась. А о чем-то это да говорит…

История одного байта 
А это братцы, самый разнастоящий Дзен. Когда-то, в одна тыща черт его знает каком-то лохматом году эта “весчь” была удостоена публикации на моей еще самой первой домашней страничке. Страничка давно уж канула в лету, а сегодняшний день кое-чем аккурат навеял воспоминания о первых впечатлениях об “одном байте”. Ну, коль странички нет, чего бы и лишний разок не увековечить ссылкой в блоге!?!

PS: может эти статьи для кого и баян, а для кого уже и лохматые да “с хвостом”, но ссылок они более чем достойны. Авось кому-то попадется и в первый раз, а тексты все ж эпохальные!

воскресенье, 27 сентября 2009 г.

Девелоперский отдых. Йога

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

image001

image002

image003 

image007

image008

Приятного и оздоровительного воскресного отдыха, коллеги!
Материалы для самостоятельной работы см. здесь.

PS: есть самое искреннее желание поблагодарить всех высказавшихся в  “Ограничениях триальной версии”! Вот теперь точно понятно, зачем нужен блог: пока сочинишь пост, сам сто раз все “образмышляешь” да передумаешь. А почитав комментарии, мысль дотачивается уже до почти наброска кода. Получилось, что от подсчета запусков или expired date никуда не деться. Да пришлось поколдовать с самописным с нуля notification в трее. Отчет о том, что получилось, будет позже. Народ, С_П_А_С_И_Б_О за комменты!

Ну, а о летних видах активного отдыха поговорим поближе к лету.

вторник, 22 сентября 2009 г.

ZIP-архивы. Просто и элегантно

На CodeProject.com появилась новая статья о работе с ZIP-архивами “Zip Utils - clean, elegant, simple, C++/Win32”.

Вполне элегантный код. Другие библиотеки для работы с ZIP-архивами уж больно навороченные: то разные методы сжатия, то завязка на MFC вроде CZipArchive. Но это все не то! Как правило, сжимать файлы приходится стандартными архиваторами вроде того же самого WinZIP. Ну, не буду же я выкладывать на сайт дистрибутивы в ZIP-подобном формате, но все же несколько ином!?! Как пользователь его распакует? Поэтому, зачастую, задача сводится всего лишь к распаковке стандартного ZIP-архива.

Вот что-то подобное давно и искалось. Чтобы код был прост в использовании, чтобы всегда поддерживал самый обыкновенный ZIP, чтобы не было зависимостей от сторонних DLL. Ну и чтобы, весьма желательно, не довешивал в бинарник и еще полторы сотни килобайт – больно это жирно будет для банальной распаковки ZIP`а!

Короче, скачал. Попробовал. Набросал за пяток минут пару тестов на MFC  (весь код занял с десяток строк). Полный зер гут! Работает отменно: просмотр архива, поддержка паролей, распаковка. То, что надо! Весь бинарник в Release-версии весит всего лишь 23 кило (VC6) – впечатляет!

PS: осталось только придумать, куда это прикрутить. В Aml Pages что ли!?! Дык вроде как ни к чему? Там как раз и есть свой собственный, самописный, ZIP`о-подобный алгоритм… Работает как часы.

среда, 16 сентября 2009 г.

Ограничения триальной версии

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

Вот как раз на ограничениях и начался “чудный секос”. Ёптыдь, кто бы мог подумать, что ограничения это так сложно!?! Однако-ж!

Ищем же золотую середину!?! Мало ограничений – никто не будет платить; много ограничений – никто толком не распробует блюдо, и снова платить не будут!

Похоже, компромисс это искусство.
Что там у нас обычно: ограничения по сроку использования, ограничения по функционалу, да нагскрин нам в руки.   Замешиваем все три ингредиента, соли-перца по вкусу и “блюдо” пользователю на стол.

Ага. Щаз!!! Здесь случай особый! Добрую половину этих приправ некуда солить, а с оставшимися двумя с половиной приемами не пойми что делать… Короче, у данной шароварки есть некоторые нюансы. Огласим весь список, пожалста!

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

Отсюда вытекают довольно нетривиальные последствия.

  • Ограничение функционала: крайне не хочется делать, т.к. софт только-только начинает развиваться, и пока особо ограничивать нечего. Все супер-пупер навороты запланированы на следующие версии.
  • Ограничение данных: нечто вроде объема документа, запрет печати, водяные знаки. Нечего ограничивать! Потому как нет никаких пользовательских данных, документов и.т.д.
  • Ограничение по времени использования: нельзя, потому как… да ловится это на раз-два-три. Да и программа портабельная – куда запуски (время) писать, если она с флешки работает!?!
  • Нагскрин (nagscreen) при старте: нельзя, т.к. в 99 из 100 случаев программа стартует вместе с Windows… Ага, блин! Вот только нагскрина при запуске Винды не хватало!
  • Нагскрин на выходе: тоже не годится. Т.к. в 99 из 100 завершаться программа будет опять-таки вместе с самой Windows.
    Лочить выход из Винды да закрытия нагскрина ручками это вообще не дело!
    А повисеть нагскрину пару-тройку сек да и закрыться… А где смысл? Ну закроется всё на пару-тройку сек позже, какой же это нагскрин!?!
  • Нагскрин по ходу работы: опять двадцать пять! Не прокатывает! Почему – опишу ниже.

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

Поэтому с нагскрином посреди работы возникает примерно следующая ситуация. Пользователь сосредоточенно работает в каком-то стороннем приложении, и вдруг у-у-упс, возникает нагскрин… Возникает он настолько неожиданно, настолько стремительно, что просто хочется сказать “ух-ты, ёпты!”. При этом, конечно же, пользователь сбит с толку. Работает себе в каком-нибудь, ну скажем, Word`е, пишет себе понимаешь текст для блога, размышляет, придумывает, в общем, с головой погружен в свою же собственную задачу. А тут фигакс, и в центре экрана появляется какая-то фигня, перекрывает его же любимый Word, и давай себе считать секунды.

Это настолько отвлекает, настолько раздражает, что просто слов нету.
Не голословно утверждаю! Сам уже перебрался на триальную версию, и вовсю гоняю этот нагскрин. Если даже мне – автору – от этого нагскрина настолько нехорошо, что проще и быстрее нажать “Выход из приложения”, чем ждать несколько секунд пока станет доступной кнопка “Продолжить”.
Потому что нагскрин отвлек крайне неожиданно, заставил что разве не вздрогнуть. И к тому же заставляет ждать пару-тройку секунд, пока можно будет вернуться к основной задаче. А между прочим в этот момент я – я
! ни Пушкин, ни Билли, ни соседка – а я_дорогой_любимый_бесконечно_милый – в эти самые драгоценные секунды теряю сфокусированность на своей собственной задаче, теряю нить размышлений, контекст своей работы. Вот потому и проще кликнуть на кнопке “Выход”. А после кликов так десяти-двадцати вообще снести софтину нафиг!

Вот такая возникла проблема с ограничениями бесплатной версии. Ограничения по сроку использования, по функционалу не подходят.  Но ведь что-то же надо показать пользователю? Показать на предмет, что “можно и без гемора, но тогда уж за деньги“, иначе откуда он об этом узнает?

Остается только нагскрин. Только вот загвоздка: вариантов его показа совсем немного – это не старт, и не завершение софтины. А нагскрин по ходу работы в таком виде стимулирует вовсе не покупку, но русский мат да скорый снос проги.

И куды крестьянину податься – ума не приложу!?! Коллеги! Что делать? (“Кто виноват” уж не спрашиваю – в курсе :)

PS: Что это за софтина, я пока карты раскрывать не буду.
Скажу только, что софтина написана не вчера, не позавчера, и даже не с месяц, а несколько лет назад.
Все это время прога благополучно и более чем популярно пребывала в стадии freeware. Поэтому фидбека по ней более чем хватает, а посему и картина ее повседневного использования есть достаточно четкая.