<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title>Создавая... (бес)полезное :: RSS-Лента</title><link>http://darkslave.net/myrss</link><description></description><generator></generator><item><title>Drumode, что это?</title><link>http://darkslave.net/drumode.html</link><pubDate>Mon, 04 Oct 2010 11:51:57 +0000</pubDate><description><![CDATA[
<p>Идея интернет магазинов давно не нова.. под эти цели используются как специализированные системы, так и модули под популярные CMS.. для <strong>CMS Drupal</strong> таким модулем является <strong>Ubercart</strong>, обладающий широкими возможностями и хорошей расширяемостью..</p>
<p>Но&nbsp; у таких модульных систем есть один недостаток -- довольно продолжительное время наполнения товарами.. конечно же есть модули импорта контента и т.п. но все они, основываясь на функционале самой CMS, довольно медленны и не всегда надежны...</p>
<p>&nbsp;</p>
<p>Исправить эти недостатки мы попытались при создании системы обновления интернет-магазинов, собранных на движке Drupal + Ubercart, названной <a href="http://drumode.ru/opisanie_drumode"><strong>Drumode</strong></a>..</p>
<p>&nbsp;</p>
<p>Система отличается <strong>быстротой</strong>, широкой <strong>функциональностью</strong> и приятным <strong>удобным интерфейсом</strong>, понятным даже обыденному пользователю...</p>
<p>&nbsp;</p>
<p>Система работает в обход самой CMS, сохраняя данные напрямую в базу данных, что снижает нагрузку на сервер и исключает сбои в работе самого сайта..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Система обладает следующими возможностями:</p>
<p>1. <strong>Импорт товаров</strong> из TSV, CSV прайсов, которые легко создать из MS Excel и т.п. редакторов таблиц.. При импорте товары ищутся по Артикулу, если товара нет он создается.. Если указаны категории (каталоги, таксономия) товара -- она автоматически обновляется.. Если указано изображение товара -- оно автоматически добавляеться к товару..</p>
<p>&nbsp;</p>
<p>2. <strong>Экспорт товаров</strong> из базы данных в TSV, CSV формат..</p>
<p>&nbsp;</p>
<p>3. <strong>Редактирование товаров</strong> через веб-интерфейс: загрузка данных через ajax, wysiwyg редактор (tiny mce), загрузка в фоне картинок на сервер..</p>
<p>&nbsp;</p>
<p>4. <strong>Назначение модераторов</strong> контента -- пользователей, которые могут редактировать информацию о товарах... это очень удобно, когда в базе тысячи товаров и справиться одному просто не по силам..</p>
<p>Достаточно указать пользователей Друпала и назначить им задания..</p>
<p>Интерфейс модератора заточен исключительно на обновление товаров, без лишних вещей...</p>
<p>Можно определить какую информацию о товарах модераторы смогут редактировать, т.е. без труда можно скрыть от лишних глаз закупочную цену товара или что-либо еще..</p>
<p>Статистика работы модераторов поможет при определении заработной платы модераторов (если модераторы наемные рабочие)..</p>
<p>В системе также пристутствует онлайн-чат (по типу <strong>icq</strong>), через который легко  и удобно оповещать модераторов о нужных моментах в работе..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Какие данные у товаров обновляет система:</p>
<p>1. Артикул, Название, Описание, краткое описание, цены..</p>
<p>2. Поставка, остаток на складе, порог склада..</p>
<p>3. Все поля CCK..</p>
<p>4. Изображение товара..</p>
<p>5. Категории товара (каталоги, таксономия)..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://drumode.ru/opisanie_drumode">За подробностями и описанием следуем сюда..</a></p>
<p><a href="http://drumode.ru/kupitj_drumode">За покупкой модуля следуем сюда..</a></p>
<p>&nbsp;</p>]]></description></item><item><title>Регулярные выражения</title><link>http://darkslave.net/uchenie/regulyarnye_vyrazheniya</link><pubDate>Tue, 21 Sep 2010 20:19:18 +0000</pubDate><description><![CDATA[
<p>Что такое регулярные выражения, зачем они нужны?.. в этой статье я попробую просто и доступно объяснить, что это такое, <strong>не вдаваясь</strong> в сложные и непонятные подробности.. как показала практика обучения, понимание вещей у каждого своё, поэтому повествование буду вести исключительно на примерах.. :-)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Регулярные выражения</strong> (англ. regular expressions, regexp, regex) &mdash; это формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов. По сути это строка-образец (паттерн, шаблон, маска), состоящая из символов и метасимволов и задающая правило поиска.</p>
<p>&nbsp;</p>
<p>Где они используются, спросите вы?.. в принципе много где: веб-серверы (Apache), серверы баз данных (Oracle,&nbsp; MySql, MsSql и т.п.), языки программирования (Perl, Php, Javascipt, C#, Java и т.п.), текстовые редакторы (MS Word и т.п.), поисковые машины (как локальные, так и интернет-поисковики) -- вобщем везде, где нужна быстрая обработка текста..</p>
<p>&nbsp;</p>
<p>Синтаксис регулярных выражений везде один, различие только в именах функций вызова разборщика (парсера) регулярных выражений.. Поэтому будем изучать регулярные выражения применительно к <strong>php</strong>..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Например, есть строка <strong>03-Jan-2009</strong>, являющейся англоязычной записью даты, и нам нужно из этой строки извлечь день, месяц и год. Используя регулярные выражения это сделать несложно (пример на <strong>php</strong>):</p>
<p><span style="font-family: courier new,courier;">$A = "03-Jan-2009"; // исходная строка</span></p>
<p><span style="font-family: courier new,courier;">if(preg_match("/^(\d+)-(\w+)-(\d{3,})$/i", $A, $p)){</span></p>
<p><span style="font-family: courier new,courier;">// теперь в массиве $p&nbsp; у нас будет следующие данные</span></p>
<p><span style="font-family: courier new,courier;">// $p[0]&nbsp; =&nbsp; 03-Jan-2009&nbsp; -- полное соответствие паттерна (шаблона) исходной строке</span></p>
<p><span style="font-family: courier new,courier;">// $p[1]&nbsp; =&nbsp; 03&nbsp;&nbsp;&nbsp; -- часть исходной строки, соответствующая 1ой скобке паттерна</span></p>
<p><span style="font-family: courier new,courier;">// $p[2]&nbsp; =&nbsp; Jan &nbsp; -- часть исходной строки, соответствующая 2ой скобке паттерна</span></p>
<p><span style="font-family: courier new,courier;">// $p[3]&nbsp; =&nbsp; 2009&nbsp; -- часть исходной строки, соответствующая 3ой скобке паттерна</span></p>
<p><span style="font-family: courier new,courier;">}else{</span></p>
<p><span style="font-family: courier new,courier;">// неверная строка</span></p>
<p><span style="font-family: courier new,courier;">}</span></p>
<p>&nbsp;</p>
<p>теперь подробнее.. выражен<span>ие <strong>/^(\d+)-(\w+)-(\d{3,})$/i</strong> вн</span>утри функции <strong>preg_match</strong> называется паттерном (шаблоном, маской поиска): часть паттерна (точнее часть исходной строки, соответствующая части паттерна), заключенная в скобки <strong>(...)</strong> сохраняется как отдельный элемент массива -- первая скобка как 1ый элемент, 2ая скобка как 2ой элемент и т.д.<span style="font-family: courier new,courier;">&nbsp;</span></p>
<p>выражение <strong>\d</strong> указывает разборщику (парсеру) регулярных выражений, что в этом месте должны быть цифры.. это так называемые <strong>метасимволы</strong>, есть следующие их разновидности:</p>
<p>&nbsp; <strong>\d</strong>&nbsp; --&nbsp; цифры,</p>
<p>&nbsp; <strong>\D</strong>&nbsp; --&nbsp; не цифры,</p>
<p>&nbsp; <strong>\w</strong>&nbsp; --&nbsp; буквы латинницы или символ подчеркивания,</p>
<p>&nbsp; <strong>\W</strong>&nbsp; --&nbsp; не буквы латинницы или подчеркивание,</p>
<p>&nbsp; <strong>\s</strong>&nbsp; --&nbsp; пробел, табуляция, переход на другую строку,</p>
<p>&nbsp; <strong>\S</strong>&nbsp; --&nbsp; не пробел или табуляция, или переход на другую строку,</p>
<p>&nbsp; <strong>[&nbsp; ]</strong>&nbsp; --&nbsp; набор символов, например, <strong>[abcd]</strong>&nbsp; укажет набор из 4 символов <strong>a</strong>, <strong>b</strong>, <strong>c</strong>, <strong>d</strong>..</p>
<p>через символ <strong>-</strong> (минус) можно указывать диапазон символов, пример выше можно переписать как:&nbsp; <strong>[a-d]</strong></p>
<p>для того чтобы в наборе указать символ минуса или скобок, нужно их экранировать слешем, например:&nbsp; <strong>[\-\[\]]</strong></p>
<p>&nbsp; <strong>[^&nbsp; ]</strong>&nbsp; --&nbsp; исключающий набор символов, например, <strong>[^abcd]</strong>&nbsp; указывает набор всех символов <strong>ansi</strong>, исключая <strong>a</strong>, <strong>b</strong>, <strong>c</strong>, <strong>d</strong>..</p>
<p>&nbsp; . (точка)&nbsp; --&nbsp; любой символ..</p>
<p>&nbsp;</p>
<p>символ <strong>+</strong> в выражении <strong>\d+</strong> означает что будет 1 или более символов отвечающих маске <strong>\d</strong>.. это так называемый <strong>квантификатор</strong>, он указывает сколько соответствий нужно искать, есть следующие разновидности:</p>
<p>&nbsp; <strong>+</strong>&nbsp; --&nbsp; одно или более совпадений,</p>
<p>&nbsp; <strong>?</strong>&nbsp; --&nbsp; одно или ноль,</p>
<p>&nbsp; <strong>*</strong>&nbsp; --&nbsp; ноль или любое количество,</p>
<p>&nbsp; <strong>{N, M}</strong>&nbsp; --&nbsp; количество совпадений от <strong>N</strong> до <strong>M</strong>,</p>
<p>&nbsp; <strong>{N,}</strong>&nbsp; --&nbsp; количество совпадений от <strong>N</strong> и более.. например выражение <span><strong>\d{3,}</strong></span> в нашем паттерне указывает, что подряд должно идти 3 или более символов-цифр..</p>
<p>&nbsp; <strong>{, M}</strong>&nbsp; --&nbsp; количество совпадений от <strong>0</strong> до <strong>M</strong>,</p>
<p>&nbsp; <strong>{N}</strong>&nbsp; --&nbsp; количество совпадений равное <strong>N</strong><strong>&nbsp;</strong>..</p>
<p>есть некоторые хитрые сочетания квантификаторов, о которых в кратце скажу ниже...</p>
<p>&nbsp;</p>
<p>символ <strong>i</strong> в конце нашего паттерна указывает парсеру, что поиск нужно вести без учета регистра символов.. это так называемый <strong>модификатор</strong>, есть следующие его разновидности:</p>
<p>&nbsp; <strong>i</strong>&nbsp; -- без учета регистра,</p>
<p>&nbsp; <strong>s</strong>&nbsp; -- метасимвол . (точка) определяет также переходы на другую строку, без этого можификатора все паттерны рассматриваются в пределах одной строки,</p>
<p>&nbsp; <strong>u</strong>&nbsp; --&nbsp; паттерны рассматриваются как записанные в кодировке <strong>utf-8</strong>..</p>
<p>&nbsp;</p>
<p>p.s.: при использовании функции <strong>php preg_replace(...)</strong> доступен модификатор <strong>e</strong> указывающий, что в заменяющей строке присутствует <strong>php</strong>-код, который нужно выполнить.. но использование такого способа вызывает некоторые проблемы, потому такой способ крайне не рекомендуется... взамен этому есть адекватная функция <strong>preg_replace_callback(...)</strong>..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>символ <strong>^</strong> в начале паттерна указывает, что поиск совпадений следует вести от начала исходной строки, а символ <strong>$</strong> в конце паттерна указывает, что конец поиска совпадений должен совпадать с концом исходной строки.. в нашем случае мы указали, что наш паттерн должен полностью соответствовать исходной строке..</p>
<p>Например, паттерн&nbsp; <strong>/^\d+/</strong>&nbsp;&nbsp; для строки&nbsp; <strong>123абв456</strong>&nbsp; найдет совпадение&nbsp; <strong>123</strong>,</p>
<p>а паттерн&nbsp; <strong>/\d+$/</strong>&nbsp; для той же строки найдет совпадение&nbsp; <strong>456</strong>.. надеюсь суть ясна, да?..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>В принципе основа составления регулярных выражений уже есть.. надеюсь это не показалось вам сложным, потому что сейчас начнутся настоящие регулярные выражения.. :-)</p>
<p>&nbsp;</p>
<p><strong>Внутренние модификаторы</strong>..</p>
<p>Например,&nbsp; <strong>/((?i)abc)def/</strong>&nbsp; найдет совпадение со строкой <strong>Abcdef</strong>, но не со строкой&nbsp; <strong>AbcDef</strong>.. внутренний модификатор действует до конца ближайшего субпаттерна..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Альтернативные субпаттерны</strong>..</p>
<p>Например,&nbsp; <strong>/(abc|def)/</strong>&nbsp; найдет совпадения в строках&nbsp; <strong>abc</strong>&nbsp; и <strong>def</strong>..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Незахватывающие субпаттерны</strong>..</p>
<p>Например,&nbsp; <strong>/(\w+)(?:\d+)/</strong>&nbsp; найдет совпадение в строке&nbsp; <strong>abcd123</strong>, но в массиве совпадений будет лишь один элемент <strong>abcd</strong>, второй субпаттерн не будет сохранен..</p>
<p>&nbsp;</p>
<p>Незахватывающие субпаттерны можно совмещать с внутренними модификаторами,</p>
<p>например, <strong>/(?i:abc)def/</strong>&nbsp; будет эквивалентно&nbsp; <strong>/(?:(?i)abc)def/</strong></p>
<p>p.s.: использование внутренних модификаторов не совсем оправдано, кроме как худшей читаемости кода они ничего не дают.. но это лишь мое имхо..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Ссылки на субпаттерны</strong>..</p>
<p>Например, <strong>/(m[ao])\\1/</strong>&nbsp; найдет совпадение в строках&nbsp; <strong>mama</strong>, <strong>momo</strong>,&nbsp; но не в строках <strong>mamo </strong>или <strong>moma</strong>.. при выполнении паттерна значение первого субпаттерна, заключенного в скобки, сохраняется в буфер, и в дальнейшем оно может быть использовано для поиска соответствия..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Утверждения, обратные утверждения</strong>..</p>
<p>Например, <strong>/ma(?=[nm])/</strong>&nbsp; найдет совпадение в строках <strong>man</strong> и <strong>mam</strong>.. вы спросите, а в чем отличие от паттерна вида <strong>/ma[nm]/</strong> .. отличие будет в том, что в первом случае обработке подвергается лишь <strong>ma</strong>, а во втором случае все слово <strong>man</strong>, <strong>mam</strong>.. другими словами, утверждения не участвуют в разборе паттерна.. надеюсь, что кто-то понял.. :-)</p>
<p>&nbsp;</p>
<p>Есть также отрицательные утверждения, например, <strong>/ma(?!m)/</strong> найдет совпадения в строках <strong>mah</strong>, <strong>mag</strong>, <strong>mak</strong> и т.д., но не в строке <strong>mam</strong>..</p>
<p>&nbsp;</p>
<p>Если утверждение нуно поставить перед искомым паттерном, то синтаксис немного другой:</p>
<p>Например, <strong>/(?&lt;=[jm])am/</strong>&nbsp; найдет совпадение в строках <strong>jam</strong> и <strong>mam</strong>..</p>
<p>Например, <strong>/(?&lt;!m)am/</strong>&nbsp; найдет совпадение в строках <strong>ham</strong>, <strong>jam</strong>, <strong>lam</strong> и т.д., но не в строке <strong>mam</strong>..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Условные субпаттерны</strong>..</p>
<p>В общем виде условные субпаттерны можно записать как:</p>
<p><strong>(? (условие) субпаттерн1 | субпаттерн0 )</strong>&nbsp;&nbsp; или вкратце&nbsp; <strong>(? (условие) субпаттерн1 )</strong></p>
<p>при выполнении <strong>условия&nbsp;</strong> выполняется поиск соответствий по <strong>субпаттерну1</strong>, если <strong>условие</strong> не выполняется то идет поиск по <strong>субпаттерну0</strong>..</p>
<p>Например, есть паттерн&nbsp; <strong>/(\d+)([\s\.\-]+)(?(?=\d)(\d+)|(\w+))\\2(\d+)/</strong> ... кстати как думаете, что делает этот паттерн?.. есть предположения?.. а паттерн этот разбирает строку даты.. найдет совпадение в строках <strong>23.12.12</strong>, <strong>23-12-2012</strong>, <strong>23 Dec 2012</strong>, но не в строках <strong>23 12-12</strong>..</p>
<p>надо отметить, что используя условный субпаттерн мы разделяем сохраняемые субпаттерны, например, <strong>23-12-2012</strong> вернет массив элементов:</p>
<p><span style="font-family: courier new,courier;">Array(</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [0] =&gt; 23-12-2012</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [1] =&gt; 23</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [2] =&gt; -</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [3] =&gt; 12</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [4] =&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [5] =&gt; 2012</span><br /><span style="font-family: courier new,courier;">)</span></p>
<p>тогда как <strong>23 Dec 2012</strong> вернет:</p>
<p><span style="font-family: courier new,courier;">Array(</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [0] =&gt; 23 Dec 2012</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [1] =&gt; 23</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [2] =&gt; </span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [3] =&gt; </span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [4] =&gt; Dec</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; [5] =&gt; 2012</span><br /><span style="font-family: courier new,courier;">)</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>На этом собственно заканчивается история о регулярных выражениях.. есть правда еще однократные и рекурсивные субпаттерны, но в силу малой применимости рассматривать их мы не будем..</p>
<p>&nbsp;</p>
<p>Посмотреть <strong>жизненные</strong> примеры использования регулярных выражений <strong><a href="http://darkslave.net/regexp_example">можно в этой статье</a></strong>..</p>]]></description></item><item><title>Используя regexp'ы</title><link>http://darkslave.net/regexp_example</link><pubDate>Tue, 21 Sep 2010 20:19:17 +0000</pubDate><description><![CDATA[
<p>А теперь перейдем к <strong>жизненным</strong> примерам использования регулярных выражений, то что может непосредственно пригодится при разработке веб-приложений..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>1. Разбивка файла на строки..</strong></p>
<p>Суть задачи думаю ясна.. тут можно воспользоваться встроеной функцией <strong>file(...)</strong> или же, прочитав все данные в строку, воспользоваться <strong>explode("\n", ...)</strong>..</p>
<p>Да, можно... вот только <strong>file(...)</strong> возвращает массив строк, сохраняя в конце строк переход на другую строку (<strong>\n</strong> или <strong>\r\n</strong>).. а использование <strong>explode("\n", ...)</strong> немногим лучше, так как если в файле разделитель строк в стиле <strong>dos</strong> (<strong>\r\n</strong>), то в конце разбитых строк остается символ <strong>\r</strong>.. к тому же оба эти способа для пустых строк возвратят такие же пустые элементы массива -- а оно нам нужно?</p>
<p>&nbsp;</p>
<p>Как же быть?.. все просто.. читаем содержимое файла в буфер и разбиваем на части, используя регулярное выражение..</p>
<p><span style="font-family: courier new,courier;">$A = file_get_contents(имя_файла);</span></p>
<p><span style="font-family: courier new,courier;">$R = preg_split("/\r?\n/", $A, -1, PREG_SPLIT_NO_EMPTY);</span></p>
<p>Данный метод разбивает файл на строки как по символу <strong>\n</strong> (<strong>unix</strong> формат), так и по <strong>\r\n</strong> (<strong>dos</strong> формат)... пустые строки при этом игнорируются..</p>
<p>&nbsp;</p>
<p>В принципе можно немного видоизменить паттерн, чтобы разбивка шла и по символу <strong>\r</strong> (<strong>mac os</strong> формат):</p>
<p><span style="font-family: courier new,courier;">$A = file_get_contents(имя_файла);</span></p>
<p><span style="font-family: courier new,courier;">$R = preg_split("/[\r\n]+/", $A, -1, PREG_SPLIT_NO_EMPTY);</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>2. Удаление лишних пробелов из строки..</strong></p>
<p>Суть задачи состоит в том, чтобы заменить несколько подряд идущих пробелов в строке одним пробелом..</p>
<p>Если честно, не представляю себе других <strong>тривиальных способов</strong> сделать такое, кроме как удалять в цикле парные пробелы, пока не останутся лишь одиночные.. но это извращенство еще то.. :-)</p>
<p>&nbsp;</p>
<p>Куда проще воспользоваться регулярным выражением:</p>
<p><span style="font-family: courier new,courier;">$R = preg_replace("/\s+/", " ", $A);</span></p>
<p>все подряд идущие пробелы, табуляции, переходы на другую строку заменяются на один пробел..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>3. Удаление html-тегов из текста или потока ввода..</strong></p>
<p>А вот эта на первый взгляд простая задача может породить регулярные выражения длиной с пол-страницы.. :-)</p>
<p>Решений задачи множество.. каждое из них верно только в определенных условиях..</p>
<p>&nbsp;</p>
<p>Самое простое решение, это удаление от <strong>&lt;</strong>&nbsp; до <strong>&gt;</strong>:</p>
<p><span style="font-family: courier new,courier;">$R = preg_replace("/&lt;\/?[a-z][\w\-\.:]*[^&gt;]*&gt;/", "", $A);</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description></item><item><title>Об этом сайте</title><link>http://darkslave.net/about.html</link><pubDate>Sat, 21 Aug 2010 10:34:51 +0000</pubDate><description><![CDATA[
<p><strong>Создавая.. (бес)полезное</strong>, человек живет в этом мире.. создавая вещи, человек вкладывает в них идею, частичку себя.. для одних это будет <strong>полезным</strong>, непременно нужным.. для других -- окажется <strong>бесполезной тратой</strong>..</p>
<p>&nbsp;</p>
<p>Так для кого этот сайт будет полезен?</p>
<p>&nbsp;</p>
<p>1. Для веб-разработчиков, как новичков, штампующих сайты-визитки, так и суровых дядек, поднимающих крупные веб-проекты..</p>
<p>&nbsp;</p>
<p>2. Для программистов-энтузиастов, блуждающих в поисках "совершенного" кода..</p>
<p>&nbsp;</p>
<p>3. Для ценителей здорового (и не совсем здорового) юмора, душевной лирики и прозы..</p>
<p>&nbsp;</p>
<p>4. Для любителей гипотез и теорий об окружающем нас мире..</p>
<p>&nbsp;</p>
<p>5. Для поисковых роботов, индексирующих просторы интернета..</p>
<p>&nbsp;</p>
<p>Ну так что.. отнесли уже себя к како-либо вышеперечисленной категории? тогда приятного времяпрепровождения..</p>
<p>Наполнение сайта будет постоянно обновляться, поэтому не забывайте о <a href="http://darkslave.net/myrss">RSS-Ленте</a>...</p>
<p>&nbsp;</p>
<p style="text-align: right;"><em>darkslave</em></p>
<p>&nbsp;</p>]]></description></item><item><title>Captcha</title><link>http://darkslave.net/captcha.html</link><pubDate>Sat, 21 Aug 2010 10:34:51 +0000</pubDate><description><![CDATA[
<p><strong>CAPTCHA</strong> (от англ. Completely Automated Public Turing test to tell Computers and Humans Apart &mdash; полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей) &mdash; торговая марка Университета Карнеги-Меллона, в котором разработали компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером.</p>
<p>&nbsp;</p>
<p>На просторах рунета можно найти множество различных вариантов captcha.. но мы же не банальные люди, чтобы гнуть существующий велосипед.. мы изобретем свой.. =)</p>
<p>&nbsp;</p>
<p>Итак, перед нами стоит задача создать тест, который будет определять является ли пользователь человеком или роботом..</p>
<p>Какие способы тут возможны?</p>
<p>1. Можно задавать вопрос, на который существует единственно верный ответ..</p>
<p>&nbsp;&nbsp;&nbsp; Например, "Столица Зимбабве", ответом будет "Хараре"..</p>
<p>&nbsp;&nbsp;&nbsp; Минус такого алгоритма: нужно создавать достаточно большую базу вопросов/ответов, т.к. при небольшой базе злоумышленнику будет довольно просто ее воссоздать..</p>
<p>&nbsp;</p>
<p>2. Можно задавать математические вопросы..</p>
<p>&nbsp;&nbsp;&nbsp; Например, "17 + 26 - 15 = ", ответом будет "28"..</p>
<p>&nbsp;&nbsp;&nbsp; Минус такого алгоритма: несложно написать робота, который будет вычислять результат таких математичсеких задачек..</p>
<p>&nbsp;</p>
<p>3. Можно выдавать искаженное изображение, аудио или видео, которое плохо (или вообще не) обрабатывается роботами..</p>
<p>&nbsp;&nbsp;&nbsp; Это наиболее распространенный вид captcha: человеку предоставляется картинка с изображением размытых, десруктурированных символов и необходимо указать их текстовое представление..</p>
<p>&nbsp; &nbsp; Главное в таком способе не переборщить с искажением информации, чтобы человек все же смог увидеть или услышать ее... а то получится что-то типа квадрата Малевича, а нужно ввести код с картинки.. =)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Со способом теста Тьюринга определились: будем использовать ввод секретного кода, изображенного на картинке.. Алгоритм работы такой:</p>
<p>1. На странице, где необходимо определение присутствия человека, создается сессия, а в поток вывода выводится ссылка на картинку с идентификатором этой сессии и форма для ввода секретного кода:</p>
<p><span style="font-family: courier new,courier;">&nbsp; session_start();</span></p>
<p><span style="font-family: courier new,courier;">&nbsp; ...</span><br /><span style="font-family: courier new,courier;">&nbsp; ?&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp; &lt;!-- форма, где необходимо определение присутствия человека --&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp; &lt;form action="..." methos="post"&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; ...</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; &lt;img src="captcha.php?&lt;?php echo session_name()."=".session_id(); ?&gt;" /&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; &lt;input type="text" name="pCodeUser" value="" /&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; ...</span><br /><span style="font-family: courier new,courier;">&nbsp; &lt;/form&gt;</span></p>
<p>&nbsp;</p>
<p>2. Когда браузер пользователя видит, что в теле старницы присутствует картинка, он посылает запрос серверу на получение этой картинки.. таким образом запсукается наш скрипт <strong>captcha.php</strong>&nbsp; которому в качестве параметров передается идентификатор сессии (в принципе это не совсем обяхательно, т.к. идентификатор сессии хранится в <strong>cookie</strong> браузера и автоматически отсылается при обращении к страницам текущего сайта)..</p>
<p>&nbsp;&nbsp; Вобщем, наш скрипт запускается.. генерирует секретный код и записывает его в сессию, например, $_SESSION['captcha_code'].. Данные сессии хранятся на сервере и пользователь не имеет к ним доступ.. попутно скрипт создает графическое представление секретного кода и выдает его в поток вывода как картинку, которая и отображается браузером клиента..</p>
<p>&nbsp;</p>
<p>3. После того, как пользователь увидит каринку, он вводит секретный код с картинки в поле ввода и активирует форму.. данные формы пересылаются нашей странице, где и проходит проверка верности ввода секретного кода..</p>
<p><span style="font-family: courier new,courier;">&nbsp; $human = 0;</span><br /><span style="font-family: courier new,courier;">&nbsp; if(isset($_SESSION['captcha_code']) &amp;&amp; !strcasecmp($_POST['pCodeUser'], $_SESSION['captcha_code'])){</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; // код верен</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; $human = 1;</span><br /><span style="font-family: courier new,courier;">&nbsp; }else{</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; // код неверен</span><br /><span style="font-family: courier new,courier;">&nbsp; }</span><br /><span style="font-family: courier new,courier;">&nbsp; unset($_SESSION['captcha_code']);</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; Далее по желанию разработчика, если код неверен может выводится сообщение об ошибке, или блокироваться доступ к контенту, или еще что-нибудь..</p>
<p>&nbsp; Удаление записи секретного кода из сессии (<span style="font-family: courier new,courier;">unset($_SESSION['captcha_code']);</span>) немаловажно, это предотвращает многократное использование успешно введенного кода..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>С алгоритмом работы разобрались, теперь самое интересное, как создавать картинку? с этим нам поможет библиотека PHP GD..</p>
<p><span style="font-family: courier new,courier;">&lt;?php</span><br /><span style="font-family: courier new,courier;">/*&nbsp; EASY-CAPTCHA&nbsp; &copy;dark http://darkslave.net/</span><br /><span style="font-family: courier new,courier;">*/</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;$kWd = 180; // ширина картинки</span><br /><span style="font-family: courier new,courier;">&nbsp;$kHg = 30;&nbsp; // высота</span><br /><span style="font-family: courier new,courier;">&nbsp;$kdX = 21;&nbsp; // расстояние между символами</span><br /><span style="font-family: courier new,courier;">&nbsp;$ksX = 24;&nbsp; // начальная позиция по горизонтали</span><br /><span style="font-family: courier new,courier;">&nbsp;$ksY = 0;&nbsp;&nbsp; // .. по вертикали </span><br /><br /><span style="font-family: courier new,courier;">&nbsp;$kNum = 6;&nbsp; // количество символов в капче</span><br /><span style="font-family: courier new,courier;">&nbsp;$kSym = "AEHLMNPRTUWYZ234679";&nbsp; // набор используемых символов</span><br /><span style="font-family: courier new,courier;">&nbsp;$kAmp = 6;&nbsp; // амплитуда размытия в пикселах</span><br /><span style="font-family: courier new,courier;">&nbsp;$kFun = 0.2;&nbsp; // циклическая частота размытия, 2<strong><span style="font-family: times new roman,times;">&pi;</span></strong>/период размытия в пикселах</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;$kPhs = 0.017453292 * mt_rand(0, 360);</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;// создаем изображение с белм фоном</span><br /><span style="font-family: courier new,courier;">&nbsp;$im = imagecreatetruecolor($kWd, $kHg);</span><br /><span style="font-family: courier new,courier;">&nbsp;$bk = imagecolorallocate($im, 255,255,255);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagefill($im, 0,0, $bk);</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;$fc = imagecreatetruecolor($kWd, $kHg);</span><br /><span style="font-family: courier new,courier;">&nbsp;$bk = imagecolorallocate($fc, 255,255,255);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagefill($fc, 0,0, $bk);</span><br />&nbsp;<br /><span style="font-family: courier new,courier;">&nbsp;// открываем изображение символов нашего шрифта (см. прикрепленные файлы)</span><br /><span style="font-family: courier new,courier;">&nbsp;$fn = imagecreatefrompng("font.png");</span><br /><span style="font-family: courier new,courier;">&nbsp;$bk = imagecolorat($fn, 0,0);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagecolortransparent($fn, $bk);</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;$cp = array();</span><br /><span style="font-family: courier new,courier;">&nbsp;$cs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";</span><br /><span style="font-family: courier new,courier;">&nbsp;$cn = strlen($kSym);</span><br /><span style="font-family: courier new,courier;">&nbsp;for($i=0; $i&lt;$cn; $i++){</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; $j = strpos($cs, $kSym{$i});</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; if($j!==false)</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp; $cp[] = array($kSym{$i}, $j);</span><br /><span style="font-family: courier new,courier;">&nbsp;}</span><br /><span style="font-family: courier new,courier;">&nbsp;$cn = count($cp) - 1;</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;// генерируем набор случайных символов и попутно создаем картинку с графическим представлением этих символов</span><br /><span style="font-family: courier new,courier;">&nbsp;$imx&nbsp; = $ksX;</span><br /><span style="font-family: courier new,courier;">&nbsp;$code = '';</span><br /><span style="font-family: courier new,courier;">&nbsp;for($i=0; $i&lt;$kNum; $i++){</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; $j = mt_rand(0, $cn);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; $code.= $cp[$j][0];</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; imagecopymerge($fc, $fn, $imx,$ksY, 32*$cp[$j][1],0, 32,32, 100);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; $imx += $kdX;</span><br /><span style="font-family: courier new,courier;">&nbsp;}</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;// применяем размытие -- смещение пиксельных строк по закону косинуса</span><br /><span style="font-family: courier new,courier;">&nbsp;for($i=0; $i&lt;$kHg; $i++){</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; $imx = $kAmp*cos($kFun*$i + $kPhs);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp; imagecopymerge($im, $fc, $imx,$i, 0,$i, $kWd,$kHg-$i, 100);</span><br /><span style="font-family: courier new,courier;">&nbsp;}</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;// записываем секретный код в сессию</span><br /><span style="font-family: courier new,courier;">&nbsp;session_start();</span><br /><span style="font-family: courier new,courier;">&nbsp;$_SESSION['captcha_code'] = $code;</span><br /><br /><span style="font-family: courier new,courier;">&nbsp;// выдаем картинку в поток вывода как изображение jpeg с качеством 60 (для уменьшения веса картинки)</span><br /><span style="font-family: courier new,courier;">&nbsp;Header("Content-Type: image/jpeg");</span><br /><span style="font-family: courier new,courier;">&nbsp;Header("Cache-Control: no-store, no-cache, must-revalidate");</span><br /><span style="font-family: courier new,courier;">&nbsp;Header("Expires: ". date("r"));</span><br /><span style="font-family: courier new,courier;">&nbsp;imagejpeg($im, '', 60);</span><br /><span style="font-family: courier new,courier;">&nbsp;exit();</span><br /><span style="font-family: courier new,courier;">?&gt;</span></p>
<p>&nbsp;</p>
<p>вот собственно и весь замысловатый код капчи, ничего сложного: копируем символы из файла шрифта (font.png) и применяем размытие -- смещение пиксельных строк по закону косинуса..</p>
<p>в аттаче смотрите исходники и пример использования..</p>
<p>&nbsp;</p>
<p><a title="Скачать файл, тип: архив файлов" href="http://darkslave.net/_images/132b62a-captcha.rar"><img class="imAcn" src="http://darkslave.net/_common/img/w_archive.png" alt="" /> captcha.rar (12.83 кб)</a></p>
<p>&nbsp;</p>]]></description></item><item><title>Роботы Quik</title><link>http://darkslave.net/quik.html</link><pubDate>Fri, 20 Aug 2010 06:15:27 +0000</pubDate><description><![CDATA[
<p><a rel="nofollow" href="http://quik.ru/about/">QUIK</a> &mdash; это программный комплекс для организации доступа к биржевым и внебиржевым торговым системам в режиме реального времени. Программный комплекс состоит из серверной части и рабочих мест (терминалов) пользователей, взаимодействующих между собой через интернет.</p>
<p>QUIK сегодня &mdash; это наиболее популярная торговая платформа с доступом на  все биржи России, Украины, а также на зарубежные торговые площадки через  единый торговый терминал. QUIK применяется более чем 250 финансовыми  организациями для обслуживания десятков тысяч клиентов.</p>
<p>&nbsp;</p>
<p>С появлением программного комплекса появилась и идея автоматизации совершения сделок купли/продажи.. а оно и понятно: тогда когда у человека уходят секунды на обдумывание решения, программный алгоритм выполняет это за сотые доли секунды!..</p>
<p>Теперь уже никого не удивишь роботами, которые "сами" играют на бирже, зарабатывая хозяину на жизнь..</p>
<p>&nbsp;</p>
<p>И мы не исключение.. в этом разделе представлено несколько вариантов таких роботов-трейдеров: начиная от полуавтомата, заканчивая полноценным автоматом..</p>
<p>Также представлена часть исходного кода этих роботов, основные функции и процедуры, необходимые для работы..</p>
<p>&nbsp;</p>
<p><a href="http://darkslave.net/autoseller.html">&bull; Робот-продавец</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description></item><item><title>Лирика</title><link>http://darkslave.net/lyrics.html</link><pubDate>Fri, 20 Aug 2010 06:15:26 +0000</pubDate><description><![CDATA[
<p>Стихи -- это словно концентрат из мыслей, где каждое слово, каждое препинание несет в себе идею..</p>
<p>Иногда поражаюсь, это словно "то, что хотел когда-то сказать", но не смог правильно выразить мысль..</p>
<p>&nbsp;</p>
<p>Здесь представлены стихи моих (когда-то) знакомых..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description></item><item><title>CloudOfStars</title><link>http://darkslave.net/cloudofstars.html</link><pubDate>Fri, 20 Aug 2010 06:15:26 +0000</pubDate><description><![CDATA[
<p>CloudOfStars -- <a rel="nofollow" href="http://vk.com/cloudofstars">вот эта, довольно странная, девушка</a>, которая пишет замечательные меланхолично-романтические стихотворения..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp; Я видел небо, видел море<br />&nbsp; В твоих глазах&hellip;<br />&nbsp; Я засыпал под шум прибоя,<br />&nbsp; Под запах астр!<br />&nbsp; Ты мне дарила отблеск Солнца<br />&nbsp; Своих волос&hellip;<br />&nbsp; Твои уста&hellip;О, это тело&hellip;<br />&nbsp; Не нужно слёз!<br />&nbsp; Ты покоряла совершенством,<br />&nbsp; А я тонул&hellip;<br />&nbsp; Твой дивный, лёгкий, детский голос<br />&nbsp; Меня тянул.<br />&nbsp; Твоя улыбка ворожила,<br />&nbsp; Я убегал&hellip;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp; Он Ей посылал стихи, Она читала.<br />&nbsp; Но в них Он о себе не говорил..<br />&nbsp; Она о нём так ничего и не узнала<br />&nbsp; -- Он к ней никогда не подходил..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp; Дай мне руку и я подарю тебе крылья&hellip;<br />&nbsp; <br />&nbsp; - Я говорил тебе, что ты прекрасна?<br />&nbsp; - Да, говорил, но можешь повторить.<br />&nbsp; - Мы повстречались, видно, не напрасно&hellip;<br />&nbsp; - Ты прав. Ты научил меня любить.<br />&nbsp; <br />&nbsp; Я до тебя писала и читала<br />&nbsp; Любовь в журналах и в глазах людей.<br />&nbsp; Но на себе её не ощущала.<br />&nbsp; Была я как-то скованна, слабей.<br />&nbsp; <br />&nbsp; Хотела полететь-&nbsp; но не взлетала.<br />&nbsp; Я не имела крыльев без тебя.<br />&nbsp; В толпе людей совсем не замечала -<br />&nbsp; Среди людей, но всё-таки одна.<br />&nbsp; <br />&nbsp; Нет, я была не злой, не пессимисткой,<br />&nbsp; А просто равнодушия полна.<br />&nbsp; Наверное, похожей на артистку:<br />&nbsp; Загадочна, немного холодна.<br />&nbsp; <br />&nbsp; Но ты пришёл, как ангел: весь из света,<br />&nbsp; Сияющий нежнейшей чистотой.<br />&nbsp; И ты помог почувствовать мне лето<br />&nbsp; Всей кожей, сердцем и душой.<br />&nbsp; <br />&nbsp; Ты показал мне новые планеты,<br />&nbsp; Открыл неведомые тайны бытия.<br />&nbsp; Я очень дорожу явлением этим:<br />&nbsp; До каждого микрона - я твоя.<br />&nbsp; <br />&nbsp; За каждый миг, с тобою проведённый,<br />&nbsp; Я буду искренне судьбу благодарить.<br />&nbsp; Я счастлива, что побыла влюблённой&hellip;<br />&nbsp; И для тебя я начинаю жить.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp; Я никогда не говорил<br />&nbsp; Тебе о том, что я<br />&nbsp; Безумно, до последних сил<br />&nbsp; Люблю, люблю тебя.<br />&nbsp; <br />&nbsp; Я не могу без этих глаз,<br />&nbsp; Без этой глубины.<br />&nbsp; Готов я сотни тысяч раз<br />&nbsp; Тонуть в них без воды.<br />&nbsp; <br />&nbsp; Я не могу без этих рук,<br />&nbsp; Без этой теплоты.<br />&nbsp; Уберегу от сотни мук<br />&nbsp; Их милые черты.<br />&nbsp; <br />&nbsp; Я не могу без твоих ласк,<br />&nbsp; Без твоей нежности.<br />&nbsp; Я просто погибаю в час,<br />&nbsp; Когда не вместе мы.<br />&nbsp; <br />&nbsp; Никто не сможет приказать<br />&nbsp; Мне жить или дышать.<br />&nbsp; Ведь моё сердце - это ты,</p>
<p>&nbsp; Тебе мной управлять!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp; Когда-то, в темноте покоя,<br />&nbsp; Я понял, что напрасно жил.<br />&nbsp; Что не нужны богатые хоромы,<br />&nbsp; И что мучительно устал от лжи.<br /><br />&nbsp; Мне многие твердили, что напрасно<br />&nbsp; Ищу я свет. Его давно уж нет.<br />&nbsp; Что жизнь уже не станет так прекрасна,<br />&nbsp; Что речи о спасении просто бред!<br /><br />&nbsp; Мы стали забывать людскую веру<br />&nbsp; В спасение, бессмертие души.<br />&nbsp; И стали придавать любови меру<br />&nbsp; Не ту, что позволяет нам прожить.<br /><br />&nbsp; Возможно, человеческая воля<br />&nbsp; Становится слаба перед игрой</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp; Почему, когда ты рядом<br />&nbsp; Мир меняется?<br />&nbsp; Лишь коснёшься меня взглядом<br />&nbsp; Улыбаюсь я?<br /><br />&nbsp; Почему, когда ты плачешь,<br />&nbsp; Очень грустно мне?<br />&nbsp; Мои слёзы будто капли<br />&nbsp; от дождя на стекле.<br /><br />&nbsp; Почему, когда ты смотришь,<br />&nbsp; Вдохновляюсь я?<br />&nbsp; А, когда ты говоришь,<br />&nbsp; Расслабляюсь я?<br /><br />&nbsp; А, когда ты улыбнёшься,<br />&nbsp; Всё уходит прочь:<br />&nbsp; И сомнения, и тревоги<br />&nbsp; Исчезают в ночь?<br /><br />&nbsp; А, когда ты нежно шепчешь,<br />&nbsp; Словно таю я?<br />&nbsp; Ну, а если ты уходишь -<br />&nbsp; Умираю я?<br /><br />&nbsp; Все ответы на вопросы<br />&nbsp; Я ищу в себе.<br />&nbsp; Моё сердце всё пылает<br />&nbsp; От любви к тебе.<br /><br />&nbsp; Почему, когда ты рядом,<br />&nbsp; Всё меняется?<br />&nbsp; Ну, а тем, что я люблю,<br />&nbsp; Всё объясняется.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp; Зачем пытаются вернуть <br />&nbsp; Всё то, что этого не стоит?<br />&nbsp; Зачем мне говорят: &laquo;Забудь,<br />&nbsp; Она усилий тех не стоит&raquo;?<br /><br />&nbsp; За ней бегу я, как слепой,<br />&nbsp; Ищу в толпе тот нежный образ,<br />&nbsp; Который поманил с собой<br />&nbsp; И отпустить меня не может.<br /><br />&nbsp; Она прекрасна, как цветок,<br />&nbsp; Которым хочешь восхищаться.<br />&nbsp; Сорвать его ты не готов,<br />&nbsp; Душа не хочет расставаться.<br /><br />&nbsp; Я подарю ей целый мир,<br />&nbsp; Открою тайны всей Вселенной.<br />&nbsp; Она моя мечта, мой смысл,<br />&nbsp; Она &ndash; небесное творенье!<br /><br />&nbsp; Но почему всё в мире так!<br />&nbsp; Те, кого любим, нас не любят.<br />&nbsp; Она ушла&hellip; Сказав: &laquo;Пустяк&raquo;<br />&nbsp; И всё, что было, позабудет.<br /><br />&nbsp; Но я не позабуду, нет!<br />&nbsp; Я не смогу всё просто бросить.<br />&nbsp; Увижу, я скажу : &laquo;Привет&hellip;&raquo;,<br />&nbsp; А душу боль моя изгложет.<br /><br />&nbsp; &laquo;Себя за это проклинаю,<br />&nbsp; Но не виню тебя ни в чём.<br />&nbsp; Ведь я люблю тебя, я знаю.<br />&nbsp; Будь счастлива. На веки твой!&raquo;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp; Зачем я повстречал тебя тогда?<br />&nbsp; Зачем заметил средь толпы безликой?<br />&nbsp; Зачем я заглянул в твои глаза<br />&nbsp; И утонул, омытый страстью дикой?<br /><br />&nbsp; Зачем ты мне не говорила: &laquo;Нет&raquo;?<br />&nbsp; Зачем пошла, когда тебя позвал я?<br />&nbsp; Зачем на протяжении стольких лет<br />&nbsp; Ты всю себя мне просто отдавала?<br /><br />&nbsp; Зачем ты признавалась мне в любви?<br />&nbsp; Зачем со мною вместе боль терпела?<br />&nbsp; Зачем ты не могла никак уйти?<br />&nbsp; Ведь я же знаю, что ты этого хотела.<br /><br />&nbsp; Зачем ты показала мне, где Рай?<br />&nbsp; Зачем ты стала ангелом небесным?<br />&nbsp; Зачем, скажи, судьба с тобой свела<br />&nbsp; И подарила миг жизни той чудесной?<br /><br />&nbsp; Зачем&hellip; Зачем? Как глупо ждать ответа,<br />&nbsp; Как глупо мне вопросы задавать.<br />&nbsp; Прости меня за всё, прости за это,<br />&nbsp; Прости мне всё, что не успел сказать.<br /><br />&nbsp; Теперь я в этом мире просто лишний,<br />&nbsp; Наверно, слишком слабо я держал.<br />&nbsp; Зачем, скажи, зачем, ответь, Всевышний,<br />&nbsp; Её пережила любовь моя?</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp; *<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Двое.<br /><br />&nbsp;&nbsp; Ночь. Аромат духов и звёзды&hellip;<br />&nbsp;&nbsp; Они дарили тишину.<br />&nbsp;&nbsp; А он сидел и ждал Мадонну<br />&nbsp;&nbsp; На берегу Невы. Одну.<br /><br />&nbsp;&nbsp; Звон каблуков туфлей на шпильке<br />&nbsp;&nbsp; Разрушил эту тишину.<br />&nbsp;&nbsp; Она пришла к нему, как льдинка,<br />&nbsp;&nbsp; Всю жизнь он ждал её одну!<br /><br />&nbsp;&nbsp; Она прекрасна, как мгновенье,<br />&nbsp;&nbsp; Когда бываешь ты в лесу,<br />&nbsp;&nbsp; Он был наполнен вдохновеньем,<br />&nbsp;&nbsp; Он ей дарил свою слезу.<br /><br />&nbsp;&nbsp; Но между ними словно пропасть<br />&nbsp;&nbsp; Образовалась навсегда:<br />&nbsp;&nbsp; Она его, но не свободна.<br />&nbsp;&nbsp; Она боялась. Он не знал.<br /><br />&nbsp;&nbsp; Но вечер этот был последним,<br />&nbsp;&nbsp; Последний раз лицом в лицо,<br />&nbsp;&nbsp; Глаза в глаза, на пальце бледном<br />&nbsp;&nbsp; Блестит венчальное кольцо.<br /><br />&nbsp;&nbsp; Он подарил ей чувство веры<br />&nbsp;&nbsp; В свои удачи и мечты,<br />&nbsp;&nbsp; А с &laquo;тем&raquo; она не знала меры<br />&nbsp;&nbsp; Печалям, страхам, пустоты.<br /><br />&nbsp;&nbsp; Она забыла с ним о боли,<br />&nbsp;&nbsp; Которую нанёс ей &laquo;тот&raquo;,<br />&nbsp;&nbsp; Он подарил ей чувство воли,<br />&nbsp;&nbsp; Свободу, радость и полёт.<br /><br />&nbsp;&nbsp; Она была его спасеньем,<br />&nbsp;&nbsp; А он был тем, кого всегда<br />&nbsp;&nbsp; Ей в этой жизни не хватало,<br />&nbsp;&nbsp; Кого искала все года.<br /><br />&nbsp;&nbsp; Но всё закончилось так скоро,<br />&nbsp;&nbsp; Рай был утерян навсегда,<br />&nbsp;&nbsp; Но сказка их нет, нет, не в прошлом,<br />&nbsp;&nbsp; Она в их памяти всегда!<br /><br />&nbsp;&nbsp; Ночь, аромат духов и звёзды<br />&nbsp;&nbsp; Уже не дарят тишину.<br />&nbsp;&nbsp; На лавочке конверт с запиской:<br />&nbsp;&nbsp; "Надеюсь, верую, люблю".<br /></p>]]></description></item><item><title>Aka Aksel</title><link>http://darkslave.net/aka_aksel.html</link><pubDate>Fri, 20 Aug 2010 06:15:26 +0000</pubDate><description><![CDATA[
<p>Еще один персонаж из жизни...</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; *&nbsp;&nbsp; *<br />&nbsp;Расправь свои крылышки - вырвись на волю,<br />&nbsp;Протяни свою руку и полетели со мною..<br />&nbsp;Я знаю дорогу в Твой мир сновидений,<br />&nbsp;Где нет ни печали, ни доли сомнений..<br /><br />&nbsp;Любовь моя как небо чиста, бесконечна,<br />&nbsp;Родна, добродушна, невинна и вечна..<br />&nbsp;Ей поистине можно счастье доверить,<br />&nbsp;Почему Ты не хочешь в это поверить..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description></item><item><title>Робот-продавец</title><link>http://darkslave.net/autoseller.html</link><pubDate>Fri, 20 Aug 2010 06:15:26 +0000</pubDate><description><![CDATA[
<p><strong>Робот-продавец</strong> &mdash; это полуавтоматический робот, который отслеживает покупку ценных бумаг и автоматически выставляет заявки на их продажу с учетом комиссий и заложенной прибыли..</p>
<p>&nbsp;</p>
<p>В чем преимущества такого робота?</p>
<p>1. Робот сам отслеживает сколько куплено ценных бумаг и ведет учет всех выставленных и снятых заявок.</p>
<p>2. Робот сам расчитывает цену на продажу ценных бумаг с учетом всех комиссий и заложенной прибыли.</p>
<p>3. Робот сам выставляет заявку на продажу ценных бумаг и обновляет ее при каких-либо изменениях.</p>
<p>4. Заявки на покупку ценных бумаг по оптимальной цене выставляет человек.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Покупая робота вы получаете:</p>
<p>1. Непосредственно самого робота.. :-)</p>
<p>2. Бесплатную техническую поддержку и помощь по настройке робота..</p>
<p>3. Бесплатные обновления, которые будут уже в ближайшем будущем..</p>
<p>&nbsp;</p>
<p>Стоимость робота составляет 28 WMZ..</p>
<p>Для покупки робота оставьте заявку на покупку в <a href="http://darkslave.net/ticket">Тикетовке</a> и укажите контактные данные..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description></item></channel></rss>
