<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>RulezDev</title>
<link>http://rulezdev.com</link>
<description>Посты</description>
<lastBuildDate>Sat, 31 Jul 2010 19:25:09 +0300</lastBuildDate>
<item><title>Определение лиц на чистом GD</title>
<link>http://rulezdev.com/blog/opredelenie-lits-na-chistom-gd.html</link>
<description>&lt;img src=&quot;http://rulezdev.com/users_data/1/1/blog_data/detection.jpg&quot;&gt;&lt;br&gt;
&lt;a href=&quot;http://svay.com/blog/index/post/2009/06/19/Face-detection-in-pure-PHP-(without-OpenCV)&quot;&gt;Определение лица на чистом PHP&lt;/a&gt;, без сторонних плагинов и прочего.&lt;br&gt;
&lt;br&gt;
Круто</description>
<guid>http://rulezdev.com/blog/opredelenie-lits-na-chistom-gd.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>Невозможность изменить action у формы в jQuery</title>
<link>http://rulezdev.com/blog/nevozmozhnost-izmenit-action-u-formy-v-jquery.html</link>
<description>Столкнулся с интересной поеботкой&lt;br&gt;
&lt;br&gt;
Если у формы есть поле с name=«action», ну, типа так: &lt;pre&gt;&lt;code class=&quot;html&quot;&gt;&amp;lt;form action=&amp;quot;my_action&amp;quot;&amp;gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;action&amp;quot; value=&amp;quot;111&amp;quot;&amp;gt;
&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
то jQuery конструкция: &lt;pre&gt;&lt;code class=&quot;js&quot;&gt;$('form').attr('action', 'another_action'); &lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
не работает!&lt;br&gt;
&lt;br&gt;
Т.е. убираем поле action и всё ок, работает. &lt;br&gt;
Тестил в Mozilla 3.5 beta 4, но люди говорят и в IE7 тоже не работает.</description>
<guid>http://rulezdev.com/blog/nevozmozhnost-izmenit-action-u-formy-v-jquery.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>Еще говнокодик</title>
<link>http://rulezdev.com/blog/esche-govnokodik.html</link>
<description>И снова результаты трудов могучих программистов!&lt;br&gt;
&lt;br&gt;
В коде одной весьма известной газеты в первых строчках сайта я нашел вот такое прекрасное:&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
  if (!strstr ($_SERVER[&amp;quot;HTTP_USER_AGENT&amp;quot;], 'MSIE')) {
    Print_message (&amp;quot;Ошибка&amp;quot;, &amp;quot;Данный интерфейс разработан исключительно под Internet Explorer&amp;quot; );
  }
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
Ох ох. </description>
<guid>http://rulezdev.com/blog/esche-govnokodik.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>Skype vs Apache</title>
<link>http://rulezdev.com/blog/skype-vs-apache.html</link>
<description>Поставил себе Windows 7 на рабочий комп, т.к. на ноуте она стоит давно и себя вполне зарекомендовала рабочей.&lt;br&gt;
&lt;br&gt;
При установке денвера возникла проблема — апач не стартует. Уже и так и сяк — тупо при запуске ничего не сообщая валится. &lt;br&gt;
Перепроверил конфиг, полазил по папкам — на вид всё ок, а не запускается Apache и всё тут. Ну, думаю, что-то в RC нахимичили, т.к. на ноуте 7077 какой-то вроде и всё ок.&lt;br&gt;
&lt;br&gt;
Осенило посмотреть, не висит ли кто на 80 порту. Висит! Кто — непонятно.&lt;br&gt;
&lt;br&gt;
Первым делом что? Гугл! Вбил в поиск &lt;strong&gt;windows 7 apache 80&lt;/strong&gt;, гляжу есть такая распространенная проблема у пацанов. Сетует кто на процесс &lt;code&gt;BranchCache&lt;/code&gt;, кто на &lt;code&gt;http.sys&lt;/code&gt; который отключается из реестра.&lt;br&gt;
&lt;br&gt;
Сделал всё что написано — хуй!&lt;br&gt;
&lt;br&gt;
Пришла мысль САМОМУ посмотреть, кто там висит и занимает порт.&lt;br&gt;
&lt;br&gt;
Пишем в консоли: &lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;no-highlight&quot;&gt;netstat -ano&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
Первым же пунктом:&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;no-highlight&quot;&gt;Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       2236&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
Ага сукабля! 2236 Полез в список процессов, а ето… Скайп сучоныш!&lt;br&gt;
&lt;br&gt;
Я тут и подохуел: схуёв ли скайпу висеть на вебсерверном порту? &lt;s&gt;При путине&lt;/s&gt; В старом скайпе такого небыло.&lt;br&gt;
Порылся в настройках и нашел таки галочку в настройках сети, что таки да — можно слушать 80 и 443 порт. Ну помойму ето вообще охуеть.&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://rulezdev.com/users_data/1/1/blog_data/galochka-suka.gif&quot;&gt;&lt;br&gt;
&lt;br&gt;
Ну в общем снял и всё ок.&lt;br&gt;
&lt;br&gt;
Skype сука коварный. А семёрочка — замечательная.</description>
<guid>http://rulezdev.com/blog/skype-vs-apache.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>preg_match и большой текст</title>
<link>http://rulezdev.com/blog/preg_match-i-bolshoj-tekst.html</link>
<description>На хабре прочёл. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;&lt;code&gt;preg_match&lt;/code&gt;&lt;/strong&gt; (и &lt;strong&gt;&lt;code&gt;preg_match_all&lt;/code&gt;&lt;/strong&gt;) по умолчанию не обрабатывает тексты величиной более 100кб, сразу возвращая false.&lt;br&gt;
&lt;br&gt;
Решение проблемы простое, пишем:&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;php&quot;&gt;ini_set(&amp;quot;pcre.backtrack_limit&amp;quot;, 10000000);&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
Иногда мне нужно парсить большие странички, надо запомнить.</description>
<guid>http://rulezdev.com/blog/preg_match-i-bolshoj-tekst.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>Google map MarkerClusterer </title>
<link>http://rulezdev.com/blog/google-map-markerclusterer.html</link>
<description>Очень полезный объект обнаружил в Google map API, называется &lt;strong&gt;MarkerClusterer&lt;/strong&gt;.&lt;br&gt;
Делает он вот из такого:&lt;br&gt;
&lt;img src=&quot;/users_data/1/1/blog_data/20090427/mc1.jpg&quot;&gt;&lt;br&gt;
&lt;br&gt;
Вот такое:&lt;br&gt;
&lt;img src=&quot;/users_data/1/1/blog_data/20090427/mc2.jpg&quot;&gt;&lt;br&gt;
&lt;br&gt;
Что наглядно, красиво, функционально и еще более производительно (там есть speedtest, на 1000 отметок вариант без MarkerClusterer отрисовывается за 5.5с., а с ним — 300мс.)&lt;br&gt;
&lt;br&gt;
Вот &lt;a href=&quot;http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/docs/examples.html&quot;&gt;документация по MarkerClusterer&lt;/a&gt;.</description>
<guid>http://rulezdev.com/blog/google-map-markerclusterer.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>Color Schema Designer</title>
<link>http://rulezdev.com/blog/color-schema-designer.html</link>
<description>&lt;a href=&quot;http://colorschemedesigner.com&quot;&gt;colorschemedesigner.com&lt;/a&gt;&lt;br&gt;
Достаточно удобный инструмент для составления палитры.&lt;br&gt;
Что интересно, написано все без использования flash. Есть несколько методов выбора цветовой схемы.&lt;br&gt;
В общем переодически штука весьма нужная</description>
<guid>http://rulezdev.com/blog/color-schema-designer.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>PHP.JS</title>
<link>http://rulezdev.com/blog/php-js.html</link>
<description>Для себя, чтобы не забыть: &lt;a href=&quot;http://phpjs.org&quot;&gt;phpjs.org&lt;/a&gt;&lt;br&gt;
Клёвая библиотека портированных php-функций под яваскрипт.</description>
<guid>http://rulezdev.com/blog/php-js.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>Русский в заголовках Subj, To, From в фунции mail() на PHP</title>
<link>http://rulezdev.com/blog/russkij-v-zagolovkax-subj-to-from-v-funtsii-mail-n.html</link>
<description>Столкнулся с проблемой:&lt;br&gt;
&lt;br&gt;
Если отправить письмо из PHP функцией &lt;code&gt;mail()&lt;/code&gt; вот так:&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;php&quot;&gt;&amp;lt;?php
mail(&amp;quot;bla@foo.bar&amp;quot;, &amp;quot;Заголовок русскими буквами&amp;quot;, &amp;quot;Русский текст&amp;quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
То текст придёт нормально, а тема письма закрокозябрится.&lt;br&gt;
&lt;br&gt;
Всё потому, что заголовок письма должен быть US-ASCII и может быть кодирован в BASE64.&lt;br&gt;
&lt;br&gt;
Так что решение оказалось элементарным:&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;php&quot;&gt;&amp;lt;?php
function codeMailHeader($text){
    return '=?UTF-8?B?'.base64_encode($text).'?=';
}

mail(&amp;quot;bla@foo.bar&amp;quot;, codeMailHeader(&amp;quot;Заголовок русскими буквами&amp;quot;), &amp;quot;Русский текст&amp;quot;);

&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
По коду видно, что текст должен быть в UTF-8. &lt;br&gt;
&lt;br&gt;
Таким образом можно кодировать и остальные поля в заголовке письма.&lt;br&gt;
&lt;br&gt;
P.S. четвертый параметр &lt;code&gt;mail()&lt;/code&gt; я опустил для кратости.</description>
<guid>http://rulezdev.com/blog/russkij-v-zagolovkax-subj-to-from-v-funtsii-mail-n.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>
<item><title>Подводные камни wgetа</title>
<link>http://rulezdev.com/blog/podvodnye-kamni-wgeta.html</link>
<description>Использовать wget нужно осторожно нахуй!&lt;br&gt;
&lt;br&gt;
Рассказываю историю:&lt;br&gt;
&lt;br&gt;
У меня в движке блога есть понятие «отложенная запись» — т.е. я могу задать любой записи дату, когда она появится. Для некоторых проектов незаменимо — можно забить его при создании на 2-3 месяца вперед, а потом заниматься своими делами.&lt;br&gt;
&lt;br&gt;
Так вот, чтобы при выборке записей небыло условий вроде &lt;code&gt;`blog_posts`.`pubdate` &amp;lt;= CURDATE()&lt;/code&gt; (что достаточно медленно) я выбираю просто &lt;code&gt;`blog_posts`.`status` = 'posted'&lt;/code&gt; (это enum-поле, и оно может быть waiting, posted или deleted) что быстро и удобно. Ну и до этого у меня уже во всех выборках (например предыдущий пост, следующий, случайный, итд) постов было условие &lt;code&gt;`blog_posts`.`status` = 'posted'&lt;/code&gt;, то и переписывать все выборки тоже было лень.&lt;br&gt;
&lt;br&gt;
Разумеется, переодически приходится проверять поле &lt;code&gt;pubdate&lt;/code&gt; и ставить всем записям которым наступило время показаться статус &lt;code&gt;posted&lt;/code&gt;. Ну т.е. как переодически — раз в минуту. Ну т.е. как приходится — кроном.&lt;br&gt;
&lt;br&gt;
Т.к. ssh у меня есть не ко всем возможным проектам, то кроновую часть решил написать в виде простой веб-странички, которую я буду запрашивать через крон wget'ом. &lt;br&gt;
&lt;br&gt;
Ну я написал в кронтабе: &lt;br&gt;
&lt;pre&gt;&lt;code&gt;* * * * * wget http://rulezdev.com/cron/ &lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
и ушел довольный. Все работало, посты появлялись и никакой нагрузки это не создавалось.&lt;br&gt;
&lt;br&gt;
ВНЕЗАПНО (через несколько месяцев) хостеры обращают внимание, что:&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://rulezdev.com/users_data/1/1/blog_data/20090314/wget-oxuel.png&quot; alt=&quot;Wget охуел&quot;&gt;&lt;br&gt;
&lt;br&gt;
Ёбанный пиздец! Я нихуя не понимаю, т.к. запрос там простейший, времени занимать много не может по определению, а уж даже если и занимает, то уж вешаться должен php или mysql, а не wget.&lt;br&gt;
Тут-то я и обнаружил в home адов ад — сотни тысяч файлов вида index.html.42432&lt;br&gt;
Сука-wget.&lt;br&gt;
&lt;br&gt;
Файлов было настолько много, что:&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;[rulezzz@hosting ~]$ rm index.html.*
-bash: /bin/rm: Argument list too long&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
Ыхыхыххы. &lt;br&gt;
Ну и соответственно, когда wget пытался найти следующее имя файла, ему приходилось делать стотыщ итераций по поиску следующего имени файда для вывода. Ну и он вис. Ад, какой ад.&lt;br&gt;
&lt;br&gt;
Спасло положение изменение строки крона на:&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;wget -o /tmp/wget-dw.log -q -O /tmp/wget-content.log http://rulezdev.com/cron/ &lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
В общем, надо иметь ввиду, что если вгету явно не указать файл для вывода, то он начиает охуевать.</description>
<guid>http://rulezdev.com/blog/podvodnye-kamni-wgeta.html.html</guid>
<author>Александр (Steel Ice)</author>
</item>

</channel>
</rss>