Содержание статьи

Есть вопросы — присылай на faq@real.xakep.ru

 

Q: Для решения самых разных задач я очень часто использую WinAPI-функции. Это лучший способ эмулировать активность в любом приложении, считывать нужные параметры из полей — короче говоря, автоматизировать все и вся. Каждый раз для этого приходится писать приложение (чаще всего на C++), что очень муторно. Нет ли более простого способа вызвать нужную функцию из определенной системной библиотеки?

A: С помощью WinAPI действительно можно творить чудеса. Мы все помним про самые первые трояны для WebMoney, которые как раз с помощью системных вызовов управляли WM Keeper’ом и эмулировали активность пользователя таким образом, чтобы его деньги при первом же запуске приложения переводились в нужном направлении. Концепт (само собой, он уже не работает ввиду современных защитных механизмов) хорошо описан в одной из наших старых статей (bit.ly/winapi_hack_webmoney). Но вернемся к вопросу. Чтобы вызвать произвольную системную функцию, необязательно писать код на том же С++ и компилировать его. Можно обойтись специальной утилитой winapiexec (rammichael.com/winapiexec), которая позволяет выполнить любые вызовы через командную строку. Синтаксис для запуска следующий:

winapiexec.exe library.dll@FunctionName 123
unicode_text "a space"

Можно последовательно выполнить несколько команд, указав их через запятую. Особенности ключей, передаваемых через командную строку, хорошо описаны в мануале winapiexec.

Приведу несколько простых примеров использования программы.

1. Запустим калькулятор и тут же удалим процесс из памяти: winapiexec.exe

CreateProcessW 0 calc 0 0 0 0x20 0
0 $a:0x44,,,,,,,,,,,,,,,, $b:16
, Sleep 1000 , TerminateProcess
$$:11@0 0

2. Отобразим таск-менеджер:

winapiexec.exe u@SendMessageW ( u@FindWindowW
Shell_TrayWnd 0 ) 0x111 420 0

3. Выведем через MessageBox путь до temp:

winapiexec.exe GetTempPathW 260
$b:520 , u@MessageBoxW 0 $$:3 $$:0
0x40

Много триков с системой, реализованных через WinAPI-функции, хорошо описаны в этой статье некого индийского программиста: codeproject.com/KB/miscctrl/Taskbar_Manipulation.aspx.

 

Q: Хочу купить читалку, но не знаю, какую выбрать. Одни понимают книги в формате FB2 (как и мой телефон), многие только ePub и так далее. Что лучше?

A: На самом деле, никакой разницы нет. FB2, ePub и другие форматы — лишь описание контейнера, в котором хранятся тексты, изображения и шрифты. И уж конечно, давно разработаны простые конвертеры между ними. Известный сервис fb2epub.com позволяет преобразовывать книжки из FB2 в ePub в два клика мыши. Есть более универсальные решения, которые поддерживают не два, а сразу множество книжных форматов. Я заморочился этим вопросом, когда купил себе Kindle от Amazon (все-таки $139, как ни крути, хорошая цена для отменной читалки с Wi-Fi на борту). Девайс предоставляет два варианта для получения книг: загрузка в специальном формате MOBI или же покупка в онлайн-магазине.

Чтобы перевести свою библиотеку в «родной» для Kindle формат я нашел утилиту Calibre (calibre-ebook.com). Примечательно то, что эта бесплатная кроссплатформенная утилита поддерживает практически любые форматы электронных книг и даже позволяет напрямую закачивать книги в ридеры с автоматической конвертацией.

Можно, например, взять всю свою библиотеку в FB2 и разом преобразовать в нужный формат, автоматически забросив книги на девайс.

 

Q: Каждый раз мучаюсь при попытке безопасно извлечь устройство. В каждом третьем случае этому препятствует какая-то программа, причем какое именно приложение лочит флешку — понятно далеко не всегда. Как быть?

A: Пожалуй, это главная причина, почему многие (в том числе и я) просто выдергивают флешку из компьютера. Пользоваться безопасным извлечением устройств в Windows – настоящая пытка. При этом я уже не раз поплатился за пренебрежение этим простым правилом, теряя ценные данные с внешнего накопителя. На самом деле, проблема легко решается с помощью утилит USB Safely Remove (safelyremove.com) или Zentimo (zentimo.com). Помимо общей продуманности (удобное меню с картинками устройств, отображение правильных имен девайсов, возможность скрыть ненужные тома), они (о чудо!) показывают приложения, которые мешают извлечь устройство и помогают снять лок. Почему такая очевидная и понятная опция не реализована в стандартном инструменте Windows, мне понять сложно.

 

Q: Хочу реализовать на своем сайте авторизацию через популярные сервисы (Facebook, ВКонтакте, Google и так далее) без дополнительной регистрации. Как это проще всего сделать?

A: Один из самых удобных из доступных на сегодняшний день вариантов —Lozinza (loginza.ru). Это сервис, который позволяет разработчикам и вебмастерам обеспечить аутентификацию на сайте через учетные записи популярных порталов (Яндекс, Google, Rambler, Mail.Ru, LiveJournal, etc), социальных сетей ВКонтакте и Facebook, а также через идентификаторы OpenID. Простое в освоении Loginza.API и наличие готовых решений на разных языках позволяют без особого труда воспользоваться сервисом уже сейчас. Есть плагины для разработчиков сайтов на WordPress, phpBB, Joomla, Cogear, Drupal и прочих. Форма входа Логинзы на текущий момент установлена более чем на 6 500 сайтов. Кстати, стартап недавно был приобретен Яндексом, а значит, у сервиса есть все шансы на самое быстрое развитие.

 

Q: Есть задача – организовать emailрассылку по большому (действительно большому) списку получателей. Сначала хотел написать простой скрипт, который рассылал бы все с дедика через sendmail, но оценив объем (а это гигабайты трафика), понял, что этот вариант не подойдет. Как бы реализовал рассылку ты? Сразу хочу сказать, что речь идет о легитимной рассылке, это не спам.

A: Если ни один из готовых сервисов для организации рассылок вроде subscribe.ru тебя не устраивает (что более чем вероятно), я вижу в твоей ситуации один вариант. Но зато какой современный и прогрессивный! Раз уж ожидается большой и сложно предсказуемый объем трафика, то надо переложить проблему на тех, у кого мощностей всегда предостаточно – облачных провайдеров. Известный и в последнее время все чаще упоминаемый нами Amazon сейчас проводит открытое бета-тестирование сервиса Amazon Simple Email Service (SES), который как раз и занимается доставкой электронной корреспонденции из облака. Понятно, что ни баснословный объем трафика, ни немыслимое количество писем для его мощностей не проблема.

Отправка тысячи сообщений стоит $0.10. Помимо этого придется платить за входящий и исходящий трафик (не больше $0.10 за Гб). Примеры скриптов доступны в разделе для разработчиков (bit.ly/amazon_ses_scripts), поэтому попробовать сервис в действии можно прямо сейчас. Интересно, насколько эффективны у компании механизмы борьбы со спамом, а то ведь с таким подходом и никакие ботнеты для рассылки будут не нужны :).

 

Q: Экспериментирую с альтернативными движками для хранения данных в MySQL. Проблемы возникают с установкой PBXT (primebase.org). Можете дать гарантированно работающий мануал?

А: Ниже рецепт от нашего эксперта в этой отрасли — Александра Лозовюка:

1. Сначала необходимо выяснить, где находится директория плагинов (подразумеваем, что MySQL 5.1 у тебя уже установлен). Для этого набери в консоли mysql-клиента:

show
variables like "%plugin%".

Можно также выполнить аналогичный SQL-запрос через phpMyAdmin. В ответ ты получишь что-то вроде /home/my-user/mysql/lib/mysql/plugin.

2. Скачай исходники плагина из Lanchpad (launchpad.net), используя Bazzar:

bzr branch lp:pbxt /tmp/pbxt-src

3. Далее приступаем к конфигурации:

./configure --with-mysql=<builddir>/<
mysql-src> --with-plugindir=
<mysql-dir>/lib/mysql/plugin

4. И, в конце концов, собираем проект:

make && make install.

5. Полученный модуль копируем в директорию плагинов и выполняем SQL-команду, чтобы подключить новый плагин:

INSTALL PLUGIN
pbxt SONAME 'libpbxt.so'

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

«CREATE TABLE t1 (c1 int,
c2 text) engine=pbxt;».

Или изменяем уже существующую: «ALTER TABLE t1 engine=pbxt».
Вуаля, теперь в качестве движка используется новомодный PBXT.

 

Q: Как проверить, разрешает ли провайдер использовать VPN-соединения?

А: Необходимо убедиться, что GRE-пакеты не блокируются. Сделать это можно на сайте itshidden.com — бесплатном VPN-сервисе, который как раз работает на PPTP. Если не работает, то, скорее всего, GRE-пакеты бло кируются. В этом случае можно попробовать OpenVPN или SSH-туннелирование.

 

Q: Беремся за большой проект, предполагающий разработку клиентских приложений для разных мобильных платформ. Обеспечить всех разработчиков реальными устройствами мы не можем, поэтому ищу сейчас всевозможные эмуляторы. Реально ли с их помощью вести весь цикл отладки?

A: Для отладки и тестирования разработок могут пригодиться два вида инструментов: эмуляторы и симуляторы. В чем разница? Все просто. Эмулятор — это программное средство, которое транслирует откомпилированный код с оригинальной архитектуры на платформу, где он фактически будет выполняться. В нашем случае эмулятор — это десктопное приложение, которое эмулирует железо мобильного устройства и работу его операционной системы, позволяя запускать и отлаживать приложения. Существуют также эмуляторы именно мобильных операционных систем (например, для Windows Mobile и Android), не привязанные к какому-то конкретному девайсу. Симулятор — менее сложное и менее полезное решение, которое лишь имитирует работу мобильного девайса и его ОС, но не эмулирует железо.

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

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

  • iOS Simulator — симулятор устройств, работающих под управлением мобильной ОС от Apple. Решение идет вместе со средой разработки XCode и доступно только для платформы Mac OS X: developer.apple.com/devcenter/ios/index.action;
  • Android Emulator — эмулятор операционной системы Android версии 1.1, 1.5, 1.6, 2.0, 2.1, 2.2 & 2.3 (для работы необходимо скачать образы ОС и SDK): developer.android.com/guide/developing/tools/emulator.html;
  • Samsung Galaxy Tab Add-on — cпециальный аддон для Android SDK, позволяющий эмулировать работу модного планшетника Samsung Galaxy Tab: innovator.samsungmobile.com/galaxyTab.do;
  • HP webOS Emulator — эмулятор немногочисленных устройств от HP (Palm Pre, Palm Pixi, Palm Pixi Plus), поставляется вместе с SDK: developer.palm.com/index.php?id=1744;
  • Nokia Symbian Emulators — эмулятор устройств, работающих под управлением Symbian: bit.ly/symbian_emulators;
  • BlackBerry Simulators — cимулятор девайсов и ОC Blackberry: blackberry.com/developers/downloads/simulators;
  • Windows Mobile 6.5 Emulator Images — образы эмуляторов WM6.5: bit.ly/WM65emulator;
  • Windows Phone 7 Simulator — симулятор новой мобильной ОС от Microsoft, который работает в связке с Visual Studio: bit.ly/WP7simulator;
  • Bada Simulator — симулятор ОС Bada от компании Samsung: bit.ly/Bada_simulator.
 

Q: Все чаще и чаще встречаю довольно продвинутые проекты, которые используют Google Protocol Buffers. Объясни, в чем суть проекта? Чем он лучше XML?

A: Protocol Buffers (буферы протоколов) — это не зависящий от языка и платформы, расширяемый способ разделять на серии структурированные данные. По своим задачам технология очень похожа на XML, только компактнее, быстрее и проще. Ты однажды определяешь, как должны быть структурированы данные, а потом используешь специально созданный исходный код для записи и чтения структурированных данных в\из различных потоков данных, используя разнообразные языки – Java, C++ или Python. Описание выполняется в специальных .proto-файлах:

message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}

В этом .proto-файле определяется формат описания человека. После этого мы можем легко использовать это определение для создания и манипулирования объектами.

Person person;
person.set_name("John Doe");
person.set_id(1234);
person.set_email(
"jdoe@example.com");
fstream output(
"myfile", ios::out | ios::binary);
person.SerializeToOstream(&output);

Чем это лучше XML? Использовать Protocol Buffers проще, в 10-20 раз быстрее и в 3-10 раз эффективнее в плане полученного объема. Есть конкретные примеры использования. Например, недавно бэкенд Twitter перешёл на Protocol Buffers. По заявлению разработчиков Twitter, база в триллион твитов на XML занимала десять петабайт вместо одного. Большое количество примеров и статей по теме ты найдешь на официальном сайте (code.google.com/p/protobuf).

Еще интересной разработкой в этой области является библиотека MessagePack (msgpack.org), которая тоже предназначена для сериализации данных. Она позволяет обмениваться структурированными данными между различными языками так же, как JSON, но, в отличие от последнего, результат получается меньше и быстрее. На сайте доступны модули для Ruby, Perl, Python, C/C++, Java, PHP, Haskell, Lua.

 

Q: Существует ли универсальное решение для Windows, позволяющее получить доступ к данным на разделах с различными файловыми системами, которые используются в Linux- и BSD-системах? Включая самые современные, вроде Ext4. Нет желания держать отдельные тулзы, скажем, для Ext2/3/4 и UFS/UFS2.

A: Мне больше всего по душе утилита R.Saver (rlab.ru/tools/rsaver.html). Основное назначение программы — восстановление данных с различных версий файловых систем FAT и NTFS. Но помимо этого утилита предоставляет доступ в режиме чтения к следующим файловым системам:

  • Microsoft Windows: FAT и NTFS, включая FAT12, FAT16, FAT32, NTFS, NTFS5;
  • Apple Mac OS: HFS, HFS+/HFSX;
  • Linux: Ext2, Ext3, Ext4, ReiserFS, JFS и XFS;
  • Unix, BSD, Sun Solaris: UFS и UFS2 (FFS), включая UFS с обратным порядком байтов, которая используется на Sparc/Power серверах.

Оставить мнение

Check Also

LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Не секрет, что если ты собрался посетить такие страны как США или Великобританию то, прежд…