суббота, 15 декабря 2012 г.

hobbit - управляй браузером на любимом языке.

Вспомнил тут я про этот блог. Решил что-нибудь написать.
Неделю назад вернулся из Новосибирска (город сам практически не видел, но Академгородок - это просто рай) с hackday. В двух словах: hackday - 48 часовой хакатон. На этом хакатоне мы с командой реализовывали интересную идейку - удобное управление браузером на любом языке программирования. Зачем это вообще надо? Люди - существа ленивые и любят все что можно и даже нельзя автоматизировать, что бы пока они спят\работают\отдыхают скрипт за них делал какую-то работу, которая так или иначе приносила им доход. Т.к. я уже несколько лет занимаюсь автоматизацией, то большинство плюсов и минусов успел испытать на себе. Есть отдельный класс задач автоматизации: автоматизация действий пользователя в браузере: браузерные игры, различные веб-приложения и т.п. Как и для большинства задач автоматизации действий пользователя быстрый старт можно осуществить с AutoIt. Но, возникают траблы, если сайт использует AJAX (не сможешь работать только с сорцами страницы), если нужна фоновая работа с браузером (не мешать пользователю заниматься своими делами). Последнюю подобную задачу я решил тоже с использование autoit, но без всяких там мышко/кнопко-жамканьем и анализом цвета пикселей (ИМХО, но это не кошерные вещи). Суть решения такова: в хроме через адресную строку выполняется Js-код (благо, на сайте был jQuery), который дергает инфу и жамкает кнопочки. Инфа возвращалась через обычный prompt, который скрипт на autoit закрывал. Извращение еще то, но плюсы есть: получение инфы независимо от положения и размера окна браузера. Минусы тоже существенны: нет перехвата событий на странице, вкладка должна быть активна да и вообще комп используется монопольно скриптом. Скрипт работает, код простой, все довольны. Тут мне и пришла идея - использовать расширения (плагины) хрома для работы со страницей. Их минус: есть доступ только к браузеру (например нельзя дернуть емайл и отдать его скрипту, который отправит письмо), писать можно только на Js. Плюсы: просто шикарное API, перехват событий, работа с фоновые вкладками (вообще никак не будем мешать пользователю).
Поэтому и возникла идея hobbit - плагина, который будет проксей между браузером и внешним кодом. Т.о. получаем плюсы плагинов и плюсы внешнего кода в одном флаконе.
Общая архитектура или как взаимодействуют между собой плагин и внешний код. Взаимодействие идет по двум каналам: через localStorage плагина и через WebSocket. Первая способ провалился, т.к. хром грузит содержимое local storage в ОЗУ при запуске и больше ничего не читает из него до следующего запуска. Второй путь: Плагин представляет собой WebSocket клиент, который общается с WebSocket сервером, поднятым на localhost. За 48 часов мы хотели реализовать два сервера: под винду в виде dll и под линь в виде демона. В итоге, завелся только сервер под винду (dll на C#).
В качестве примера за десять минут набрасали на C# виджет для управления плеером Вконтакте. Все работает как надо (хотя от вида кода я плакал кровавыми слезами).
Планы на текущий момент: переписать dll и нарастить функционал.
Сцыль (только сорцы плагина, нет самой длл-ки): hobbit

четверг, 23 февраля 2012 г.

Модификация программ с закрытым исходным кодом.

В общем надо было по учебе сделать видеоролик какой-нибудь. Поэтому было зашпилено вот это:

Тык

понедельник, 2 января 2012 г.

Парсинг Ifolder.ru

Скинули мне недавно файлики через ifolder.ru. Вид ссылки примерно такой: "http://ifolder.ru/12345678" То есть номер файла задается через вот эти самые чиселки. Потыкав наугад пару ссылок, меняя это число, обнаружил, что возможны два случая:

1. Файл удален, т.к. его давно никто не скачивал.

2. Файл лежит на сервере.

Just for fun сделал скрипт на Python, который бегал по ifolder и ссылки писал в файл.

Сорцы

Выдернутые файлы