<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Рагимов Роман</title><link>http://unrar.me/</link><description>Обновления блога Рагимова Романа</description><atom:link href="http://unrar.me/feed/" rel="self"></atom:link><language>ru-ru</language><lastBuildDate>Fri, 11 May 2012 07:59:19 -0500</lastBuildDate><item><description><![CDATA[

<p>Товарищ G3DinUA задал в комментарии к предыдущему посту несколько вопросов, на которые хотелось бы ответить отдельно, ну и добавить несколько мыслей о дальнейшем развитии проекта.</p>
<h3 id="ioswp7blackberry10">Будет ли приложение для iOS/WP7/Blackberry10?</h3>
<h4 id="tldr">TL;DR</h4>
<p>iOS - нет
Blackberry - скорее да, чем нет
WP7 - возможно</p>
<h4 id="">Подробно</h4>
<p><strong>iOS</strong> - однозначно нет. У меня нет возможности организовывать инфраструктуру для разработки под iOS и платить 100 баксов ежегодно для поддержки программы, которая не приносит никакого дохода и, ввиду своей некоммерческой основы, вряд ли когда-нибудь станет. Стоит также заметить, что то, чем занимается программа не совсем легально в большинстве цивилизованных стран и я сомневаюсь, что она пройдет процедуру одобрения модераторами App Store.</p>
<p><strong>WP7</strong>. Спорить не стану  платформа интересная, да и с C# я имел дело, но поддерживать три системы на разных языках, да еще и выкатывать новые фичи... Не думаю, что версия для WP7 появится раньше, чем стабилизируется Android версия.</p>
<p><strong>Blackberry?</strong> Я вижу на сайте разработчиков что-то про SDK для AIR, следовательно портировать не проблема. Но реального устройства на этой платформе у меня нет, соответственно, тестировать смогу только на эмуляторе и нужен будет кто-то для тестирования перед выгрузкой в их AppStore. В ближайшее время гляну на возможности платформы.</p>
<h3 id="_1">Рекомендации в десктоп версии</h3>
<h4 id="tldr_1">TL;DR</h4>
<p>Скорее нет, чем да.</p>
<h4 id="_2">Подробнее</h4>
<p>Думаю, идея с рекомендациями приходила в голову всем, что раньше пользовался Kinobaza.tv. Но, тут возникает несколько проблем, которые практически невозможно решить на текущем уровне развития проекта.</p>
<h5 id="1">Проблема #1: Количество пользователей</h5>
<p>Большая часть рекомендательных систем (да практически все) работает на принципе поиска пользователей поставивших оценки аналогичные вашей и вычисления примерной оценки на базе этих данных. Соответственно - чем больше пользователей, Тем больше оценок, тем лучше рекомендации. На данный момент у desktop версии примерно 50 пользователей. Сами понимаете, что качество рекомендаций при такой выборке будет хуже некуда.</p>
<h5 id="2">Проблема #2: Количество пользователей</h5>
<p>При увеличении количества пользователей возникнет другая проблема - для построения рекомендаций в live режиме требуются большие вычислительные мощности. Вычисление предполагаемой оценки при базе в 1000 пользователей на моем desktop заняло около 2 секунд. И это по одному фильму для одного пользователя. А теперь представьте даже 50 пользователей, желающих получить рекомендации по 10 фильмам... Мощности текущего хостинга для таких задач явно не хватит.</p>
<h5 id="3">Проблема #3: Системы рекомендаций</h5>
<p>На самом деле, сами движки рекомендаций - достаточно редкие звери. В большинстве случаев их пишут для себя и во внешний мир открывают только платный API, при этом аккуратно складируя все данные у себя (см. П1 о ценности пользователей).</p>
<p>Единственный сайт с реальными рекомендациями в рунете это IMHOnet. Он же, до последнего времени, предоставлял движок для Kinobaza. На каких принципах строилось это сотрудничество остается только гадать, но предполагаю, что IMHOnet просто собирал базу оценок для улучшения поиска в будущем, а как только им показалось, что данных достаточно - закрыл доступ.</p>
<p>Для написания собственной системы у меня не хватит математического аппарата. У меня далеко не математическое образование, чтобы лезть настолько глубоко в статистику. То, что я теоретически могу написать, с точки зрения производительности и качества, будет даже хуже open-source разработок вроде EasyRec.</p>
<h3 id="_3">Собственно, размышления</h3>
<p>Подводя итог, хотелось бы еще раз напомнить, что я работаю один и проект всегда рассматривался мною в качестве хобби. Android версия появилась постольку, поскольку у меня есть устройства на базе этой ОС и я люблю посмотреть свежую серию сериала на сон грядущий. Desktop версия дорабатывается потому что мне не удобно держать открытым браузер, занимающий пол экрана, когда я работаю. Именно из-за того, что это хобби и нужно лично мне, я не забрасываю разработку глядя на графики использования desktop версии.</p>
<p>Конечно, мне тоже хотелось бы иметь нормальную систему рекомендаций, как на Kinobaza, и клиенты подо все платформы, и тысячи пользователей, но это стоит денег и времени, причем в таких объемах, которые я не готов вкладывать в хобби без каких бы то ни было гарантий по возвращению затраченного.</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2012/05/aspen-player-na-drugih-platformah-i-rekomendatelnyj-servis/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/41.png"/></a></p>]]></description><title>Aspen Player на других платформах и рекомендательный сервис</title><link>http://unrar.me/2012/05/aspen-player-na-drugih-platformah-i-rekomendatelnyj-servis/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Fri, 11 May 2012 07:59:19 -0500</pubDate><guid>http://unrar.me/2012/05/aspen-player-na-drugih-platformah-i-rekomendatelnyj-servis/</guid><category>[Tag] Aspen Player</category></item><item><description><![CDATA[

<p>Внезапно написал мобильную версию Aspen Player.</p>
<p><a href="http://unrar.me/static/uploads/skrinshoty-aspen-player-mobile.jpg"><img alt="Скриншоты Aspen Player Mobile" src="http://unrar.me/static/uploads/skrinshoty-aspen-player-mobile.jpg" title="Скриншоты Aspen Player Mobile" /></a></p>
<p>По функционалу она, конечно, далека от настольного приложения, но это только начало. В планах добавить синхронизацию с desktop-версией и реализация своего рода пульта дистанционного управления.</p>
<p>В данный момент ее можно и Google Play - <a href="https://play.google.com/store/apps/details?id=me.unrar.aspenvpmobile" rel="nofollow">Aspen Player Mobile на Google Play</a>. Приложениe доступно для всех жителей ex-USSR. Сделано это по причине непонятной ситуации с легальностью поиска по VK. Для прочих желающих есть прямая ссылка на APK <a href="https://bitbucket.org/rragimoff/aspen-player/downloads/AspenPlayerMobile.apk" rel="nofollow">Aspen Player Mobile с Bitbucket</a>.</p>
<p>Буду рад предложениям.</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2012/05/aspen-player-mobile/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/40.png"/></a></p>]]></description><title>Aspen Player Mobile</title><link>http://unrar.me/2012/05/aspen-player-mobile/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Thu, 10 May 2012 11:03:49 -0500</pubDate><guid>http://unrar.me/2012/05/aspen-player-mobile/</guid><category>[Cat] Android</category><category>[Tag] Aspen Player</category></item><item><description><![CDATA[

<h3 id="aspendb">AspenDB</h3>
<p>Как я уже <a href="http://unrar.me/2012/02/aspen-player-i-kinobazatv/" title="Aspen Player и Kinobaza.tv">писал</a>, Kinobaza перестала удовлетворять меня в качестве источника информации о фильмах. После долгих и мучительных поисков альтернативы, стало понятно, что в российском сегменте удовлетворяющих моим требованиям ресурсов (с достаточно большой базой, постоянно обновляющихся и имеющих открытый API) в принципе нет, а у иностранцев практически полностью отсутствуют данные о наших местных новинках. Это печально…</p>
<p>Так как хотелось сделать все по уму, я решил запустить собственную небольшую базу фильмов и сериалов, специально для работы с Aspen Player. На данный момент в базе около 70.000 наименований фильмов и более 150.000 эпизодов сериалов. Обновления сериалов происходят раз в два-три дня, фильмов — еженедельно. В процессе добавление описаний серий в самые популярные сериалы (сейчас эти данные доступны, например, для сериала «Игра престолов»).</p>
<p>Открывать API я пока не готов, но если вам очень нужно, не насилуйте базу, вытащив данные доступа из исходников приложения, а лучше напишите мне на почту или в комментариях, попробуем договориться о передаче данных в виде дампа.</p>
<h3 id="aspenplayer">AspenPlayer</h3>

<p>Результат месячной работы по переводу интерфейса в векторный формат и допиливанию нужных мне функций.</p>
<p>Основной список изменений приведен в <a href="http://unrar.me/project/aspen-player" title="Проект Aspen Player">changelog</a>, здесь я опишу мелкие улучшения, которые не имеет смысла добавлять в список изменений.</p>
<p><strong>Похожие фильмы и сиквелы</strong>
<img alt="Окно похожих фильмов" src="http://unrar.me/static/uploads/okno-pohozhih-filmov.jpg" title="Окно похожих фильмов" /></p>
<p>Поскольку Kinobaza отключила свой сервис рекомендаций (вернее не свой и не отключила, отключили, но не суть), данная функция может быть востребована, если вы ищете фильмы похожие на только что просмотренный. Кроме этого, в случае доступности подобной информации, выводится список сиквелов и приквелов.</p>
<p><strong>Интерфейс скачивания файлов</strong>
<img alt="Окно выбора источника для загрузки" src="http://unrar.me/static/uploads/okno-vybora-istochnika-dlya-zagruzki.jpg" title="Окно выбора источника для загрузки" /></p>
<p>Если вы помните, в оригинальном VOMP загрузка происходила после выбора пункта «Загрузить» в контекстном меню источника. В этом же контекстном меню находился пункт «Ссылка», открывавший окно со ссылками на источник для загрузки с помощью третьей программы. Немного поразмыслив над решаемыми этим меню задачами, я пришел к выводу, что данный способ далеко не интуитивен и, возможно, многие пользователи вообще не знали о подобной функции программы.</p>
<p>Результатом размышлений об оптимизации и популяризации данной функции стало добавление двух кнопок для каждого элемента в списке источников — «Смотреть» и «Скачать». При выборе «Скачать» открывается окно, которое вы видите на скриншоте выше, позволяющее как скопировать ссылку в буфер обмена, так и начать загрузку фильма встроенными средствами Aspen Player.</p>
<p>Кроме этого, теперь появилась возможность выбора качества скачиваемого ролика — максимально доступное или установленное пользователем, как предпочтительное (Настройки &gt; Качество).</p>
<p><strong>Строка состояния</strong>
<img alt="Строка состояния Aspen Player" src="http://unrar.me/static/uploads/stroka-sostoyaniya-aspen-player_1.jpg" title="Строка состояния Aspen Player" /></p>
<p>Нововведение, которое должно раскрыть свой потенциал в будущем. На данный момент в ней отображаются:</p>
<ul>
<li>индикатор успешности подключения к VK.com (зеленый прямоугольник)</li>
<li>последний твит из официального твиттера приложения (позволит мне предупреждать о проблемах в режиме online)</li>
<li>состояние загрузки</li>
</ul>
<p><strong>Обратная связь прямо из приложения</strong>
<img alt="Обратная связь из приложения" src="http://unrar.me/static/uploads/obratnaya-svyaz-iz-prilozheniya.jpg" title="Обратная связь из приложения" /></p>
<p>Переоценить возможность сообщить об ошибке в приложении без открытия тикета в BitBucket из приложения сложно.</p>
<p>На сегодня все. Надеюсь, приложение вам понравится.</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2012/03/aspen-player-20-i-aspendb-01/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/38.png"/></a></p>]]></description><title>Aspen Player 2.0 и AspenDB 0.1</title><link>http://unrar.me/2012/03/aspen-player-20-i-aspendb-01/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Thu, 22 Mar 2012 16:25:23 -0500</pubDate><guid>http://unrar.me/2012/03/aspen-player-20-i-aspendb-01/</guid><category>[Cat] ActionScript</category><category>[Tag] Aspen Player</category></item><item><description><![CDATA[

<p>Очень надоедали постоянно обновляющиеся обложки альбомов в Spark List. Как выяснилось, лечится этот недуг очень просто, с помощью ContentCache (только для Flex 4.5 и старше).</p>

<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s:ItemRenderer xmlns:fx=&quot;http://ns.adobe.com/mxml/2009&quot; xmlns:s=&quot;library://ns.adobe.com/flex/spark&quot;
    xmlns:mx=&quot;library://ns.adobe.com/flex/mx&quot; autoDrawBackground=&quot;false&quot;&gt;
    &lt;fx:Script&gt;
        &lt;![CDATA[
            import spark.core.ContentCache;

[Bindable]
            public static var imageCache:ContentCache = new ContentCache();

]]&gt;
    &lt;/fx:Script&gt;
    &lt;s:BorderContainer 
        left=&quot;0&quot; right=&quot;0&quot; top=&quot;0&quot; bottom=&quot;0&quot;
        backgroundAlpha=&quot;0&quot; borderVisible=&quot;false&quot;&gt;
        &lt;s:Image 
            source=&quot;{data.image}&quot; contentLoader=&quot;{imageCache}&quot; /&gt;
    &lt;/s:BorderContainer&gt;
&lt;/s:ItemRenderer&gt;
</code></pre>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2012/03/borba-s-obnovleniem-izobrazhenij-vo-flex-item-renderer/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/37.png"/></a></p>]]></description><title>Борьба с обновлением изображений во Flex Item Renderer</title><link>http://unrar.me/2012/03/borba-s-obnovleniem-izobrazhenij-vo-flex-item-renderer/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Mon, 19 Mar 2012 10:38:00 -0500</pubDate><guid>http://unrar.me/2012/03/borba-s-obnovleniem-izobrazhenij-vo-flex-item-renderer/</guid><category>[Cat] ActionScript</category><category>[Tag] best practices</category><category>[Tag] Flex</category></item><item><description><![CDATA[

<p>Я думаю, пришло время подумать об отказе от Kinobaza.tv в качестве источника информации о фильмах, т.к. со своей ролью она совершенно не справляется. Вот, что на данный момент отображается в списке эпизодов Теории Большого взрыва:</p>
<p><img alt="Отсутствие информации о сериале на Kinobaza.tv" src="http://unrar.me/static/uploads/otsutstvie-informacii-o-seriale-na-kinobazatv.jpg" title="Отсутствие информации о сериале на Kinobaza.tv" /></p>
<p>А между тем, на TVRage, для уже вышедших(!) серий, доступны не только названия, но даже screencaps.</p>
<p>Проблема же заключается в полном отсутствии у Kinobaza конкурентов. Kinopoisk не подходит по причине отсутствия API, IMDB по той же причине + проблемы с русским языком. Да, для сериалов можно использовать API MyShows.ru, благо оно тоже бесплатное и даже, в некотором смысле, проще представленного в прошлом году официального API Kinobaza.tv. Но у MyShows есть одна проблема, которая не позволяет полностью отказаться от Kinobaza в Aspen Player — отсутствие поиска по полнометражным фильмам.</p>
<p>Вот и сижу я, размышляю, как бы решить данную проблему? Ну не свою же базу организовывать, в самом деле.</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2012/02/aspen-player-i-kinobazatv/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/34.png"/></a></p>]]></description><title>Aspen Player и Kinobaza.tv</title><link>http://unrar.me/2012/02/aspen-player-i-kinobazatv/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Fri, 10 Feb 2012 01:35:02 -0600</pubDate><guid>http://unrar.me/2012/02/aspen-player-i-kinobazatv/</guid><category>[Cat] ActionScript</category><category>[Cat] Программирование</category><category>[Tag] vomp</category><category>[Tag] air</category><category>[Tag] API</category><category>[Tag] Aspen Player</category></item><item><description><![CDATA[

<h3 id="">Почему именно гибрид?</h3>

<p>Есть несколько причин из-за которых вам стоит потанковать Душу Дракона в гибридном медвежье-кошачьем спеке:</p>

<ul>
<li>В Туманах Пандарии специализация друидов «Сила зверя» будет разбита на две независимых специализации — «Сила зверя» (для котов) и «Защитник» (для медведей). Таким образом Душа Дракона предоставляет нам последний шанс поиграть гибридным классом, перед тем как потерять его навсегда.</li>
<li>Многие бои в Душе Дракона очень подходят именно для гибридного танка-ДПС. Ниже вы найдете описания боев и ваших возможностей в них.</li>
<li>Некоторые бои в Душе дракона требуют одного танка, другие же — двух. Наличие гибридного танка позволяет нам в нужный момент легко переключаться с танкования на нанесение урона без смены экипировки.</li>
<li>«Чистые» медведи достаточно бесполезны для рейда в сравнении с другими танками, особенно когда дело доходит до рейдовых кулдаунов. Бонус 4Т13 немного исправляет эту ситуацию, но остальные танки также получают аналогичные бонусы. Реальной пользой является возможность перейти в форму кошки и начать наносить урон на уровне средних рейдовых ДПС.</li>
</ul>

<p><a href="/2012/01/tankovanie-medvedem-gibridom-v-dushe-drakona/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2012/01/tankovanie-medvedem-gibridom-v-dushe-drakona/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/33.png"/></a></p>]]></description><title>Танкование медведем-гибридом в Душе дракона</title><link>http://unrar.me/2012/01/tankovanie-medvedem-gibridom-v-dushe-drakona/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Mon, 16 Jan 2012 06:55:12 -0600</pubDate><guid>http://unrar.me/2012/01/tankovanie-medvedem-gibridom-v-dushe-drakona/</guid><category>[Cat] World of Warcraft</category><category>[Tag] тактики</category><category>[Tag] патч 4.3</category><category>[Tag] танк</category><category>[Tag] ферал-друид</category></item><item><description><![CDATA[

<p>В одном из проектов потребовалось парсить достаточно объемные JSON файлы, отдаваемые API. Примерный размер файла 6 Мб и около 50000 записей. Стандартная библиотека работала достаточно неспешно и я решил сравнить производительность предлагаемых альтернатив.</p>
<p>Тестирование проводилось на виртуальной машине Ubuntu 10.10 32bit. Возможно, на 64 bit результаты будут отличаться. Время выполнения измерялось с помощью timeit.repeat(repeat=10, number=10) с последующим усреднением.</p>
<table>
<thead>
<tr>
<th>Библиотека</th>
<th>parsing</th>
<th>parsing + serialization</th>
</tr>
</thead>
<tbody>
<tr>
<td>simplejson</td>
<td>2.162</td>
<td>5.182</td>
</tr>
<tr>
<td>cjson</td>
<td>2.395</td>
<td>7.851</td>
</tr>
<tr>
<td>ujson</td>
<td>2.416</td>
<td>5.524</td>
</tr>
<tr>
<td>py-yajl</td>
<td>3.830</td>
<td>Killed</td>
</tr>
<tr>
<td>jsonlib</td>
<td>4.081</td>
<td>10.155</td>
</tr>
<tr>
<td>json</td>
<td>5.209</td>
<td>9.764</td>
</tr>
</tbody>
</table>
<p>Как видите, самой быстрой реализацией на данный момент является simplejson. Следом за ним идут cjson и ujson. cjson немного быстрее при парсинге, но значительно проигрывает при сериализации обратно в строку. Все три библиотеки примерно в два раза быстрее стандартного модуля json.</p>
<p>py-yajl, несмотря на заверения авторов обертки, во-первых, оказалась значительно медленнее нативных библиотек, во-вторых, была достаточно сложна в сборке и установке, ну и в-третьих, выдала «killed» в качестве результата теста на парсинг-сериализацию.</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/10/proizvoditelnost-bibliotek-dlya-parsinga-json-v-python/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/31.png"/></a></p>]]></description><title>Производительность библиотек для парсинга JSON в Python</title><link>http://unrar.me/2011/10/proizvoditelnost-bibliotek-dlya-parsinga-json-v-python/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Tue, 25 Oct 2011 07:56:21 -0500</pubDate><guid>http://unrar.me/2011/10/proizvoditelnost-bibliotek-dlya-parsinga-json-v-python/</guid><category>[Cat] Программирование</category><category>[Tag] python</category><category>[Tag] JSON</category><category>[Tag] тесты</category></item><item><description><![CDATA[

<p><img alt="Переписка Медведева и Дурова" src="http://unrar.me/static/uploads/perepiska-medvedeva-i-durova.png" title="Переписка Медведева и Дурова" /></p>
<p>Если кто-то еще не в курсе, Дима Медведев теперь еще и активный пользователь Фейсбука.</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/10/na-zlobu-dnya/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/29.png"/></a></p>]]></description><title>На злобу дня</title><link>http://unrar.me/2011/10/na-zlobu-dnya/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Thu, 20 Oct 2011 01:09:27 -0500</pubDate><guid>http://unrar.me/2011/10/na-zlobu-dnya/</guid><category>[Cat] Разное</category><category>[Tag] Раша</category></item><item><description><![CDATA[

<p><img alt="Freelance Freedom 195 русский перевод" src="http://unrar.me/static/uploads/freelance-freedom-195-russkij-perevod.png" title="Freelance Freedom 195 русский перевод" /></p>

<p><a href="/2011/10/freelance-freedom-195/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/10/freelance-freedom-195/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/27.png"/></a></p>]]></description><title>Freelance Freedom #195</title><link>http://unrar.me/2011/10/freelance-freedom-195/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Sun, 16 Oct 2011 03:50:14 -0500</pubDate><guid>http://unrar.me/2011/10/freelance-freedom-195/</guid><category>[Cat] Фриланс</category><category>[Tag] Freelance Freedom</category></item><item><description><![CDATA[

<p><img alt="Freelance Freedom 228 русский перевод" src="http://unrar.me/static/uploads/freelance-freedom-228-russkij-perevod_1.png" title="Freelance Freedom 228 русский перевод" /></p>
<p>Ох, как мне это знакомо. Только мои заказчики обычно хотят общаться не в Twitter, а либо в ICQ, либо в Skype. Причем, в большинстве случаев, по окончании этих переговоров, так остается непонятным, в чем заключалась столь большая необходимость в real-time общении, если работать с документами, изображениями и т.п. все равно удобнее в GMail.</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/10/freelance-freedom-228/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/26.png"/></a></p>]]></description><title>Freelance Freedom #228</title><link>http://unrar.me/2011/10/freelance-freedom-228/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Mon, 10 Oct 2011 09:50:39 -0500</pubDate><guid>http://unrar.me/2011/10/freelance-freedom-228/</guid><category>[Cat] Фриланс</category><category>[Tag] Freelance Freedom</category></item><item><description><![CDATA[

<p>Во время работы с библиотекой <a href="https://launchpad.net/pingdjack" rel="nofollow">pingdjack</a> от Ивана Сагалаева, обнаружилась досадная 
особенность, не отраженная в документации, но доставившая мне немало хлопот.</p>
<p>Ввиду того, что в последних версиях django по умолчанию включена защита от CSRF, 
система со включенным CSRFMiddleware выдает ошибку 403. Решить это можно двумя путями:</p>
<ul>
<li>отключением django.middleware.csrf.CsrfViewMiddleware в settings.py</li>
<li>изменением кода pingdjack</li>
</ul>
<p>Во втором варианте в файл server.py требуется добавить следующее:</p>

<pre><code># в начале файла
from django.views.decorators.csrf import csrf_exempt

# Добавить @csrf_exempt между @require_POST и def server_view
@require_POST
@csrf_exempt 
def server_view(request, root='/'):
</code></pre>

<p>Второй метод выглядит предпочтительнее, т.к. маловероятно, что пингующий 
сайт вдруг, внезапно, возьмет откуда-то требуемый CSRF-токен, а следовательно CSRF 
защита для данного участка кода бессмысленна.</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/08/reshenie-problemy-oshibka-403-v-pingdjack/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/24.png"/></a></p>]]></description><title>Решение проблемы «Ошибка 403» в Pingdjack</title><link>http://unrar.me/2011/08/reshenie-problemy-oshibka-403-v-pingdjack/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Wed, 31 Aug 2011 10:10:39 -0500</pubDate><guid>http://unrar.me/2011/08/reshenie-problemy-oshibka-403-v-pingdjack/</guid><category>[Cat] Программирование</category><category>[Tag] python</category></item><item><description><![CDATA[

<p>Когда я переписывал движок блога на django, мне захотелось получить список 
популярных постов за последний месяц. Причем список должен был 
строиться не по каким-то там эфемерным «плюсикам» к посту, а по количеству
просмотров. На помощь пришел Google Analytics с его мощным API и обертка 
gdata для Python.</p>
<p>Итоговый код выглядит примерно так:</p>

<pre><code class="python">from django.core.urlresolvers import resolve, Resolver404
from datetime import date, timedelta
from blog.models import Entry # модель отвечающая за записи в блоге. Содержит поле popularity для хранения количества просмотров.
import gdata.analytics.service
import blog.views

client = gdata.analytics.service.AnalyticsDataService()
client.ClientLogin(&quot;user@gmail.com&quot;, &quot;password&quot;)
# далее мы строим таблицу просмотров страниц по пути до данной страницы
data = client.GetData(&quot;ga:profileId&quot;, dimensions=&quot;ga:pagePath&quot;, metrics=&quot;ga:pageviews&quot;, start_date=(date.today() - timedelta(30)), end_date = date.today(), sort=&quot;-ga:pageviews&quot;)

for de in data.entry:
    try:
        view, args, kwargs = resolve(str(de.pagePath))
        if view == blog.views.entry:
            try:
                e = Entry.objects.get(slug = kwargs[&quot;slug&quot;])
                e.popularity = int(str(de.pageviews))
                e.save()
            except Entry.DoesNotExist:
                pass
    except Resolver404:
        pass
</code></pre>

<p>Если в не знаете своего ga:profileId, то можете получить его, выполнив следующий код:</p>

<pre><code class="python">import gdata.analytics.service
client = gdata.analytics.service.AccountsService()
client.ClientLogin('user@gmail.com', 'mypassword')
accounts = client.GetAccountList()
for account in accounts.entry:
    print '%s profileId: %s' % (account.title.text, account.profileId)
</code></pre>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/08/google-analytics-gdata-django-ranzhiruem-posty-po-populyarnosti/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/23.png"/></a></p>]]></description><title>Google Analytics + gdata + Django = ранжируем посты по популярности</title><link>http://unrar.me/2011/08/google-analytics-gdata-django-ranzhiruem-posty-po-populyarnosti/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Tue, 30 Aug 2011 08:48:30 -0500</pubDate><guid>http://unrar.me/2011/08/google-analytics-gdata-django-ranzhiruem-posty-po-populyarnosti/</guid><category>[Cat] Программирование</category><category>[Tag] python</category><category>[Tag] django</category><category>[Tag] gdata</category></item><item><description><![CDATA[

<p>Где-то месяцев восемь назад, поддавшись на агрессивный PR на Хабре, переехал к молодому, никому неизвестному 
хостеру под названием Clodo.ru. Тогда это был действительно прорыв на отечественном рынке VDS — машина 
с виртуализацией на базе XEN всего за 250 рублей! Но, как обычно, недолго музыка играла…</p>

<p><a href="/2011/08/happy-birthday-clodoru/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/08/happy-birthday-clodoru/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/22.png"/></a></p>]]></description><title>Happy birthday, Clodo.ru</title><link>http://unrar.me/2011/08/happy-birthday-clodoru/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Mon, 29 Aug 2011 07:17:38 -0500</pubDate><guid>http://unrar.me/2011/08/happy-birthday-clodoru/</guid><category>[Cat] Сайт</category><category>[Tag] clodo.ru</category><category>[Tag] hetzner.de</category><category>[Tag] linode.com</category><category>[Tag] Amazon</category><category>[Tag] качество хостинга</category><category>[Tag] unixbench</category></item><item><description><![CDATA[

<p>Патч 4.1 принес с собой огромное количество изменений. В добавок к двум новым
героическим подземельям команда разработчиков добавила большое количество
изменений упрощающих и улучшающих жизнь фералов-танков. Но обо всем по
порядку.</p>
<h3 id="">Прерывания</h3>
<blockquote>
<p>Все заклинания прерывания, не влияющие на общее время восстановления
способностей и не наносящие урона, теперь будут всегда попадать по цели.</p>
<p>К ним относятся «Зуботычина», «Пинок», «Заморозка разума», «Укор», «Лобовая
атака», «Антимагия», «Пронизывающий ветер», «Столп солнечного света»,
«Глушащий выстрел» и некоторые способности питомцев.</p>
</blockquote>
<p>Для рейдящего медведя это  означает полное отсутствие необходимости собирать
меткость.</p>

<p><a href="/2011/05/medved-posobie-po-vyzhivaniyu-v-patche-4-1/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/05/medved-posobie-po-vyzhivaniyu-v-patche-4-1/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/1.png"/></a></p>]]></description><title>Медведь: пособие по выживанию в патче 4.1</title><link>http://unrar.me/2011/05/medved-posobie-po-vyzhivaniyu-v-patche-4-1/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Tue, 03 May 2011 10:22:33 -0500</pubDate><guid>http://unrar.me/2011/05/medved-posobie-po-vyzhivaniyu-v-patche-4-1/</guid><category>[Cat] World of Warcraft</category><category>[Tag] патч 4.1</category><category>[Tag] танк</category><category>[Tag] ферал-друид</category></item><item><description><![CDATA[

<p>Набросал некое подобие библиотеки селекторов на AS3 для использования в Adobe
AIR. Фактически это означает возможность разбирать HTML документы с помощью 
запросов к DOM, а не длинными непонятными RegExp.</p>
<p>К примеру, получение всех заголовков Habrahabr выглядит так:</p>

<pre><code class="actionscript">import com.unrarme.utils.Aquery;
private var aq:Aquery;

private function getHeaders(); {
    aq = new Aquery(new URLRequest(&quot;http://habrahabr.ru/&quot;));  
    aq.addEventListener(Event.COMPLETE, onHTMLLoadComplete);   
}

private function onHTMLLoadComplete(e:Event):void {
    var headers:Array = aq.select(&quot;h2 a.topic&quot;);  
    for each (var header:Object in headers) { trace(header.innerText); }  
}
</code></pre>

<p>Достаточно просто, как мне кажется.</p>
<p>Библиотека дописывается «по ходу», так что не стесняйтесь писать в Issues Tracker.</p>
<p><a href="https://github.com/rragimoff/AS3-Unrar.me-Library" rel="nofollow">Исходники на GitHub</a> (я в курсе качества кода, но предпочитаю не париться до момента, когда низкая производительность станет критичной)</p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/05/actionscript3-selector-library-dlya-adobe-air/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/2.png"/></a></p>]]></description><title>ActionScript3 Selector Library для Adobe AIR</title><link>http://unrar.me/2011/05/actionscript3-selector-library-dlya-adobe-air/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Mon, 02 May 2011 00:59:35 -0500</pubDate><guid>http://unrar.me/2011/05/actionscript3-selector-library-dlya-adobe-air/</guid><category>[Cat] ActionScript</category><category>[Cat] Программирование</category><category>[Tag] selector library</category><category>[Tag] unrar.me as3 library</category></item><item><description><![CDATA[

<p>В данной серии мы будем использовать платформу Appcelerator Titanium Mobile
для создания приложений под Android.</p>
<p>В этой статье мы напишем простейшее soundboard-приложение, на примере которого
познакомимся с основными возможностями платформы Titanium по воспроизведению
аудио.</p>
<p>Кроме этого, мы настроим недавно представленную широкой публике Titanium
Studio, которая со временем заменит достаточно убогий по функционалу Titanium
Developer.</p>
<p><a href="http://dl.dropbox.com/u/485932/blog/Soundboard.zip" rel="nofollow">Исходные коды и .apk файл</a></p>

<p><a href="/2011/04/razrabotka-dlya-android-s-titanium-mobile-prostoe-soundboard-prilozhenie/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/04/razrabotka-dlya-android-s-titanium-mobile-prostoe-soundboard-prilozhenie/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/3.png"/></a></p>]]></description><title>Разработка для Android с Titanium Mobile: простое soundboard-приложение</title><link>http://unrar.me/2011/04/razrabotka-dlya-android-s-titanium-mobile-prostoe-soundboard-prilozhenie/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Thu, 14 Apr 2011 12:47:19 -0500</pubDate><guid>http://unrar.me/2011/04/razrabotka-dlya-android-s-titanium-mobile-prostoe-soundboard-prilozhenie/</guid><category>[Cat] Appcelerator Titanium</category><category>[Cat] Программирование</category><category>[Tag] titanium mobile</category><category>[Tag] titanium studio</category><category>[Tag] руководство</category></item><item><description><![CDATA[

<p>В данной серии мы будем использовать платформу Appcelerator Titanium Mobile
для создания приложений под Android. В этой статье мы напишем и упакуем первое
приложение.</p>
<p><a href="http://dl.dropbox.com/u/485932/blog/HabraReader.zip" rel="nofollow">Исходные коды и .apk файл</a></p>

<p><a href="/2011/04/razrabotka-dlya-android-s-titanium-mobile-pervoe-prilozhenie/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/04/razrabotka-dlya-android-s-titanium-mobile-pervoe-prilozhenie/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/4.png"/></a></p>]]></description><title>Разработка для Android с Titanium Mobile: первое приложение</title><link>http://unrar.me/2011/04/razrabotka-dlya-android-s-titanium-mobile-pervoe-prilozhenie/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Mon, 04 Apr 2011 12:13:41 -0500</pubDate><guid>http://unrar.me/2011/04/razrabotka-dlya-android-s-titanium-mobile-pervoe-prilozhenie/</guid><category>[Cat] Appcelerator Titanium</category><category>[Cat] Программирование</category><category>[Tag] titanium mobile</category><category>[Tag] руководство</category></item><item><description><![CDATA[

<p>В данной серии мы будем использовать платформу Appcelerator Titanium Mobile
для создания приложений под Android. В данной статье мы рассмотрим процесс
установки и настройки Android SDK и Titanium Mobile в среде Windows 7.</p>

<p><a href="/2011/04/razrabotka-pod-android-s-titanium-mobile-ustanovka/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/04/razrabotka-pod-android-s-titanium-mobile-ustanovka/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/5.png"/></a></p>]]></description><title>Разработка для Android с Titanium Mobile: установка</title><link>http://unrar.me/2011/04/razrabotka-pod-android-s-titanium-mobile-ustanovka/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Fri, 01 Apr 2011 21:42:20 -0500</pubDate><guid>http://unrar.me/2011/04/razrabotka-pod-android-s-titanium-mobile-ustanovka/</guid><category>[Cat] Appcelerator Titanium</category><category>[Cat] Программирование</category><category>[Tag] titanium mobile</category><category>[Tag] руководство</category></item><item><description><![CDATA[

<p>Значительную часть времени фрилансера вроде меня, т.е. предпочитающего
короткие заказы, занимает поиск и отсев проектов на различных биржах. Чтобы
как-то оптимизировать данный процесс разработана куча программ различной
степени полезности. Среди них есть и некие выдающиеся разработки инженерской
мысли вроде RSS-ридера с искусственным интеллектом, который после дрессировки
способен угадывать какие проекты вам подойдут, а какие нет, и простенькие
программки, которые фильтруют сообщения по ключевым словам, встречающимся в
них. Но, ни одна из этих программ не способна исправить изначально «кривые»
моменты в работе той или иной биржи. В этой записи я расскажу о создании
своего костыля, призванного улучшить достаточно убогий функционал одной из
бирж на которых я ищу работу.</p>

<p><a href="/2011/03/vworkerss-personalizirovannye-rss-fidy-s-vworker-com/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/03/vworkerss-personalizirovannye-rss-fidy-s-vworker-com/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/6.png"/></a></p>]]></description><title>vWorkeRSS — персонализированные RSS фиды с vWorker.com</title><link>http://unrar.me/2011/03/vworkerss-personalizirovannye-rss-fidy-s-vworker-com/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Mon, 28 Mar 2011 12:40:42 -0500</pubDate><guid>http://unrar.me/2011/03/vworkerss-personalizirovannye-rss-fidy-s-vworker-com/</guid><category>[Cat] node.js</category><category>[Cat] Фриланс</category><category>[Cat] Программирование</category><category>[Tag] vWorker</category><category>[Tag] проекты</category><category>[Tag] node-htmlparser</category><category>[Tag] node-soupselect</category></item><item><description><![CDATA[

<p>Совершенно случайно стал коммиттером в данном проекте.</p>
<p>Для тех, кто не в курсе, <a href="http://code.google.com/p/vkopenmp/" rel="nofollow">VOMP</a> это AIR приложение позволяющее искать и
просматривать видео с VKontakte не в браузере, а в обычном «плейером»
формате.</p>
<p>Выглядит это примерно вот так.</p>
<p><img alt="Основной экран проигрывателя VOMP" src="/static/media/uploads/osnovnoj-ekran-proigryvatelya-vomp.jpg" title="Основной экран проигрывателя VOMP" /></p>

<p><a href="/2011/02/vnezapno-vomp/#more" class="more-link">Читать далее &raquo;</a></p>

<p style="border: 1px solid #ccc; margin: 10px 0pt 0pt; padding: 5px; background: #eee" align="center"><a href="http://unrar.me/2011/02/vnezapno-vomp/"><img align="absmiddle" border="0" src="http://unrar.me/static/images/comments/7.png"/></a></p>]]></description><title>Внезапно VOMP</title><link>http://unrar.me/2011/02/vnezapno-vomp/</link><author>roma.ragimoff@gmail.com (Roman Ragimoff)</author><pubDate>Thu, 03 Feb 2011 00:40:09 -0600</pubDate><guid>http://unrar.me/2011/02/vnezapno-vomp/</guid><category>[Cat] ActionScript</category><category>[Cat] Программирование</category><category>[Tag] opensource</category><category>[Tag] vomp</category></item></channel></rss>
