FAQ UnitedЕсть вопросы — присылай на faq@real.xakep.ru Q: Для решения самых разных задач я очень часто использую WinAPI-функции. Это лучший способ эмулировать активность в любом приложении, считывать нужные параметры из полей — короче говоря, автоматизировать все и вся. Каждый раз для этого приходится писать приложение (чаще всего на C++), что очень муторно. Нет ли более простого способа вызвать нужную функцию из определенной системной библиотеки?A: С помощью WinAPI действительно можно творить чудеса. Мы все помним про самые первые трояны для WebMoney, которые как раз с помощью системных вызовов управляли WM Keeper’ом и эмулировали активность пользователя таким образом, чтобы его деньги при первом же запуске приложения переводились в нужном направлении. Концепт (само собой, он уже не работает ввиду современных защитных механизмов) хорошо описан в одной из наших старых статей (bit.ly/winapi_hack_webmoney). Но вернемся к вопросу. Чтобы вызвать произвольную системную функцию, необязательно писать код на том же С++ и компилировать его. Можно обойтись специальной утилитой winapiexec (rammichael.com/winapiexec), которая позволяет выполнить любые вызовы через командную строку. Синтаксис для запуска следующий:
Можно последовательно выполнить несколько команд, указав их через запятую. Особенности ключей, передаваемых через командную строку, хорошо описаны в мануале winapiexec. Приведу несколько простых примеров использования программы. 1. Запустим калькулятор и тут же удалим процесс из памяти: winapiexec.exe
2. Отобразим таск-менеджер:
3. Выведем через MessageBox путь до temp:
Много триков с системой, реализованных через 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-клиента: Можно также выполнить аналогичный SQL-запрос через phpMyAdmin. В ответ ты получишь что-то вроде /home/my-user/mysql/lib/mysql/plugin. 2. Скачай исходники плагина из Lanchpad (launchpad.net), используя Bazzar: 3. Далее приступаем к конфигурации:
4. И, в конце концов, собираем проект:
5. Полученный модуль копируем в директорию плагинов и выполняем SQL-команду, чтобы подключить новый плагин:
6. Теперь создаем таблицу, используя новый движок:
Или изменяем уже существующую: «ALTER TABLE t1 engine=pbxt». Вуаля, теперь в качестве движка используется новомодный PBXT. Q: Как проверить, разрешает ли провайдер использовать VPN-соединения?А: Необходимо убедиться, что GRE-пакеты не блокируются. Сделать это можно на сайте itshidden.com — бесплатном VPN-сервисе, который как раз работает на PPTP. Если не работает, то, скорее всего, GRE-пакеты бло кируются. В этом случае можно попробовать OpenVPN или SSH-туннелирование. Q: Беремся за большой проект, предполагающий разработку клиентских приложений для разных мобильных платформ. Обеспечить всех разработчиков реальными устройствами мы не можем, поэтому ищу сейчас всевозможные эмуляторы. Реально ли с их помощью вести весь цикл отладки?A: Для отладки и тестирования разработок могут пригодиться два вида инструментов: эмуляторы и симуляторы. В чем разница? Все просто. Эмулятор — это программное средство, которое транслирует откомпилированный код с оригинальной архитектуры на платформу, где он фактически будет выполняться. В нашем случае эмулятор — это десктопное приложение, которое эмулирует железо мобильного устройства и работу его операционной системы, позволяя запускать и отлаживать приложения. Существуют также эмуляторы именно мобильных операционных систем (например, для Windows Mobile и Android), не привязанные к какому-то конкретному девайсу. Симулятор — менее сложное и менее полезное решение, которое лишь имитирует работу мобильного девайса и его ОС, но не эмулирует железо. В любом случае, и эмуляторы, и симуляторы часто не предоставляют полной свободы для отладки приложений. Трудности могут возникнуть, например, при тестировании функций, использующих цифровой гироскоп. В этом случае без реального устройства в большинстве случаев не обойтись. Так или иначе, ниже — небольшая подборка инструментов, которые могут тебе понадобиться.
Q: Все чаще и чаще встречаю довольно продвинутые проекты, которые используют Google Protocol Buffers. Объясни, в чем суть проекта? Чем он лучше XML?A: Protocol Buffers (буферы протоколов) — это не зависящий от языка и платформы, расширяемый способ разделять на серии структурированные данные. По своим задачам технология очень похожа на XML, только компактнее, быстрее и проще. Ты однажды определяешь, как должны быть структурированы данные, а потом используешь специально созданный исходный код для записи и чтения структурированных данных в\из различных потоков данных, используя разнообразные языки – Java, C++ или Python. Описание выполняется в специальных .proto-файлах:
В этом .proto-файле определяется формат описания человека. После этого мы можем легко использовать это определение для создания и манипулирования объектами.
Чем это лучше 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. Но помимо этого утилита предоставляет доступ в режиме чтения к следующим файловым системам:
|