<?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>Копирование(клонирование) объектов и массивов</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><item><title>Как привести переводы строк к одному виду</title><link>
        http://snippy.ru/snippet/1843-Kak_privesti_perevody_strok_k_odnomu_vidu/</link><description>В основном распространены два вида переноса строк в тексте: вида "\r\n" в среде Windows и просто "\n" в среде Unix.&lt;br /&gt;
Зачастую в тексте встречаются переводы обоих видов - это неправильно.
Следующая функция поможет привести переводы строк в тексте в единый формат.</description><pubDate>Mon, 01 Jun 2009 11:18:10 +0400</pubDate></item><item><title>Форматирование даты из формата Mysql в пользовательский</title><link>
        http://snippy.ru/snippet/1842-Formatirovanie_daty_iz_formata_Mysql_v_polzovatelskiy/</link><description>Формат хранения дата и даты с временем в базе данных MySQL отличается от того, каким мы привыкли его видеть.&lt;br /&gt;&#13;
C помощью следующей функции вы сможете отформатировать дату в привычный вид.</description><pubDate>Tue, 26 May 2009 11:43:13 +0400</pubDate></item><item><title>Защита почтового адреса</title><link>
        http://snippy.ru/snippet/1841-Zashita_pochtovogo_adresa/</link><description>Создает стандартную почтовую HTML–ссылку.&#13;
Почтовый адрес выводится в обфусцированном виде с использованием порядковых номеров символов, которые генерируются при помощи JavaScript. Таким образом адрес скрывается от спам–ботов.</description><pubDate>Mon, 25 May 2009 14:42:24 +0400</pubDate></item><item><title>CSV/TSV-формат и PHP</title><link>
        http://snippy.ru/snippet/1840-CSV/TSV-format_i_PHP/</link><description>Я люблю Excel - править огромные таблицы, быстро анализировать данные в нём одно удовольствие. Для того, чтобы обработанные данные передать в приложения на CakePHP, я просто копирую всё в буфер и вставляю в textarea. Чтобы разбирать информацию оттуда, я использую следующий код:</description><pubDate>Fri, 22 May 2009 18:33:50 +0400</pubDate></item><item><title>Преобразовать в верхний регистр первый символ строки</title><link>
        http://snippy.ru/snippet/1839-Preobrazovat_v_verhniy_registr_pervyy_simvol_stroki/</link><description>Аналог PHP функции php &lt;a href="http://php.net/ucwords"&gt;ucwords&lt;/a&gt;.</description><pubDate>Wed, 20 May 2009 19:21:41 +0400</pubDate></item><item><title>XSLT-преобразования в браузерах Mozilla и Internet Explerer</title><link>
        http://snippy.ru/snippet/1838-XSLT-preobrazovaniya_v_brauzerah_Mozilla_i_Internet_Explerer/</link><description>При использовании XSLT-преобразованй следует помнить, что в разных брузерах по разному реализуется алгоритм преобразований.&lt;br /&gt;&#13;
В приведенном примере учитываются особенности преобразований в браузерах Mozilla и Internet Explorer.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Напомним, что браузеры Opera и Safari не поддерживают ни метод transformNode(), ни объект XSLTProcessor().&lt;br /&gt;&#13;
Обеспечить поддержку можно, к примеру, перкладыванием процесса преобразования на сторону сервера, а в самом скрипте получать уже результат преобразования.</description><pubDate>Tue, 19 May 2009 22:18:15 +0400</pubDate></item><item><title>Группировка</title><link>
        http://snippy.ru/snippet/1836-Gruppirovka/</link><description>Решение задачи группировки основывается на двух правилах:&#13;
&lt;ul&gt;&#13;
&lt;li&gt;Мы можем выбрать множество узлов по их свойствам с помощью ключей&lt;/li&gt;&#13;
&lt;li&gt;Мы можем установить, является ли узел первым узлом множества в порядке просмотра докумена, при помощи функции &lt;i&gt;generate-id&lt;/i&gt;&lt;/li&gt;&#13;
&lt;ul&gt;</description><pubDate>Sat, 02 May 2009 00:57:37 +0400</pubDate></item><item><title>Является ли элемент первым в множестве</title><link>
        http://snippy.ru/snippet/1835-YAvlyaetsya_li_element_pervym_v_mnogestve/</link><description>Чтобы выполнить данную проверку обратимся к функции generate-id.&lt;br /&gt;&#13;
Функция generate-id  возвращает уникальный идентификатор первого в порядке просмотра документа узла переданного ей множества.&#13;
Значит для того, чтобы проверить, является ли узел первым узлом группы, достаточно сравнить его уникальный идентификатор со значением уникального идентификатора множества узлов этой группы.</description><pubDate>Sat, 02 May 2009 00:44:57 +0400</pubDate></item><item><title>Работа с множествами</title><link>
        http://snippy.ru/snippet/1834-Rabota_s_mnogestvami/</link><description>XSLT не предоставляет стандартных операторов для определения принадлежности одного множества другому, нахождения пересечений, разности множеств и так далее.&#13;
Рассмотрим иной подход к реализации операций над множествами, основанный на очень простом определении принадлежности узла множеству. Узел &lt;i&gt;node&lt;/i&gt;, принадлежит множеству &lt;i&gt;nodeset&lt;/i&gt; тогда и только тогда, когда выполняется равнество:&#13;
&lt;i&gt;count($nodeset) = count($node | $nodeset)&lt;/i&gt;.</description><pubDate>Tue, 28 Apr 2009 18:20:35 +0400</pubDate></item><item><title>Удаляем мусор в HTML-коде после вставки из Word</title><link>
        http://snippy.ru/snippet/1833-Udalyaem_musor_v_HTML-kode_posle_vstavki_iz_Word/</link><description>Данная функция предназначена для очистки html-кода, а конкретно кода, который генерируется при переносе текста из Word'a.&#13;
Удобно использовать в online wysiwyg-редакторах, где этот функционал не реализован (для этой цели и искалась).&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Код взят из плагина CleanHTML для редактора FCKEditor.</description><pubDate>Mon, 27 Apr 2009 21:02:59 +0400</pubDate></item><item><title>Шаблон для склонения после числительных</title><link>
        http://snippy.ru/snippet/1813-shablon-dlja-sklonenija-posle-chislitel-nyh/</link><description>В русском языке существительные с числительными могут быть в единственном, двойственном и множественном числе: один арбуз, два арбуза, пять арбузов (двойственное число - это почти исчезнувшая в русском языке грамматическая конструкция, встречающаяся только в этом случае).&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Следующий шаблон поможет вам просклонять нужное слово в зависимости от числительного.</description><pubDate>Tue, 14 Apr 2009 08:29:35 +0400</pubDate></item><item><title>Как просмотреть стэк вызова функций в JavaScript</title><link>
        http://snippy.ru/snippet/1812-kak-prosmotret-styek-vyzova-funkcii-v-javascript/</link><description>В Firebug - популярном плагине для Firefox, существует фукнция console.trace(), которая позволяет просмотреть стэк фукнций, т.е. просмотреть последовательность вызова функций до определенной точки. Но если вы его не используете, либо, что более вероятно, вам нужно просмотреть стэк вызова функций на других браузерах, не поддерживающих Firebug, то вам возможно пригодится следующая функция, созданная Эриком Венделином (Eric Wendelin).&lt;br /&gt;
Для просмотра стека достаточно вызвать функцию printStackTrace().</description><pubDate>Tue, 07 Apr 2009 21:58:45 +0400</pubDate></item><item><title>Асинхронная отправка файлов на сервер</title><link>
        http://snippy.ru/snippet/1811-asinhronnaja-otpravka-failov-na-server/</link><description>Пример загрузки файлов на сервер без перезагрузки страницы.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Функция submit() является основной в объекте AIM. Она создаёт скрытый iframe при помощи функции frame(), добавляет атрибут target для формы и при необходимости выполняет callback onStart при начале отправки формы. В целом, принцип действия скрипта основывается на применении атрибута target, который указывает, где будет отображаться новый документ. Поскольку здесь target указывает на скрытый iframe, то страница не будет перезагружаться при оправке формы, а ответ от сервера будет помещен как его содержимое.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Пример применения объекта AIM:&lt;br /&gt;&#13;
&amp;lt;form action="index.php" method="post" onsubmit="return AIM.submit(this, {'onStart' : null, 'onComplete' : completeCallback})"&amp;gt;&#13;
....&#13;
&amp;lt;/form&amp;gt;&#13;
</description><pubDate>Mon, 06 Apr 2009 21:53:12 +0400</pubDate></item><item><title>Как проверить является ли файл изображением по расширению</title><link>
        http://snippy.ru/snippet/1810-kak-proverit-javljaetsja-li-fail-izobrazheniem-po-rasshireniyu/</link><description>Спасибо комментаторам - код действительно был растянут.&lt;br /&gt;&#13;
Сейчас все исправил.</description><pubDate>Wed, 25 Mar 2009 18:53:57 +0300</pubDate></item><item><title>Букмарклет для упрощения тестирования форм</title><link>
        http://snippy.ru/snippet/1809-bukmarklet-dlja-uproshenija-testirovanija-form/</link><description>По долгу работы частенько приходится тестировать различные формы, частенько код обработки форм не сразу работает корректно - приходится постоянно заполнять одну и ту же форму.&lt;br /&gt;&#13;
Чтобы этого избежать я ставлю у формы свойство target="_blank", в итоге сабмит формы открывается в новом окне, окно с формой остается открытой, а сама форма - заполненной.&lt;br /&gt;&#13;
Для упрощения процесса установки атрибута у формы, написал небольшой букмарклет, который ставит у всех форм на странице атрибут target равным '_blank'.&lt;br /&gt;&#13;
Чтобы его использовать - перетащите эту ссылку - &lt;a class="navi" href="javascript:(function(){count%20=%20document.forms.length;for%20(i%20=%200;%20i%20&lt;%20count;%20i++){document.forms[i].target%20=%20'_blank';}})();"&gt;Forms target blank&lt;/a&gt; в закладки, а чтобы его запустить - просто кликните по закладке.&lt;br /&gt;&#13;
Код букмарклета представлен ниже.&#13;
</description><pubDate>Mon, 23 Mar 2009 22:14:19 +0300</pubDate></item><item><title>Кроссбраузерное получение текста DOM-узла в XML-документе</title><link>
        http://snippy.ru/snippet/1807-krossbrauzernoe-poluchenie-teksta-dom-uzla-v-xml-dokumente/</link><description>Имеем XML-узел:&lt;br /&gt;&#13;
&amp;lt;title&amp;gt;ВЗГЛЯД / &amp;lt;hlword priority="strict"&amp;gt;Путин&amp;lt;/hlword&amp;gt; слетал к кубанским студентам&amp;lt;/title&amp;gt;&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
На выходе надо получить строку ВЗГЛЯД / Путин слетал к кубанским студентам, без тегов, комментариев и т. д. Как это правильно сделать?&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Когда-то давно я узнал функцию выдирания всего текста из DOM-узла (не важно, HTML это или XML). Но она работает медленнее, чем браузерные DOM-свойства text и textContent.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
При этом в XML DOM-свойство text - для Internet Explorer и Opera; textContent - для Firefox и Opera. А вот для Safari ничего нет, он не понимает ни text, ни textContent.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Объединив все возможные подходы, получаем кроссбраузерную функцию:</description><pubDate>Thu, 12 Mar 2009 17:25:49 +0300</pubDate></item><item><title>Валидация адреса OpenID</title><link>
        http://snippy.ru/snippet/1806-proverka-openid-na-sushestvovanie/</link><description>На самом деле проверяется существование OpenID сервера для указанного адреса, то есть даже если проверка прошла успешно - указанного OpenID аккаунта может и не существовать. Но в большинстве случаев хватит и такой проверки.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Необходимо подключить класс Simple PHP OpenID.</description><pubDate>Fri, 27 Feb 2009 14:08:43 +0300</pubDate></item><item><title>Простой способ авторизации с помощью OpenID</title><link>
        http://snippy.ru/snippet/1795-prostoi-sposob-avtorizacii-s-pomosh-yu-openid/</link><description>Понадобилось прикрутить на сайт авторизацию по OpenID.&lt;br /&gt;&#13;
Остановился на библиотеке Simple OpenId, для которой написал метод-обертку, позволяющий сделать авторизацию с помощью этой библиотеки удобно и быстро.&lt;br /&gt;&#13;
Метод разбит на два этапа и работает следующим образом:&lt;br /&gt;&#13;
 - делается вызов самого метода, в качестве параметров необходимо указать OpenID и имя функции, происходит переадресация пользователя на сервер OpenID провайдера, для подтверждения доступа.&lt;br /&gt;&#13;
   Обратите внимание на строку 38 - здесь указывается URL, к которому обратится OpenID сервер после подтверждения доступа - переход на этот адрес снова должен запустить метод OpenIdAuth&lt;br /&gt;&#13;
 - то что метод уже вызван сервером OpenID можно определить по параметрам из get-запроса, а конкретно 'openid_mode'.&lt;br /&gt;&#13;
   После этого анализируется ответ сервера и вызвается callback-функция, имя которой было передано при первом запуске метода.&lt;br /&gt;&#13;
&lt;br /&gt;&#13;
То что OpenID авторизация была пройдена успешно - будет извещать параметр передаваемый в callback-функцию со значением "VALID".&lt;br /&gt;&#13;
Учтите, что если вы используете процедуроное программирование, а не объектное, то вам надо будет переписать строки проверки существования callback-функции и ее вызов - строки 90 и 92 соответственно.</description><pubDate>Mon, 23 Feb 2009 20:36:26 +0300</pubDate></item></channel></rss>
