Print This Post Пишем простой асинхронный парсер

Четверг, 23. Февраль 2012
Раздел: Perl, автор:

Многие разработчики типового говнософта, ориентированного на работу с вебом, зачастую используют потоки для того, чтобы получить выигрыш в скорости. Данный подход, конечно, обладает своими плюсами, но все же не является оптимальным, например, с точки зрения потребляемых ресурсов системы (особенно когда речь идет о потребителях, любящих ставить сразу "тыщу потоков").
Альтернативным и общеизвестным способом ускорения работы софта является асинхронная модель, то есть модель, при которой все вызовы методов являются неблокирующими. В данной статье я рассмотрю простой пример, который будет использовать асинхронные веб-запросы.
В качестве примера будет написан парсер идентификаторов приложений с Android Market, который пригодится в готовящейся статье, посвященной добычи трафика с маркета. Для простоты будем использовать модуль AnyEvent, он упрощает реализацию асинхронной событийной модели. Итак, приступим.
Читать дальше »

Print This Post Читаем MBS

Воскресенье, 12. Февраль 2012
Раздел: C/C++, Windows, автор:

В связи с недавним помутнением сознания начал разбираться в некоторых аспектах написания драйверов, а также содержимом WRK. По ходу исследований внезапно потребовалось затронуть MBR, создаваемую Windows.
Как известно, MBR (Master Boot Record) у ОС семейства Windows совпадает по размеру с MBS (Master Boot Sector) и содержится в нём. Однако, в общем смысле, MBR в общем смысле, MBR может занимать часть пространства и за пределами MBS.
Короче, чтобы не утомлять занятых людей, суть исходного кода, приведенного ниже, сводится к тривиальной задаче чтения MBS, вывода нескольких необходимых мне параметров из виндовой MBR (информации о разделах) и подсчета MD5 хэш-суммы от содержимого сектора.
Мини-программа выглядит как-то так:

Программа: скачать
Для людей, которым по каким-то неведомым причинам необходим исходный код: скачать

P.S. Товарищи, зря вы пьете фенотропил, честно, это ведь один из легких способов быстро посадить печень, а здоровье беречь нужно.

Print This Post Встраиваем Flash в свое приложение

Вторник, 17. Январь 2012
Раздел: C/C++, Windows, автор:

Как-то раз при разработке одной программы у меня возникла необходимость встроить какую-нибудь красивую мини-игру в раздел About. Так как делать красивую игру средствами WinAPI - это то ещё удовольствие и по срокам и по времени, то я решил просто-напросто встроить flash-файл в свой проект. Примерное описание того, как это сделать, мы и рассмотрим далее. В примере мы пойдем чуть дальше, а именно не только встроим флеш-ролик в окно, но и добавим парочку элементов управления. В результате у нас получится нечто подобное:

Таким образом, разобрав пример, вы запросто сможете встроить этого замечательного (или какого-нибудь другого) единорога в свое приложение, пускай и цена этого выкрутаса будет ~2.5 мегабайта.
Читать дальше »

Print This Post Пишем простой cкринсейвер

Воскресенье, 20. Ноябрь 2011
Раздел: C/C++, Windows, автор:

Скринсейвер (или хранитель экрана) - это, по сути, обычная программа, в которой определены несколько специальных процедур для обработки сообщений, посылаемых ОС, при запуске и конфигурировании скринсейвера.
Программы-скринсейверы обычно хранятся в директории %WINDIR%\System32 и обладают расширением .scr. Таким образом, при переходе на страницу выбора заставки, Windows ищет в системной директории все файлы с соответствующим расширением и формирует из них список возможных скринсейверов. Также следует упомянуть несколько важных аспектов написания.

– Скринсейвер должен экспортировать функции ScreenSaverConfigureDialog, ScreenSaverProc.
– Название скринсейвера в окне настройки определяется строковым ресурсом с идентификатором IDS_DESCRIPTION, который должен быть равен 1.
– Идентификатор диалогового окна, которое будет появляться при нажатии клавиши "Параметры", т.е. при попытке настроить скринсейвер, должен быть DLG_SCRNSAVECONFIGURE и равняться числу 2003.
– Программа также должна содержать реализацию функции RegisterDialogClasses.

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

Экран выбора скринсейвера


Читать дальше »

Print This Post Дорабатываем DLL для LastFM

Понедельник, 3. Октябрь 2011
Раздел: Assembler, C/C++, Windows, автор:

Как оказалось, библиотека для LastFM из статьи от 31.08.11 оказалась не особо юзабельной из-за нескольких досадных недоработок:
1. Клавиши управления не работали, если окно свернуто (связано с тем, что управление производилось с помощью SendMessage, но в свернутом состоянии окно не обрабатывает оконные сообщения, поэтому они переставали реагировать). (Спасибо Artik'у за наводку)
2. При сворачивании окна в трей и последующем восстановлении пропадали элементы управления, так как окно "уничтожалось".

Чтобы исправить эти моменты, я решил переписать библиотеку. В этой статье я опишу изменившиеся методы (к слову, CreateThumbnailToolbar и EnumWindowsProc остались без изменений).
Читать дальше »

Print This Post Получаем лицензионный Minecraft почти бесплатно

Среда, 21. Сентябрь 2011
Раздел: Жизнь, автор:

There is no security on this earth; there is only opportunity.
– Douglas MacArthur

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

Но что-то мы отошли от темы. Листал я интернеты в поисках чего-нибудь эдакого и наткнулся на чье-то игровое видео по Minecraft. Полез на официальный сайт игры (minecraft.net) и с сожалением обнаружил, что игра платная, причем стоит не очень-то дешево.
Зарегистрировался на сайте, посмотрел способы оплаты и решил посмотреть, как происходит процесс оплаты игры. Платить можно через PayPal или банковской картой. В качестве агрегатора платежей (для всех вариантов, кроме PayPal) используется Moneybookers, казалось бы, откуда взяться проблеме, но, видимо, не перевелись ещё "гениальные девелоперы", которые кладут на документацию системы обслуживания оплаты.

Встречайте глупый и примитивный баг: если выбрать оплату игры кредитной картой (главное не через PayPal, там, слава богу, косяков не допустили), нажать кнопку Proceed to checkout, перехватить запрос и поменять в нем сумму с 21.95$ (цена для США), на, например, 0.7$ (сумма обусловлена минимальным размером платежа через систему), а затем ввести данные своей или виртуальной карты и оплатить, то оплата успешно пройдет и Premium account будет удачно оплачен (или можно купить gift-кодов, я проверял на них).

Конечно, небольшой минус состоит в том, что не у всех есть банковская карта, а некоторым не хочется светить данные своей карты, но это не проблема, так как всегда можно купить Visa Virtual с необходимым номиналом (например, на плати.ру: долларовая карта, рублевая карта).
Для тех, кто не понял, что и как надо делать, чтобы купить майнкрафт дешево:
Читать дальше »

Print This Post Добавляем в LastFM управление через панель задач

Среда, 31. Август 2011
Раздел: C/C++, Windows, автор:

С появлением Windows 7 в системе появилась полезная фишка, позволяющая размещать элементы управления в панели задач, а именно в превью, которое высвечивается при наведении на элемент в панели. Однако, редко встретишь приложение, которое её использует. Из множества приложений, которыми я пользуюсь, на ум приходит только одно - Media Player Classic. Вот так выглядят элементы управления для него:

Так сложилось, что я люблю слушать "полу-радио", в частности, Last.fm. Но, к сожалению, в клиенте Last.fm нет поддержки этих модных кнопочек, поэтому мне захотелось добавить их в него собственноручно. Перечень действий, которые необходимо для этого, примерно следующий:
1. Находим хендл основного окна клиента.
2. Добавляем элементы управления.
3. Ставим свой обработчик оконных сообщений, в котором задаем поведение элементов управления.
Читать дальше »

Print This Post Распаковываем Perl-скрипты, обработанные PerlApp

Воскресенье, 7. Август 2011
Раздел: C/C++, Perl, автор:

Как известно, для Perl, впрочем, как и для других скриптовых языков, существуют утилиты, позволяющие создавать из скрипта полноценный exe-файл, который можно переносить на другие компьютеры и запускать, даже если интерпретатор языка на них не установлен. В случае с perl'ом наиболее популярными утилитами являются Perl2Exe и PerlApp.
Принцип работы этих утилит довольно прост и состоит в упаковке внутрь результирующего exe-файла библиотеки перла, основного скрипта и зависимых модулей. Содержимое, естественно, сжимается, шифруется (с помощью XOR) и не хранится в открытом виде внутри файла. Исследуем чуть подробнее внутреннее устройство результирующих exe-файлов, которые получаются с помощью PerlApp.
Для начала, определим с помощью чего сжимаются данные. Это сделать довольно просто, например, с помощью PeID (с плагином Krypto Analyzer) или какого-нибудь hex-редактора. В случае с PeID все тривиально: указываем путь к файлу, запускаем плагин и получаем список найденных крипто-сигнатур.

С hex-редактором тоже просто: открываем нужный файл, нажимаем Alt+F6 (справедливо для Hiew), получаем список строковых ресурсов, гуглим эти строки.

Таким образом определяем, что для сжатия используется библиотека zlib, причем довольно старая версия - 1.1.4. Конечно, можно начать искать, где именно в файле хранятся сжатые данные, но мне захотелось пойти другим путем.
Читать дальше »

Print This Post Пишем простое клиент-серверное приложение на Perl

Понедельник, 1. Август 2011
Раздел: Perl, Для новичков, автор:

В этой статье я рассмотрю создание простого чата на Perl. Чат будет состоять из консольного сервера и клиента с GUI на основе Tk. Для начала реализуем серверную часть.
В серверной части мы не будем использовать процессы или потоки, а вместо этого воспользуемся мультиплексированием. Мультиплексирование довольно просто реализуется с помощью модуля IO::Select, который является классом-оболочкой над системной функцией select.
Функция select позволяет определить готовность дескриптора к записи/чтению. Также стоит отметить, что при использовании select следует избегать использования блокирующих вызовов, как, например, print, read, вместо них необходимо использовать syswrite, sysread.
Читать дальше »

Print This Post Заработок на торрентах

Воскресенье, 17. Июль 2011
Раздел: $$$, автор:

В этой статье речь пойдет о преимущественно зарубежной схеме заработка на торрентах. Тема довольно избита, но все ещё работоспособна и позволяет обеспечить по крайней мере небольшой приток денег.
Основой схемы является известная партнерская программа Sharecash, которая относится к классу PPA. Алгоритм работы с ней можно описать следующим образом:
1. Регистрируетесь в партнерской программе.
2. Загружаете файлы (лимит 200МБ).
3. По ссылкам на загруженные файлы перед скачиванием предлагается пройти какой-нибудь тест (например, перейти на чей-нибудь платник и совершить там некие бесплатные действия).
4. Человек проходит "тест", потом качает Ваш файл.
5. Вам за это платят примерно от 0.2$ до 1$.

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

Теперь вернемся к торрентам. Смысл торрентов в контексте этой и подобных партнерских программ состоит в распространении файлов с Вашей ссылкой. Это организуется за счет создания на публичных торрент-трекерах (например, thepiratebay.org) фейковых раздач с заведомо популярными названиями. Самым очевидным материалом для таких раздач являются ещё не вышедшие фильмы. Список готовящихся к выходу фильмов можно взять на Wikipedia или IMDB.
После выбора названия создаете архив, называете его, например: Mission Impossible - Ghost Protocol 2011 Leaked Excerpt. В архив можно поместить что угодно с соответствующим названием и расширением, но не забудьте добавить readme-файл или комментарий к архиву с призывом перейти по ссылке партнерской программы для получения пароля к архиву. Выглядеть архив будет примерно так:

Остается только создать раздачи на нескольких трекерах и ждать, пока массы подтянутся и скачают. На thepiratebay пиры появляются буквально через 15-40 минут. Да, схема действительно простая и избитая, но один знакомый недавно её протестировал и вот что у него получилось:

Чтобы увеличить прибыль, следует загружать файл на как можно большее число трекеров, неплохой список которых можно составить, воспользовавшись сайтом torrents.to. Также важно создавать раздачи с правдоподобными размерами, вряд ли кто-нибудь станет качать "новинку киноиндустрии", если она весит 5 килобайт. При регистрации на трекерах необходимо пользоваться прокси, так как многие ресурсы ведут борьбу с такими раздачами.

P.S. Если кто-нибудь будет пробовать подобное на СНГ-трафике, то отпишите о результатах.