<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0"><channel><title>snippy.ru</title><link>http://snippy.ru/snippet/</link><description>
			Интересные решения для программистов | Примеры кода</description><image><url>http://snippy.ru/_i/blog/logo_ru.gif</url><title/><link>http://snippy.ru/snippet/</link></image><item><title>Профилируем Android-приложение</title><link>
        http://snippy.ru/snippet/1878-Profiliruem_Android-prilogenie/</link><description/><pubDate>Wed, 18 Jan 2012 11:36:45 +0300</pubDate></item><item><title>Сколько осталось дней до дня рождения (определенного дня в году)</title><link>
        http://snippy.ru/snippet/1877-Skolko_ostalos_dney_do_dnya_rogdeniya_(opredelennogo_dnya_v_godu)/</link><description>Алгоритм вычисления дней до дня рождения следующий:&lt;br /&gt;&#13;
&lt;ol&gt;&#13;
&lt;li&gt;Сравниваем текущий номер дня в году с номером дня в году для дня рождения&lt;/li&gt;&#13;
&lt;li&gt;Если день рождения еще в этом году не наступил - то кол-во дней считаем как разницу между текущим номером дня в году и днем рождения&lt;/li&gt;&#13;
&lt;li&gt;Если день рождения уже прошел, то прибавляем к разнице еще кол-во дней в текущем году&lt;/li&gt;&#13;
&lt;/ol&gt;</description><pubDate>Tue, 17 Jan 2012 13:35:45 +0300</pubDate></item><item><title>Как проверить существование файла</title><link>
        http://snippy.ru/snippet/1876-Kak_proverit_sushestvovanie_fayla/</link><description>&lt;code name="bash"&gt;if [ -f file_name ]; then&#13;
  echo "File exist"&#13;
else&#13;
 echo "File not found"&#13;
fi&lt;/code&gt;</description><pubDate>Tue, 13 Dec 2011 10:02:52 +0300</pubDate></item><item><title>STRAIGHT_JOIN, NATURAL и FULL JOIN</title><link>
        http://snippy.ru/snippet/1875-STRAIGHT_JOIN,_NATURAL_i_FULL_JOIN/</link><description>Решил изучить джойны кроме обычных JOIN, LEFT JOIN и RIGHT JOIN.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
MySQL еще предлагает два - NATURAL и STRAIGHT_JOIN (хотя второй представляет собой инструкцию оптимизатору, а не другую логику объединения таблиц).&lt;br /&gt;&#13;
Про них хорошо написано &lt;a href="http://www.ifima.ru/programming/mysql/join-in-mysql/"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Еще есть FULL OUTER JOIN, который MySQL'ом не поддерживается, кратко про него на &lt;a href="http://ru.wikipedia.org/wiki/Join_%28SQL%29"&gt;википедии&lt;/a&gt;.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Ну а &lt;a href="http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html"&gt;здесь&lt;/a&gt; можно посмотреть визуальное представление работы джойнов, кроме NATURAL.</description><pubDate>Sun, 19 Jun 2011 19:49:09 +0400</pubDate></item><item><title>Объединение нескольких mp3-файлов в один</title><link>
        http://snippy.ru/snippet/1874-Obedinenie_neskolkih_mp3-faylov_v_odin/</link><description>Проблема актуальна для Windows-платформы.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Потребовалось возможность программно объединять несколько mp3-файлов в один - реализации на питоне, к сожалению не нашел.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Меня даже устроило бы выполнение данной задачи через стороннее консольное приложение, но на мое удивление подобных нормально работающих приложений под Windows не нашлось - возможно причина в том, что эти приложения изначально разработаны под *nix и под Windows не всегда работали корректно (исходные файлы могли оказаться битыми, у некоторых бились теги и неправильно определялась длина звучания, некоторые корректно обрабатывали mp3 с постоянным битрейтом и некорректно с переменным).&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Мною были опробованы следующие приложения: &lt;b&gt;mp3wrap&lt;/b&gt;, &lt;b&gt;mp3DirectCut&lt;/b&gt;, &lt;b&gt;mpgtx&lt;/b&gt;.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Решение пришло в виде библиотеки &lt;a href="http://naudio.codeplex.com/" target="_blank"&gt;NAudio&lt;/a&gt; для &lt;b&gt;.Net&lt;/b&gt;, которую можно легко использовать под Python, правда не под обычный, а под &lt;a href="http://ironpython.codeplex.com/" target="_blank"&gt;IronPython&lt;/a&gt;.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Код можно посмотреть &lt;a href="http://mark-dot-net.blogspot.com/2010/11/merging-mp3-files-with-naudio-in-c-and.html" target="_blank"&gt;здесь&lt;/a&gt;.</description><pubDate>Sat, 28 May 2011 22:28:46 +0400</pubDate></item><item><title>Облегачаем отладку обработчиков форм с XDebug с помощью букмарклета</title><link>
        http://snippy.ru/snippet/1873-Oblegachaem_otladku_obrabotchikov_form_s_XDebug_s_pomoshyu_bukmarkleta/</link><description>&lt;b&gt;XDebug&lt;/b&gt; удобно использовать в режиме &lt;i&gt;profiler_enable_trigger=On&lt;/i&gt;, то есть когда профилирование не ведется постоянно, а включается только в том случае, если в запросе передан параметр &lt;b&gt;XDEBUG_PROFILE&lt;/b&gt;.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Обычно достаточно добавить этот параметр в адресную строку, а при отладке форм, приходится править уже код формы - добавляя параметр &lt;b&gt;XDEBUG_PROFILE&lt;/b&gt; в action формы или в качестве элемента формы.&#13;
Это неудобно и отнимает время, поэтому предлагаю вам воспользоваться простеньким &lt;b&gt;букмарклетом&lt;/b&gt;, который добавит к всем формам на странице параметр &lt;b&gt;XDEBUG_PROFILE&lt;/b&gt;.</description><pubDate>Wed, 30 Mar 2011 18:45:41 +0400</pubDate></item><item><title>DjangoBook на русском в формате ePub</title><link>
        http://snippy.ru/snippet/1872-DjangoBook_na_russkom_v_formate_ePub/</link><description>Начал изучать &lt;b&gt;фреймворк Django&lt;/b&gt;, и конечно изучение начал с поиска подходящей книги - в итоге был найден &lt;a href="http://djangobook.com/" target="_blank"&gt;DjangoBook&lt;/a&gt;, затем &lt;a href="http://djbook.ru/" target="_blank"&gt;перeвод DjangoBook на русский&lt;/a&gt;, затем из-за того что неудобно читать с монитора нашел тот же перевод &lt;a href="http://blog.apanasenko.me/2011/01/djangobook-ru-pdf/" target="_blank"&gt;скомпилированный в формат PDF&lt;/a&gt; из формата &lt;b&gt;DocBook&lt;/b&gt;.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Не знаю по какой причине, данный PDF ну очень долго рендерится на электронной читалке (Sony PRS-600)- перелистывание страницы достигало 5 минут!&lt;br /&gt;&#13;
В формате &lt;b&gt;ePub&lt;/b&gt; данную книгу я не нашел, но на сайте где я скачал PDF лежала хорошая инструкция по компилированию данной книги кроме PDF еще и в &lt;b&gt;ePub&lt;/b&gt;, что я собственно и сделал. (Если захотите скомпилировать сами, учтите, что в инструкции не сказано что необходимо выгрузить из репозитория саму книгу и в самой книге необходимо будет поправить chap08.xml - он содержит ошибки XML-разметки)&lt;br /&gt;&#13;
Кроме этого я встроил в книгу шрифт понимающий кириллицу, без него на некоторых читалках (в частности на моей PRS-600) вместо русских символов отображаются знаки вопроса.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Если вы не пользуетесь линуксом или просто хотите сэкономить время - &lt;a href="http://snippy.ru/_files/djbook.epub"&gt;Скачать DjangoBook на русском в формате ePub&lt;/a&gt;.</description><pubDate>Sat, 26 Mar 2011 12:31:58 +0300</pubDate></item><item><title>Если сайт не индексируется Яндекс.Сервером</title><link>
        http://snippy.ru/snippet/1871-Esli_sayt_ne_indeksiruetsya_YAndeks.Serverom/</link><description>Первым делом смотрим лог индексирования, если лог заканчивается фразой &lt;b&gt;unsorted clattr portion&lt;/b&gt;, то эта заметка Вам поможет.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
По-умолчанию индексатор &lt;b&gt;Яндекс.Сервера&lt;/b&gt; пишет индексы во временную директорию, называется она &lt;i&gt;newindex&lt;/i&gt;, а после окончания индексации переносит индекс из временной директории в директорию индекса конкретного сайта. Если прошлая индексация к примеру завершилась аварийно - файлы индекса во временной директории остались, именно это и имеет в виду ошибка &lt;b&gt;unsorted clattr portion&lt;/b&gt; - удаляем все файлы из директории &lt;i&gt;newindex&lt;/i&gt; и запускаем индексацию заново.</description><pubDate>Fri, 18 Mar 2011 17:45:18 +0300</pubDate></item><item><title>Синхронизация точного времени</title><link>
        http://snippy.ru/snippet/1870-Sinhronizaciya_tochnogo_vremeni/</link><description>В силу ряда причин время на компьютере может сбиваться.&lt;br /&gt;&#13;
Чтобы установить точное время можно синхронизироваться с одним из &lt;a href="http://ru.wikipedia.org/wiki/NTP" target="_blank"&gt;NTP&lt;/a&gt;-серверов - вот &lt;a href="http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers" target="_blank"&gt;список&lt;/a&gt;.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
В Linux для этих целей можно использовать специальный пакет &lt;b&gt;ntp&lt;/b&gt;.</description><pubDate>Mon, 14 Mar 2011 13:28:22 +0300</pubDate></item><item><title>Авторизация на удаленном сайте с помощью Mechanize</title><link>
        http://snippy.ru/snippet/1869-Аvtorizaciya_na_udalennom_sayte_s_pomoshyu_Mechanize/</link><description>Одно из частых применений &lt;b&gt;Mechanize&lt;/b&gt; - работа с формами.&lt;br /&gt;&#13;
В этом примере мы найдем на странице форму авторизации, заполним ее данными и отправим на сервер. При этом не забудем сохранить кукисы и воспользоваться сохраненными кукисами при следующем запуске скрипта.</description><pubDate>Fri, 11 Mar 2011 00:39:50 +0300</pubDate></item><item><title>Извлекаем информацию из torrent-файлов</title><link>
        http://snippy.ru/snippet/1868-Izvlekaem_informaciyu_iz_torrent-faylov/</link><description>Простой парсер для файлов в формате &lt;a href="http://ru.wikipedia.org/wiki/Bencode" target="_blank"&gt;Bencode&lt;/a&gt;, который используется для кодирования .torrent файлов.&lt;br /&gt;&#13;
В примере буде показано как извлечь список файлов и их размер из &lt;b&gt;.torrent&lt;/b&gt; файла.</description><pubDate>Thu, 10 Mar 2011 14:33:26 +0300</pubDate></item><item><title>Библиотеки для автоматизации сбора данных на сайте и имитации действий пользователя</title><link>
        http://snippy.ru/snippet/1866-Biblioteki_dlya_avtomatizacii_sbora_dannyh_na_sayte_i_imitacii_deystviy_polzovatelya/</link><description>Данный класс библиотек облегчит Вам жизнь, если Вам будет необходимо произвести некоторые действия на удаленном сайте, такие как:&#13;
&lt;ol&gt;&#13;
&lt;li&gt;&lt;b&gt;просмотр страниц&lt;/b&gt;&lt;/li&gt;&#13;
&lt;li&gt;&lt;b&gt;извлечение данных со страниц&lt;/b&gt;&lt;/li&gt;&#13;
&lt;li&gt;&lt;b&gt;заполнение и отправка форм&lt;/b&gt;&lt;/li&gt;&#13;
&lt;/ol&gt;&#13;
&lt;br /&gt;&#13;
При этом Вам не надо будет заботиться о отсылке соответствующих заголовков, механизма работы с кукисами, редиректами и пр.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Помочь в этом Вам смогут библиотеки:&lt;br /&gt;&#13;
&lt;ol&gt;&#13;
&lt;li&gt;&lt;a href="http://wwwsearch.sourceforge.net/mechanize/"&gt;Mechanize&lt;/a&gt; - практически эмулятор браузера (без поддержки JavaScript, к сожалению) - &lt;a href="http://www.ibm.com/developerworks/ru/library/l-python-mechanize-beautiful-soup/index.html"&gt;Статья на русском&lt;/a&gt;&lt;/li&gt;&#13;
&lt;li&gt;&lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;Beautiful Soup&lt;/a&gt; - XML/HTML парсер - &lt;a href="http://wiki.python.su/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8/BeautifulSoup"&gt;Перевод документации&lt;/a&gt;&lt;/li&gt;&#13;
&lt;li&gt;&lt;a href="http://wwwsearch.sourceforge.net/old/ClientForm/"&gt;ClientForm&lt;/a&gt; - библиотека заточена для работы с формами&lt;/li&gt;&#13;
&lt;/ol&gt;</description><pubDate>Mon, 28 Feb 2011 22:12:34 +0300</pubDate></item><item><title>Пример работы с библиотекой RarFile</title><link>
        http://snippy.ru/snippet/1865-Primer_raboty_s_bibliotekoy_RarFile/</link><description>&lt;b&gt;Python&lt;/b&gt; не имеет стандартной библиотеки для работы с &lt;b&gt;Rar-архивами&lt;/b&gt;, но имеется сторонняя библиотека для этих целей - &lt;a href="http://pypi.python.org/pypi/rarfile/2.2"&gt;RarFile&lt;/a&gt;&lt;br /&gt;&#13;
В простом примере, я покажу, как работать с данной библиотекой.&lt;br /&gt;&#13;
Мы откроем архив, найдем первую директорию в корне архива и извлечем ее.</description><pubDate>Wed, 23 Feb 2011 20:54:01 +0300</pubDate></item><item><title>Простой способ определить заход на страницу через мобильный браузер</title><link>
        http://snippy.ru/snippet/1864-Prostoy_sposob_opredelit_zahod_na_stranicu_cherez_mobilnyy_brauzer/</link><description>Одна из проблем, с которой сталкивается разработчик при создании мобильной версии сайта - это правильно определить зашел ли пользователь на страницу с помощью мобильного устройства. Правильный способ это сделать - использовать специальную базу данных определения устройств, одна из самых известных - это &lt;b&gt;DeviceAtlas&lt;/b&gt;.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Способ попроще, конечно же, основан на анализе строки &lt;b&gt;User-Agent&lt;/b&gt;.&lt;br /&gt;&#13;
Ниже приведенный код как раз использует этот метод, плюс еще несколько других нюансов и способен с большой долей вероятности определить является ли браузер мобильным.</description><pubDate>Fri, 18 Feb 2011 18:18:13 +0300</pubDate></item><item><title>Партиционирование (partitioning) — механизм разбиения больших таблиц на логические части</title><link>
        http://snippy.ru/snippet/1863-Particionirovanie_(partitioning)_—_mehanizm_razbieniya_bolshih_tablic_na_logicheskie_chasti/</link><description>Партицирование - простой в использовании (по крайней мере, относительно MySQL) механизм разбиения больших таблиц на части, позволяющий увеличить скорость выборки данных из этих таблиц.&lt;br /&gt;&#13;
При создании таблицы указываются партиции и условия для данных, по которым определяется в какую партицию попадут данные.&lt;br /&gt;&#13;
Использование партиций никак не отражается на синтаксисе запросов - они остаются неизменными.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
На хабре есть небольшая &lt;a href="http://m.habrahabr.ru/post/66151/"&gt;статья&lt;/a&gt;, в которой хорошо расписано как использовать в своей работе партицирование.</description><pubDate>Thu, 17 Feb 2011 22:04:33 +0300</pubDate></item><item><title>Как динамически инстанцировать класс по его имени</title><link>
        http://snippy.ru/snippet/1862-Kak_dinamicheski_instancirovat_klass_po_ego_imeni/</link><description>В примере мы импортируем файл с классом в основную программу по его имени, динамически инстанцируем класс, и у полученного объекта класса динамически вызовем метод</description><pubDate>Wed, 09 Feb 2011 14:44:16 +0300</pubDate></item><item><title>Как конвертировать PDF в Jpeg в Linux</title><link>
        http://snippy.ru/snippet/1861-Kak_konvertirovat_PDF_v_Jpeg_v_Linux/</link><description>Используй ImageMagick</description><pubDate>Mon, 29 Nov 2010 19:57:05 +0300</pubDate></item><item><title>Получение и сохранение cookie</title><link>
        http://snippy.ru/snippet/1860-Poluchenie_i_sohranenie_cookie/</link><description>В примере показан способ получения и сохранения кукисов в файл с использование библиотеки &lt;b&gt;cookielib&lt;/b&gt;</description><pubDate>Tue, 19 Oct 2010 19:08:36 +0400</pubDate></item><item><title>Копирование(клонирование) объектов и массивов</title><link>
        http://snippy.ru/snippet/1859-Kopirovanie(klonirovanie)_obektov_i_massivov/</link><description>В JavaScript'е при присваивании переменной массива или объекта происходит создание ссылки на объект(массив).&lt;br /&gt;&#13;
Ниже приведены два примера, используя которые можно создать копию объекта массива.</description><pubDate>Mon, 30 Nov 2009 22:19:44 +0300</pubDate></item><item><title>MJPEG в Internet Explorer</title><link>
        http://snippy.ru/snippet/1858-MJPEG_v_Internet_Explorer/</link><description>Неудивительно, что Internet Explorer не поддерживает отображение потокового видео в формате MJPEG, в то время как остальные браузеры его давно поддерживают.&lt;br /&gt;&#13;
Но исправить этот недостаток можно, используя специальный ActiveX от компании Axis Communications &lt;a href="http://www.ertyu.org/steven_nikkel/images/AMC.cab"&gt;amc.cab&lt;/a&gt;.</description><pubDate>Mon, 30 Nov 2009 17:00:41 +0300</pubDate></item><item><title>Доработка стандартного механизма обработки ошибок в CodeIgniter</title><link>
        http://snippy.ru/snippet/1857-Dorabotka_standartnogo_mehanizma_obrabotki_oshibok_v_CodeIgniter/</link><description>&lt;p&gt;CodeIgniter предоставляет неплохие возможности по обработке ошибок, но мне они показались недостаточными по следующим причинам:&#13;
	&lt;ul&gt;&#13;
		&lt;li&gt;отсутствует возможность обработки исключений&lt;/li&gt;&#13;
		&lt;li&gt;отсутствует возможность уведомлять администратора сайта о возникающих ошибках через почту&lt;/li&gt;&#13;
		&lt;li&gt;довольно скудная информацию о возникающих ошибках (в фреймворке с которым я работал раньше текст ошибки дополняется дампом глобальных переменных, что очень сильно облегчает процесс отладки, хотелось бы подобную схему увидеть и в CodeIgniter)&lt;/li&gt;&#13;
	&lt;/ul&gt;&#13;
&lt;br /&gt;&#13;
Будем это исправлять =)&#13;
&lt;/p&gt;</description><pubDate>Wed, 04 Nov 2009 14:04:15 +0300</pubDate></item><item><title>Как очистить историю в bash</title><link>
        http://snippy.ru/snippet/1856-Kak_ochistit_istoriyu_v_bash/</link><description/><pubDate>Tue, 13 Oct 2009 19:21:11 +0400</pubDate></item><item><title>Два способа проверить что строка содержит данные в формате JSON</title><link>
        http://snippy.ru/snippet/1855-Dva_sposoba_proverit_chto_stroka_sodergit_dannye_v_formate_JSON/</link><description>Первый способ основывается на регулярных выражениях и взят из библиотеки Prototype.&lt;br /&gt; &#13;
Второй способ основан на том, что при попытке получить объект из его текстового представления будет возникать ошибка, если формат представления некорректен.</description><pubDate>Thu, 03 Sep 2009 11:07:40 +0400</pubDate></item><item><title>Длина текста в FCKEditor</title><link>
        http://snippy.ru/snippet/1854-Dlina_teksta_v_FCKEditor/</link><description>Как узнать длину текста в FCKEditor ?&#13;
&lt;br /&gt;&#13;
Используйте следующий небольшой код:</description><pubDate>Thu, 06 Aug 2009 11:27:30 +0400</pubDate></item><item><title>Использование PHP-функций в XSLT-преобразованиях</title><link>
        http://snippy.ru/snippet/1852-Ispolzovanie_PHP-funkciy_v_XSLT-preobrazovaniyah/</link><description>Естественно только для трансформации в PHP :)</description><pubDate>Tue, 04 Aug 2009 11:41:20 +0400</pubDate></item><item><title>Как получить родительскую форму элемента</title><link>
        http://snippy.ru/snippet/1851-Kak_poluchit_roditelskuyu_formu_elementa/</link><description/><pubDate>Mon, 27 Jul 2009 23:56:08 +0400</pubDate></item><item><title>Кроссбраузерное добавление обработчика события к элементу</title><link>
        http://snippy.ru/snippet/1850-Krossbrauzernoe_dobavlenie_obrabotchika_sobytiya_k_elementu/</link><description/><pubDate>Mon, 27 Jul 2009 23:51:20 +0400</pubDate></item><item><title>Сортировка фото по дате EXIF</title><link>
        http://snippy.ru/snippet/1849-Sortirovka_foto_po_date_EXIF/</link><description>C помощью данного скрипта можно быстро рассортировать фотографии по датам.&lt;br /&gt;&#13;
Дата создания фотографии берется из EXIF.&lt;br /&gt;&#13;
Директории фотоархива будут иметь следующий формат: &lt;i&gt;photos/2009/20090628&lt;/i&gt;.</description><pubDate>Fri, 24 Jul 2009 12:05:52 +0400</pubDate></item><item><title>Несколько проверить является ли строка правильным URL-адресом</title><link>
        http://snippy.ru/snippet/1846-YAvlyaetsya_li_stroka_pravilnym_URL-adresom/</link><description>Две проверки осуществляется посредством регулярных выражений, еще одна посредством функции filter_var.</description><pubDate>Wed, 22 Jul 2009 14:46:47 +0400</pubDate></item><item><title>Как пережать видео из 3gp в AVI</title><link>
        http://snippy.ru/snippet/1845-Kak_peregat_video_iz_3gp_v_AVI/</link><description>Многие мобильные телефоны позволяют снимать видео на встроенную камеру и сохранять его в формате 3gp.&lt;br /&gt;&#13;
Для работы с видео и звуком под Linux есть как минимум 2 классных инструмента, mencoder и ffmpeg.&lt;br /&gt;&#13;
Ниже представлены три способа конвертирования.</description><pubDate>Fri, 19 Jun 2009 16:23:19 +0400</pubDate></item></channel></rss>

