<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/'>
<channel>
  <title>Event Log Messages</title>
  <link>http://mkdir.livejournal.com/</link>
  <description>Event Log Messages - LiveJournal.com</description>
  <lastBuildDate>Sat, 26 May 2007 13:19:07 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>mkdir</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://p-userpic.livejournal.com/36106252/8349063</url>
    <title>Event Log Messages</title>
    <link>http://mkdir.livejournal.com/</link>
    <width>82</width>
    <height>71</height>
  </image>

<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/13087.html</guid>
  <pubDate>Sat, 26 May 2007 13:19:07 GMT</pubDate>
  <title>И снова в этом зале нет пустого места )</title>
  <link>http://mkdir.livejournal.com/13087.html</link>
  <description>Всем привет!&lt;br /&gt;&lt;br /&gt;Вот уже в пятый раз провожу семинар по моему любимому языку программирования &lt;a href=&quot;http://www.python.org&quot; title=&quot;Открыть в этом окне&quot;&gt;Python&lt;/a&gt;. Комьюнити в Украине развивается семимильными шагами. За последние полгода появилась масса новых вакансий для питонистов, об этом языке заговорили большие компании и уже сделали свои первые успешные шаги в направлении к разработке на Python. И это не может не радовать.&lt;br /&gt;&lt;br /&gt;На этот раз, семинар вновь соберет программистов, которые по-настоящему увлечены работой и преданы своему делу. Когда я вижу этих заинтересованных людей с горящими глазами, которые с интересом поглащают инфу, то на душе становится приятно ;-) Все эти увлекательные беседы во время кофе-паузы, смешные моменты во время докладов, пиво после семинара - все это очень здорово!&lt;br /&gt;&lt;br /&gt;Итак, &lt;strong&gt;2 июня 2007 года&lt;/strong&gt; в Киеве состоится очередной семинар по программированию на языке Python - &lt;a href=&quot;http://exception.org.ua/exception_05/&quot; title=&quot;Открыть в этом окне&quot;&gt;Exception #05&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Темой пятого семинара будет тема построения и использования гибкой компонентной модели в веб-проектах и GUI-приложениях. Докладчики расскажут о взаимодействии интерфейсов вместо взаимодействия объектов, о достоинствах различных реализаций для одного описания интерфейса на примере динамической смены скина, дадут оценку производительности, расскажут о личном опыте применения, а так же приведут исчерпывающие примеры использования компонентной модели.&lt;br /&gt;&lt;br /&gt;Доклады непосредственно связаны с новой версией объектно-ориентированного сервера приложений Zope3 (в частности zope.interface), а так же с фреймворком для GUI-приложений Ocean, который разработал наш докладчик Андрей Светлов. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Вход бесплатный&lt;/strong&gt;, как всегда =)&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/exception_05/&quot;&gt;&lt;strong&gt;Подробнее...&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/exception_05/register.html&quot;&gt;&lt;strong&gt;Регистрация...&lt;/strong&gt;&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=408118720&amp;r=248003606&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/13087.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/12975.html</guid>
  <pubDate>Fri, 04 May 2007 09:34:29 GMT</pubDate>
  <title>С чем едят GotAPI</title>
  <link>http://mkdir.livejournal.com/12975.html</link>
  <description>Всем привет!&lt;br /&gt;&lt;br /&gt;Хочу поделиться ссылкой на очень полезный и крайне удобный справочный сервис, который я использую по тысячу раз на день.&lt;br /&gt;&lt;br /&gt;Встречайте, &lt;a href=&quot;http://www.gotapi.com&quot; title=&quot;Открыть в этом окне&quot;&gt;&lt;strong&gt;gotAPI.com&lt;/strong&gt;&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Что же такое gotAPI?&lt;/strong&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href=&quot;http://www.gotapi.com&quot; title=&quot;Открыть в этом окне&quot;&gt;gotAPI.com&lt;/a&gt; - quick developer reference for CSS, HTML, JavaScript, PHP, AJAX, SQL and more&lt;/blockquote&gt;&lt;br /&gt;&lt;strong&gt;Чем является gotAPI лично для меня:&lt;/strong&gt;&lt;br /&gt;&lt;b&gt;1.&lt;/b&gt; Быстрый и очень удобный поиск нужной функции или метода для &lt;a href=&quot;http://ru.wikipedia.org/wiki/JavaScript&quot; title=&quot;Открыть в этом окне&quot;&gt;JavaScript&lt;/a&gt; или &lt;a href=&quot;http://ru.wikipedia.org/wiki/Python&quot; title=&quot;Открыть в этом окне&quot;&gt;Python&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;2.&lt;/b&gt; Мгновенное получение необходимой информации о свойстве &lt;a href=&quot;http://ru.wikipedia.org/wiki/CSS&quot; title=&quot;Открыть в этом окне&quot;&gt;CSS&lt;/a&gt; или о &lt;a href=&quot;http://ru.wikipedia.org/wiki/SQL&quot; title=&quot;Открыть в этом окне&quot;&gt;SQL&lt;/a&gt;-команде для &lt;a href=&quot;http://ru.wikipedia.org/wiki/PostgreSQL&quot; title=&quot;Открыть в этом окне&quot;&gt;PostgreSQL&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;3.&lt;/b&gt; gotAPI позволяет мне &lt;strong&gt;вспоминать&lt;/strong&gt; названия функций, медотов, свойств, команд и т.д., которые я вдруг забыл.&lt;br /&gt;&lt;b&gt;4.&lt;/b&gt; Удобный интерфейс с добавлением/удалением закладок.&lt;br /&gt;&lt;b&gt;5.&lt;/b&gt; gotAPI подсказывает ключевые слова поиска пока я набираю то, что мне нужно.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;В чем идея gotAPI?&lt;/strong&gt;&lt;br /&gt;gotAPI знает много онлайновых мануалов и осуществляет быстрый поиск по ним. Это, как бы, отправная точка для поиска нужной документации. gotAPI избавляет программиста от хождения по различным докам, которые находятся на разных ресурсах.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Что &quot;знает&quot; gotAPI?&lt;/strong&gt;&lt;br /&gt;HTML, CSS, CSS2, JavaScript/DOM, Google GWT, Prototype.js, jQuery 1.0.3, Yahoo! UI, XML, XSL, XPath, C, C++, PHP, Ruby, RoR, Python, Perl, ActionScript, Groovy, Drupal CMS, Flickr API, Prolog, MySQL, PostgreSQL, Oracle, Java, J2SE, J2EE, Struts, Hibernate, Spring, JUnit, J2ME, Apache Ant... и многое другое.&lt;br /&gt;&lt;br /&gt;Лично я храню gotAPI на панели закладок своего браузера, чего и вам советую :-)&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=288314017&amp;r=54752691&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/12975.html</comments>
  <category>полезное</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/12705.html</guid>
  <pubDate>Wed, 04 Apr 2007 23:11:37 GMT</pubDate>
  <title>PHP: светлые воспоминания</title>
  <link>http://mkdir.livejournal.com/12705.html</link>
  <description>&lt;span class=&apos;ljuser&apos; lj:user=&apos;mourk&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://mourk.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://p-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://mourk.livejournal.com/&apos;&gt;&lt;b&gt;mourk&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: Кстати, после джавы я не могу понять, почему в PHP нету команды gc()?&lt;br /&gt;&lt;span class=&apos;ljuser&apos; lj:user=&apos;mkdir&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://mkdir.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://p-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://mkdir.livejournal.com/&apos;&gt;&lt;b&gt;mkdir&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: Потому что автоматическая отчистка мусора есть.&lt;br /&gt;&lt;b style=&quot;color:red&quot;&gt;Zurg:&lt;/b&gt; Так в джаве, ведь, тоже есть.&lt;br /&gt;&lt;b style=&quot;color:blue&quot;&gt;Mkdir:&lt;/b&gt; Зато PHP - это простой, удобный и чисто объектно-ориентированный язык.&lt;br /&gt;&lt;b style=&quot;color:blue&quot;&gt;Mkdir:&lt;/b&gt; PHP очень гибок!&lt;br /&gt;&lt;b style=&quot;color:red&quot;&gt;Zurg:&lt;/b&gt; И красив.&lt;br /&gt;&lt;b style=&quot;color:blue&quot;&gt;Mkdir:&lt;/b&gt; Согласен. Читаемость кода очень высока.&lt;br /&gt;&lt;b style=&quot;color:blue&quot;&gt;Mkdir:&lt;/b&gt; Выше чем у перла.&lt;br /&gt;&lt;b style=&quot;color:red&quot;&gt;Zurg:&lt;/b&gt; А масштабирование в PHP -- просто сказка, куда лучше чем в Pascal!&lt;br /&gt;&lt;b style=&quot;color:blue&quot;&gt;Mkdir:&lt;/b&gt; И лучше поддерживается, нежели разные диалекты языка Basic.&lt;br /&gt;&lt;b style=&quot;color:red&quot;&gt;Zurg:&lt;/b&gt; За что очень люблю PHP, так это за четкое следование его создателями простых и удобных code conventions!&lt;br /&gt;&lt;b style=&quot;color:blue&quot;&gt;Mkdir:&lt;/b&gt; Пожалуй, в этом самое главное преимущество этого языка. А еще PHP хорошо справляется с задачами, которые я решаю с его помощью. Ведь не в языке дело, а в том, насколько он успешно решает мои задачи. Поэтому мой выбор - PHP!&lt;br /&gt;&lt;b style=&quot;color:red&quot;&gt;Zurg:&lt;/b&gt; Нельзя не упомянуть профессионализм сообщества PHP-разработчиков, да, заработкам этих ребят можно позавидовать.&lt;br /&gt;&lt;b style=&quot;color:red&quot;&gt;Zurg:&lt;/b&gt; Типичный код на PHP имеет хорошую стройную архитектуру. В этом можно убедиться, зайдя в любую библиотеку бесплатных скриптов.&lt;br /&gt;&lt;b style=&quot;color:blue&quot;&gt;Mkdir:&lt;/b&gt; Да, PHP действительно имеет богатейшую базу кода -- сотни абстрктных классов для работы с MySQL, тысячи высококлассных CMS-систем!&lt;br /&gt;&lt;b style=&quot;color:red&quot;&gt;Zurg:&lt;/b&gt; Кроме того, PHP-программисты всегда обрабатывают ошибки, а не выводят стектрейс пользователям. А так же используют мощную базу MySQL, даже не представляю более удобной СУБД!&lt;br /&gt;&lt;b style=&quot;color:blue&quot;&gt;Mkdir:&lt;/b&gt; Согласен с тобою по всем пунктам.&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=251707792&amp;r=74155742&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/12705.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/12526.html</guid>
  <pubDate>Wed, 21 Feb 2007 11:54:38 GMT</pubDate>
  <title>Активный форум для питонистов.</title>
  <link>http://mkdir.livejournal.com/12526.html</link>
  <description>Всем привет.&lt;br /&gt;&lt;br /&gt;Хочу рассказать об одном из самых активных русскоязычных форумов (или даже о самом активном форуме) по языку Python.&lt;br /&gt;Это форум на сайте python.com.ua: &lt;a href=&quot;http://python.com.ua/forum/&quot;&gt;http://python.com.ua/forum/&lt;/a&gt;&lt;br /&gt;Основной контингент форума по странам: Россия, Украина, Белоруссия и Казахстан.&lt;br /&gt;&lt;br /&gt;Размеры и активность форума растут на удивление быстро.&lt;br /&gt;Темы форума охватывают практически все области применения python.&lt;br /&gt;Форумчане демонстрируют дружелюбность и соучастие. Вместе решают проблемы, вместе переводят документации и вместе радуются этому замечательному языку программирования =)&lt;br /&gt;&lt;br /&gt;Сразу хочу оговориться, что я не являюсь заинтересованной стороною и пишу пост не для пиара, а просто в качестве рекомендации хорошего и правильного ресурса.&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=5523632&amp;r=508388814&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/12526.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/12126.html</guid>
  <pubDate>Wed, 31 Jan 2007 12:58:27 GMT</pubDate>
  <title>SSH через модуль Pexpect</title>
  <link>http://mkdir.livejournal.com/12126.html</link>
  <description>На блоге &lt;a href=&quot;http://www.palovick.com/&quot;&gt;Douglas Palovick&lt;/a&gt;&apos;а нашёл запись в блоге  &quot;&lt;a href=&quot;http://www.palovick.com/code/python/python-ssh-client.php&quot;&gt;Python SSH SCP and Expect Example Script&lt;/a&gt;&quot;, в которой рассказывается о простом способе использования SSH и SCP без SSH-ключей при помощи модуля &lt;a href=&quot;http://pexpect.sourceforge.net/&quot;&gt;Pexpect&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.palovick.com/code/python/python-ssh-client.php&quot;&gt;читать ...&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=645825093&amp;r=918221344&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/12126.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/11970.html</guid>
  <pubDate>Wed, 31 Jan 2007 09:47:52 GMT</pubDate>
  <title>Exception #03</title>
  <link>http://mkdir.livejournal.com/11970.html</link>
  <description>28 января 2007 года - прошёл очередной семинар по языку Python в Киеве - &quot;&lt;a href=&quot;http://exception.org.ua/exception_03/photos/&quot;&gt;Exception #03&quot;&lt;/a&gt;.&lt;br /&gt;Семинар проводился в конференц-зале гостиницы &quot;Санкт-Петербург&quot; (бул. Т. Шевченко 4) и длился 3 часа.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/exception_03/photos/IMG_0213.jpg&quot;&gt;Сергей&lt;/a&gt; &lt;a href=&quot;http://exception.org.ua/exception_03/photos/IMG_0182.jpg&quot;&gt;Щетинин&lt;/a&gt; рассказал о метапрограммировании в Python на примере декораторов (прим. декораторы в Python аналогичны annotations в Java). &lt;a href=&quot;http://exception.org.ua/exception_03/photos/IMG_0227.jpg&quot;&gt;Олег&lt;/a&gt; &lt;a href=&quot;http://exception.org.ua/exception_03/photos/IMG_0215.jpg&quot;&gt;Нога&lt;/a&gt; портировал Traits на Python и поведал о том, как можно решить некоторые проблемы множественного наследования.&lt;br /&gt;Доклады были интересны и познавательны.&lt;br /&gt;&lt;br /&gt;В конце семинара провели &lt;a href=&quot;http://exception.org.ua/exception_03/photos/IMG_0273.jpg&quot;&gt;дискуссию&lt;/a&gt;. Участники семинара разделились на два лагеря: те кто поддерживает Traits и те, кто против него =)&lt;br /&gt;Были приведены интересные доводы &quot;за&quot; и &quot;против&quot; Traits и множественного наследования вообще.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/exception_03/photos/IMG_0214.jpg&quot;&gt;Уютная&lt;/a&gt; &lt;a href=&quot;http://exception.org.ua/exception_03/photos/IMG_0186.jpg&quot;&gt;атмосфера&lt;/a&gt; семинара способствовала плодотворному общению и обмену опытом.&lt;br /&gt;Кто приходил, оставьте, пожалуйста, свои отзывы )&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/exception_03/photos/&quot;&gt;Фотографии&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=156675703&amp;r=376313893&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/11970.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/11620.html</guid>
  <pubDate>Wed, 31 Jan 2007 09:25:12 GMT</pubDate>
  <title>Python sidebar</title>
  <link>http://mkdir.livejournal.com/11620.html</link>
  <description>&lt;a href=&quot;http://www.edgewall.org/python-sidebar/&quot;&gt;&lt;strong&gt;Python sidebar&lt;/strong&gt;&lt;/a&gt; - это &quot;плагин&quot; для браузера &lt;a href=&quot;http://www.mozilla.com/en-US/firefox/&quot;&gt;FireFox&lt;/a&gt;, который позволяет получать быстрый и более удобный доступ к документации по языку &lt;a href=&quot;http://www.python.org/&quot;&gt;Python&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/data/python-sidebar.jpg&quot; title=&quot;Открыть в этом окне&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/python-sidebar_.jpg&quot; width=&quot;100&quot; height=&quot;80&quot; border=&quot;0&quot; alt=&quot;python-sidebar screenshot&quot; /&gt;&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=602142703&amp;r=449730521&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/11620.html</comments>
  <category>firefox</category>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/11302.html</guid>
  <pubDate>Tue, 21 Nov 2006 09:46:49 GMT</pubDate>
  <title>Семинар по языку Python в Киеве</title>
  <link>http://mkdir.livejournal.com/11302.html</link>
  <description>&lt;a href=&quot;http://exception.org.ua/&quot;&gt;&lt;img src=&quot;http://exception.org.ua/img/logo.png&quot; width=&quot;265&quot; height=&quot;136&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;30 ноября 2006&lt;/b&gt; - в Киеве состоится очередной семинар по языку программирования Python - &quot;&lt;a href=&quot;http://exception.org.ua/exception_02/&quot;&gt;Exception #02&lt;/a&gt;&quot;.&lt;br /&gt;&lt;br /&gt;Главной темой второго семинара будет тема использования Python совместно с другими языками программирования. Докладчики поведают об особенностях взаимодействия Python с языками &lt;b&gt;C&lt;/b&gt; и &lt;b&gt;C++&lt;/b&gt; на примере применения таких инструментов как FFI, SWIG, Boost::Python, SIP, Ctypes, и приведут множество примеров где Python хорошо зарекомендовал себя как вспомогательный язык, облегчающий процесс разработки на C/C++.&lt;br /&gt;&lt;br /&gt;Семинар &quot;&lt;b&gt;Exception #02&lt;/b&gt;&quot; будет интересен как системным программистам, так и разработчикам прикладных программ, которые нуждаются в расширении функциональности за счёт внедрения скриптового языка. Так же, Python отлично подходит в качестве скриптового языка для прототипирования и умелое применение его с этой целью выведет процесс разработки вашего программного обеспечения на новый качественный уровень.&lt;br /&gt;&lt;br /&gt;На этом преимущества данного мероприятия не исчерпываются. На семинаре у вас есть шанс обрести единомышленников, найти друзей, задать интересующие вопросы, обменяться опытом, а так же встретить потенциальных партнёров по работе =)&lt;br /&gt;&lt;br /&gt;Всех заинтересовавшихся просим к регистрации: &lt;a href=&quot;http://exception.org.ua/exception_02/register.html&quot;&gt;http://exception.org.ua/exception_02/register.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S.: Главным организатором семинара по-прежнему остаюсь я.&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=873340470&amp;r=937399128&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/11302.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/11232.html</guid>
  <pubDate>Wed, 15 Nov 2006 08:54:48 GMT</pubDate>
  <title>Как я живу под Ubuntu GNU/Linux</title>
  <link>http://mkdir.livejournal.com/11232.html</link>
  <description>Решил поделиться с общественностью своими скриншотами и заодно рассказать о софте, который использую.&lt;br /&gt;&lt;br /&gt;Пожалуй, начну с десктопа. У меня стоит &lt;a href=&quot;http://ru.wikipedia.org/wiki/Xgl&quot;&gt;XGL&lt;/a&gt; + &lt;a href=&quot;http://www.beryl-project.org/&quot;&gt;Beryl&lt;/a&gt;.&lt;br /&gt;Замечательная штука! &quot;Плавающие&quot; резиновые окна, десктопы, располагающиеся на кубе, который можно вращать мышью, куча различных эффектов сворачивания/разворачивания окон (например, при сворачивании, окно сжимается и стягивается вниз или воспламеняется), Zoom десктопа и многое многое другое.&lt;br /&gt;&lt;br /&gt;Что такое XGL + Beryl и с чем его едят можно увидеть, поискав в &lt;a href=&quot;http://www.youtube.com/&quot;&gt;YouTube&lt;/a&gt; и &lt;a href=&quot;http://video.google.com/&quot;&gt;Google Video&lt;/a&gt;.&lt;br /&gt;Вот несколько ссылочек для начала: &lt;a href=&quot;http://video.google.com/videoplay?docid=4471114863140451531&amp;amp;q=XGL+beryl&quot;&gt;раз&lt;/a&gt;, &lt;a href=&quot;http://video.google.com/videoplay?docid=8140106088360388627&amp;amp;q=XGL+beryl&quot;&gt;два&lt;/a&gt;, &lt;a href=&quot;http://www.youtube.com/watch?v=8hVyoLhMcyA&amp;amp;mode=related&amp;amp;search=&quot;&gt;три&lt;/a&gt;.&lt;br /&gt;Возможно, когда-нибудь и своё видео сделаю =)&lt;br /&gt;&lt;br /&gt;Поехали дальше. Первые два окна демонстрируют прозрачность и обрамление окон.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/data/XGL1_big.jpg&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/XGL1.jpg&quot; width=&quot;188&quot; height=&quot;150&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://exception.org.ua/data/XGL2_big.jpg&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/XGL2.jpg&quot; width=&quot;188&quot; height=&quot;150&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;На следующем скриншоте можно увидеть как работает Internet Explorer 6.0. Кстати, у меня одновременно стоят IE5.0, IE5.5 и IE6.0 :-)&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/data/XGL3_big.jpg&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/XGL3.jpg&quot; width=&quot;188&quot; height=&quot;150&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Вот так выглядит мой &lt;a href=&quot;http://www.mozilla.com/en-US/firefox/&quot;&gt;FireFox 2.0&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/data/XGL4_big.jpg&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/XGL4.jpg&quot; width=&quot;188&quot; height=&quot;150&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Тут &lt;a href=&quot;http://www.eclipse.org/&quot;&gt;Eclipse&lt;/a&gt; с плагином &lt;a href=&quot;http://pydev.sourceforge.net/&quot;&gt;PyDev&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/data/XGL5_big.jpg&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/XGL5.jpg&quot; width=&quot;188&quot; height=&quot;150&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;А эти два скриншота демонстрируют работу словаря &lt;a href=&quot;http://stardict.sourceforge.net/&quot;&gt;StarDict&lt;/a&gt;.&lt;br /&gt;Кстати, он мне больше нравится чем Lingvo: удобнее интерфейс + больше словарей.&lt;br /&gt;Чтобы получить перевод слова достаточно его выделить. Ну разве это не замечательно?! =)&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/data/XGL6_big.jpg&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/XGL6.jpg&quot; width=&quot;188&quot; height=&quot;150&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://exception.org.ua/data/XGL7_big.jpg&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/XGL7.jpg&quot; width=&quot;188&quot; height=&quot;150&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Так и живём. Кстати, пост посвящается выходу новой Windows Vista =)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; В комментах мне открыли глаза на криво настроенные шрифты.&lt;br /&gt;Я исправляюсь:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/data/fonts_big.jpg&quot;&gt;&lt;img src=&quot;http://exception.org.ua/data/fonts.jpg&quot; width=&quot;188&quot; height=&quot;150&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=645019433&amp;r=578562227&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/11232.html</comments>
  <category>linux</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/10855.html</guid>
  <pubDate>Sun, 05 Nov 2006 08:55:41 GMT</pubDate>
  <title>Семинар по python прошёл успешно!</title>
  <link>http://mkdir.livejournal.com/10855.html</link>
  <description>&lt;a href=&quot;http://www.python.org&quot;&gt;&lt;img src=&quot;http://python.org/images/python-logo.gif&quot; width=&quot;211&quot; height=&quot;71&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Всем привет!&lt;br /&gt;В своём &lt;a href=&quot;http://mkdir.livejournal.com/10595.html&quot;&gt;предыдущем посте&lt;/a&gt; я писал о том, что намереваюсь провести семинар по языку программирования Python в Киеве - &quot;&lt;a href=&quot;http://exception.org.ua/&quot;&gt;Exception&lt;/a&gt;&quot;.&lt;br /&gt;&lt;br /&gt;Рад сообщить, что мероприятие прошло очень удачно и все участники остались довольны.&lt;br /&gt;Докладчики хорошо подготовились и интересно рассказали, за что им отдельное спасибо.&lt;br /&gt;&lt;br /&gt;Фотографии, материалы и видео с моей взволнованной речью можно найти на сайте: &lt;a href=&quot;http://exception.org.ua/&quot;&gt;http://exception.org.ua/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;P.S.: Единственный недочёт - это отсутствие аудио.&lt;br /&gt;Я взял диктофон, но подвели аккумуляторы в самый ответственный момент.&lt;br /&gt;Аккумуляторы заряжались непосредственно перед семинаром. Видимо, сдохли.&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=545826936&amp;r=840884857&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/10855.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/10595.html</guid>
  <pubDate>Mon, 16 Oct 2006 14:50:19 GMT</pubDate>
  <title>Семинар по языку Python в Киеве</title>
  <link>http://mkdir.livejournal.com/10595.html</link>
  <description>&lt;a href=&quot;http://exception.org.ua/&quot;&gt;&lt;img src=&quot;http://exception.org.ua/img/logo.png&quot; width=&quot;265&quot; height=&quot;136&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Привет, друзья!&lt;br /&gt;Хочу немного похвастаться и заодно попиарить себя и мероприятие, организатором которого являюсь =)&lt;br /&gt;&lt;b&gt;24 октября&lt;/b&gt; в Киеве пройдёт первый в Украине семинар по языку &lt;a href=&quot;http://www.python.org&quot;&gt;Python&lt;/a&gt;. Название: &quot;&lt;a href=&quot;http://exception.org.ua/&quot;&gt;Exception #01&lt;/a&gt;&quot;.&lt;br /&gt;&lt;br /&gt;Надобность в серьёзном собрании была осознана в следствии проведения мною четырёх сходок питонистов.&lt;br /&gt;Сходки показали что в Киеве достаточно много людей, интересующихся питоном и зарабатывающих питоном на жизнь.&lt;br /&gt;Поэтому нужно создавать и развивать комьюнити! Популяризировать язык, активно делиться опытом в виде докладов и дискуссий.&lt;br /&gt;&lt;br /&gt;На &lt;a href=&quot;http://exception.org.ua/&quot;&gt;Execption #01&lt;/a&gt; будут представлены два доклада, основной темой которых является веб-разработка: веб-фреймворки, их скорость, достоинства/недостатки, много будет сказано о &lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt;, докладчики уделят внимание &lt;a href=&quot;http://www.fastcgi.com/&quot;&gt;FastCGI&lt;/a&gt;, &lt;a href=&quot;http://wsgi.org/wsgi&quot;&gt;WSGI&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;agile development&lt;/a&gt;, &lt;a href=&quot;http://peak.telecommunity.com/DevCenter/setuptools&quot;&gt;setuptools&lt;/a&gt;, &lt;a href=&quot;http://www.modpython.org/&quot;&gt;mod_python&lt;/a&gt;, будет рассказано о скорости интерпретатора и о работе с памятью.&lt;br /&gt;&lt;br /&gt;Так же, после докладов и уютного кофе-брейка, намечается дискуссия на тему &quot;Так ли необходим Python в веб-разработке?&quot; =) Павел Шевело берёт на себя роль противника веб-разработки на python&apos;e и будет защищать сторону &lt;a href=&quot;http://www.php.net/&quot;&gt;PHP&lt;/a&gt; и &lt;a href=&quot;http://www.perl.com&quot;&gt;Perl&lt;/a&gt;, а остальные участники должны будут отстоять свою точку зрения =)&lt;br /&gt;&lt;br /&gt;Подведя итог, скажу, что данное мероприятие обещает быть очень интересным и полезным.&lt;br /&gt;Желающие прийти должны зарегистрироваться в обязательном порядке.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color:red&quot;&gt;Внимание!&lt;/span&gt; Вход бесплатный.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://exception.org.ua/&quot;&gt;Страничка мероприятия с подробной информацией&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;img src=&quot;http://exception.org.ua/exception_01/photo1.jpg&quot; width=&quot;456&quot; height=&quot;360&quot; alt=&quot;photo 1&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://exception.org.ua/exception_01/photo2.jpg&quot; width=&quot;453&quot; height=&quot;360&quot; alt=&quot;photo 2&quot; /&gt; &lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://exception.org.ua/exception_01/photo3.jpg&quot; width=&quot;454&quot; height=&quot;361&quot; alt=&quot;photo 3&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://exception.org.ua/exception_01/photo4.jpg&quot; width=&quot;453&quot; height=&quot;360&quot; alt=&quot;photo 4&quot; /&gt;&lt;br /&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=879003639&amp;r=709167394&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/10595.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/10393.html</guid>
  <pubDate>Tue, 15 Aug 2006 08:27:29 GMT</pubDate>
  <title>Emacs. Больше чем редактор.</title>
  <link>http://mkdir.livejournal.com/10393.html</link>
  <description>Пожалуй, &lt;b&gt;одними из самых лучших редакторов в мире являются &lt;a href=&quot;http://www.vim.org/&quot;&gt;Vim&lt;/a&gt; и &lt;a href=&quot;http://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;Какой из них лучше, рассуждать не буду. И тот и другой являются мощными инструментами для редактирования кода. И тот и другой - лучшее продолжение рук для хорошего программиста =)&lt;br /&gt;&lt;br /&gt;Но всё вышесказанное не является очевидным для коренных пользователей MS Windows, которые привыкли к стандартным интерфейсам и стандартным shortcut&apos;ам виндовых редакторов. Доказывать долго не нужно: посадите любого приверженца Windows за Emacs и дайте ему поредактировать код. Ровно через 3 минуты он забудет о нём как о кошмарном сне =) Результатом будет негативное впечатление и недоумение &quot;как этим вообще можно пользоваться?&quot;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Так уж исторически сложилось, что я сам являюсь пользователем Windows&lt;/b&gt; =) И, поскольку меня периодически навещает патриотическое opensource-настроение, я снова и снова совершаю попытки перейти на Vim. Прохожу туториал, настраиваю подсветку кода, некоторое время редактирую в нём код, пытаясь не обращать внимание на неудобства которые связанны с непривычкой, и всё напрасно. Инерция вновь и вновь возвращает меня к виндовым редакторам, как наркомана к наркотикам =)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Несколько раз пробовал Emacs&lt;/b&gt;. Впрочем, &quot;пробовал&quot; звучит несколько не точно. Правильнее сказать - &quot;запускал и тут же закрывал&quot;. А всё из-за того, что привык к стандартным интерфейсам винды, которые позволяют без особых усилий разобраться в неизвестном софте. Но в случае с Emacs и Vim всё по-другому - сперва нужно было потратить некоторое время на ознакомление с интерфейсом и возможностями, которые не доступны интуитивно, а уж потом пользоваться. &quot;Время терять не хотелось&quot;, - думал я, оправдывая свою лень =)&lt;br /&gt;&lt;br /&gt;В результате, долгое время я пребывал во тьме невежества =) Периодически искал нормальные редакторы под windows, менял их, искал снова. В каждом обнаруживались свои недостатки. В одних они были незначительны, в других не хватало возможностей, третьи тормозили. В последнее время долго пользовался &lt;a href=&quot;http://scite.ruteam.ru/&quot;&gt;&lt;b&gt;SciTE&lt;/b&gt;&lt;/a&gt;. Хороший редактор, но хотелось еще большего.&lt;br /&gt;&lt;br /&gt;И вот, в один прекрасный момент, я увидел как &lt;span class=&apos;ljuser&apos; lj:user=&apos;dan_kom&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://dan-kom.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://p-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://dan-kom.livejournal.com/&apos;&gt;&lt;b&gt;dan_kom&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; использует win-версию Emacs для редактирования исходников на питоне. Тогда я задал Диме очевидный вопрос: &quot;&lt;b&gt;А почему именно Emacs?&lt;/b&gt;&quot; и получил ответ: &quot;Потому что других редакторов я не знаю&quot;. Сперва я подумал, что он действительно не знает других редакторов, но, как оказалось, Дима в своё время перепробовал очень много различных вариантов и остановился на Emacs&apos;е как на лучшем.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Когда я увидел Emacs в действии, то снова был вдохновлён&lt;/b&gt;! В тот момент я твёрдо решил &quot;пересесть&quot; на Emacs, понимая что придётся некоторое время преодолевать инерцию windows-like редакторов, непривычный подход к shortcut&apos;ам и нежелание читать документацию ;-) И я сделал это. Теперь в моих руках хороший инструмент, которым я доволен и которым я восхищаюсь.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Итоги:&lt;/b&gt; Я не агитирую использовать Emacs или Vim. Я просто хочу сказать, что не использовать первый или второй - это большое заблуждение =)&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;h3&gt;Скриншотичег&lt;/h3&gt;&lt;img src=&quot;http://flexx.kiev.ua/data/emacs_screen.gif&quot; width=&quot;680&quot; height=&quot;734&quot; alt=&quot;Emacs in action&quot;&gt;&lt;br /&gt;&lt;br /&gt;Вот так я использую Emacs. На скриншоте видно, что основное окно разбито на три части:&lt;ul style=&quot;margin-top:0;&quot;&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;В первой части&lt;/b&gt; у меня запущен интерпретатор питона, в котором я тут же тестирую некоторые участки кода.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Во второй части&lt;/b&gt; окна я редактирую самое начало файла где находится импортирование модулей. Это удобно, так как не требуется каждый раз подниматься в самое начало файла чтобы проимпортировать еще один модуль.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;В третьей части&lt;/b&gt; я непосредственно редактирую код.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;По-моему удобно. Итак, мой выбор - Emacs.&lt;br /&gt;Спасибо за внимание.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;+ Bonus:&lt;/b&gt; полезная ссылка по Emacs: &lt;a href=&quot;http://www.emacswiki.org/cgi-bin/wiki/SiteMap&quot; title=&quot;EmacsWiki&quot;&gt;EmacsWiki&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=52182366&amp;r=843458009&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/10393.html</comments>
  <category>emacs</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/10214.html</guid>
  <pubDate>Fri, 11 Aug 2006 12:54:14 GMT</pubDate>
  <title>New version of pycolorizer</title>
  <link>http://mkdir.livejournal.com/10214.html</link>
  <description>&lt;b&gt;Новость:&lt;/b&gt; появился на свет &lt;a href=&quot;http://mkdir.livejournal.com/9377.html&quot;&gt;pycolorizer&lt;/a&gt; v0.3b&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Изменения:&lt;/b&gt;&lt;br /&gt;* Bugfix: не открывались файлы, если в пути были русские буквы.&lt;br /&gt;* Bugfix: колорайзер не подсвечивал ключевое слово &apos;elif&apos;.&lt;br /&gt;* Bugfix: файл lastpath.dat создавался в директории из которой запускалось приложение. Теперь в директории с запускным файлом.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Downloads:&lt;/b&gt;&lt;br /&gt;* &lt;a href=&quot;http://flexx.kiev.ua/data/pycolorizer/pycolorizer_0.3b.exe&quot;&gt;&lt;b&gt;Windows installer&lt;/b&gt;&lt;/a&gt; [2,85Mb]&lt;br /&gt;* &lt;a href=&quot;http://flexx.kiev.ua/data/pycolorizer/pycolorizer_0.3b_src.zip&quot;&gt;&lt;b&gt;Sources&lt;/b&gt;&lt;/a&gt; [9,66Kb]&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=340850607&amp;r=456268589&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/10214.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/9930.html</guid>
  <pubDate>Wed, 02 Aug 2006 10:00:56 GMT</pubDate>
  <title>GUI for PyColorizer 0.2b</title>
  <link>http://mkdir.livejournal.com/9930.html</link>
  <description>Привет!&lt;br /&gt;Продолжаю тему &lt;a href=&quot;http://mkdir.livejournal.com/9377.html&quot;&gt;расцветки питоновского синтаксиса&lt;/a&gt; для постинга в ЖЖ.&lt;br /&gt;Колорайзер работает замечательно, но из командной строки юзать его несколько неудобно. Поэтому я дописал GUI на &lt;a href=&quot;http://www.wxpython.org/&quot;&gt;wxPython&lt;/a&gt;&apos;e и сделал инсталлятор под Windows.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Downloads:&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;http://flexx.kiev.ua/data/pycolorizer/pycolorizer_setup.exe&quot;&gt;&lt;b&gt;Инсталлятор под Win32&lt;/b&gt;&lt;/a&gt;  обновлённая версия [2,82Mb]&lt;br /&gt;&lt;a href=&quot;http://flexx.kiev.ua/data/pycolorizer/pycolorizer_0.2b_src.zip&quot;&gt;&lt;b&gt;source of version 0.2b&lt;/b&gt;&lt;/a&gt; [2,86Kb]&lt;br /&gt;&lt;br /&gt;P.S.: Инсталлятор не требует питона.&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; Благодаря &lt;span class=&apos;ljuser&apos; lj:user=&apos;lexasoft&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://lexasoft.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://p-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://lexasoft.livejournal.com/&apos;&gt;&lt;b&gt;lexasoft&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; вышла версия 0.2b. Теперь колорайзер умеет &quot;на лету&quot; разукрашивать исходники из Clipboard&apos;a.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;+Bonus:&lt;/b&gt; Самая свежая версия: &lt;a href=&quot;http://mkdir.livejournal.com/10214.html&quot;&gt;http://mkdir.livejournal.com/10214.html&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=62247636&amp;r=600004561&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/9930.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/9543.html</guid>
  <pubDate>Mon, 31 Jul 2006 12:11:52 GMT</pubDate>
  <title>parse_url</title>
  <link>http://mkdir.livejournal.com/9543.html</link>
  <description>Написал полный аналог PHP-шной функции &lt;a href=&quot;http://php.net/parse_url&quot;&gt;parse_url&lt;/a&gt; на питоне.&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Код:&lt;/b&gt;&lt;br /&gt;&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:16px&quot;&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; re
&lt;b style=&quot;color:#00007F&quot;&gt;from&lt;/b&gt; urllib &lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; unquote


&lt;b style=&quot;color:#00007F&quot;&gt;def&lt;/b&gt; &lt;b style=&quot;color:#007F7F&quot;&gt;parseurl&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;url&lt;b&gt;)&lt;/b&gt;:
    match = re.findall&lt;b&gt;(
        &lt;/b&gt;r&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;^([a-z0-9]+)://(([^:]+)(:[^@]*)?@)?([^/:]+?)(:[0-9]+)?(/[^?#]+)?(\?[^#]+)?(#.*)?$&apos;&lt;/span&gt;,
         url&lt;b&gt;)&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; &lt;b style=&quot;color:#00007F&quot;&gt;not&lt;/b&gt; match:
        &lt;b style=&quot;color:#00007F&quot;&gt;return&lt;/b&gt; False
    res = &lt;b&gt;{&lt;/b&gt;&lt;b&gt;}&lt;/b&gt;
    match = match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;
    res&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;scheme&apos;&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; = match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;
    res&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;host&apos;&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;   = match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;4&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;2&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;:
        res&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;user&apos;&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; = unquote&lt;b&gt;(&lt;/b&gt;match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;2&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;3&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;:
        res&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;pass&apos;&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; = unquote&lt;b&gt;(&lt;/b&gt;match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;3&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;1&lt;/span&gt;:&lt;b&gt;]&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;5&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;:
        res&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;port&apos;&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; = match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;5&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;1&lt;/span&gt;:&lt;b&gt;]&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;6&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; and match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;6&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; != &lt;span style=&quot;color:#7F007F&quot;&gt;&quot;/&quot;&lt;/span&gt;:
        res&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;path&apos;&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; = unquote&lt;b&gt;(&lt;/b&gt;match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;6&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;7&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;:
        res&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;query&apos;&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; = unquote&lt;b&gt;(&lt;/b&gt;match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;7&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;1&lt;/span&gt;:&lt;b&gt;]&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;8&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;:
        res&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&apos;fragment&apos;&lt;/span&gt;&lt;b&gt;]&lt;/b&gt; = unquote&lt;b&gt;(&lt;/b&gt;match&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;8&lt;/span&gt;&lt;b&gt;]&lt;/b&gt;&lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;1&lt;/span&gt;:&lt;b&gt;]&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;return&lt;/b&gt; res
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Демо:&lt;/b&gt;&lt;br /&gt;&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:16px&quot;&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;from&lt;/b&gt; parseurl &lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; parseurl

url = &lt;span style=&quot;color:#7F007F&quot;&gt;&quot;http://username:password@hostname/path?arg=value#anchor&quot;&lt;/span&gt;
res = parseurl&lt;b&gt;(&lt;/b&gt;url&lt;b&gt;)&lt;/b&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;for&lt;/b&gt; k, v &lt;b style=&quot;color:#00007F&quot;&gt;in&lt;/b&gt; res.items&lt;b&gt;(&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;:
    &lt;b style=&quot;color:#00007F&quot;&gt;print&lt;/b&gt; k, &lt;span style=&quot;color:#7F007F&quot;&gt;&quot;=&amp;gt;&quot;&lt;/span&gt;, v
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Результаты:&lt;/b&gt;&lt;br /&gt;&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:16px&quot;&gt;
fragment =&amp;gt; anchor
pass =&amp;gt; password
host =&amp;gt; hostname
user =&amp;gt; username
query =&amp;gt; arg=value
path =&amp;gt; /path
scheme =&amp;gt; http
&lt;/pre&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=969136933&amp;r=373213454&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/9543.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/9377.html</guid>
  <pubDate>Sun, 30 Jul 2006 04:29:34 GMT</pubDate>
  <title>PyColorizer v0.1b - подсветка питоновских исходников.</title>
  <link>http://mkdir.livejournal.com/9377.html</link>
  <description>Привет!&lt;br /&gt;&lt;br /&gt;В комментариях меня часто спрашивают чем я делаю &lt;b&gt;расцветку питоновских исходников&lt;/b&gt; в своих постах. Реальность заключается в том, что делаю я это вручную при помощи поиска/замены по регулярным выражениям в текстовом редакторе.&lt;br /&gt;&lt;br /&gt;Но любому терпению рано или поздно наступает конец. Два или три раза можно позволить себе поиграться таким образом, после чего охота отпадает напрочь =)&lt;br /&gt;&lt;br /&gt;Итак, ленивый &lt;span class=&apos;ljuser&apos; lj:user=&apos;mkdir&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://mkdir.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://p-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://mkdir.livejournal.com/&apos;&gt;&lt;b&gt;mkdir&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; решил написать колорайзер питоновских исходников, предназначенный для вставки в ЖЖ-посты. На самом деле, я изобрёл велосипед. В природе уже существуют готовые разукрашиватели, такие как py2html. Но исходный код моего &quot;велосипеда&quot; гораздо меньше, не требует внешних библиотек и полностью отвечает моим нуждам =)&lt;br /&gt;&lt;br /&gt;Забрать колорайзер можно здесь: &lt;a href=&quot;http://flexx.kiev.ua/data/pycolorizer.py&quot;&gt;pycolorizer.py&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Демонстрация результатов:&lt;/b&gt;&lt;br /&gt;&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:16px&quot;&gt;
&lt;span style=&quot;color:#7F7F7F&quot;&gt;# Search content of the &amp;lt;title&amp;gt; and &amp;lt;link&amp;gt; tags&lt;/span&gt;
&lt;span style=&quot;color:#7F7F7F&quot;&gt;# and generate SQL file.&lt;/span&gt;

&lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; re

data     = open&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;pdb.xml&quot;&lt;/span&gt;, &lt;span style=&quot;color:#7F007F&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;.read&lt;b&gt;(&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
pattern  = re.compile&lt;b&gt;(&lt;/b&gt;r&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;&amp;lt;title&amp;gt;(.+?)&amp;lt;/title&amp;gt;&amp;lt;link&amp;gt;(.+?)&amp;lt;/link&amp;gt;&quot;&lt;/span&gt;, re.DOTALL&lt;b&gt;)&lt;/b&gt;
fp = open&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;out.sql&quot;&lt;/span&gt;, &lt;span style=&quot;color:#7F007F&quot;&gt;&quot;w&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;for&lt;/b&gt; title, link &lt;b style=&quot;color:#00007F&quot;&gt;in&lt;/b&gt; pattern.findall&lt;b&gt;(&lt;/b&gt;data&lt;b&gt;)&lt;/b&gt;:
    title = title.replace&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;&apos;&quot;&lt;/span&gt;, r&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;\&apos;&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;
    title = title.replace&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;\n&quot;&lt;/span&gt;, r&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;
    fp.write&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;INSERT INTO feeds_list (title, link) VALUES (&apos;%s&apos;, &apos;%s&apos;);\n&quot;&lt;/span&gt; % &lt;b&gt;(&lt;/b&gt;title, link&lt;b&gt;)&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
fp.close&lt;b&gt;(&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
&lt;/pre&gt;&lt;br /&gt;&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:16px&quot;&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;from&lt;/b&gt; re &lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; findall

&lt;span style=&quot;color:#FF8000&quot;&gt;&quot;&quot;&quot;
Pycolorizer demo.
&quot;&quot;&quot;&lt;/span&gt;

&lt;b style=&quot;color:#00007F&quot;&gt;try&lt;/b&gt;:
    &lt;span style=&quot;color:#7F7F7F&quot;&gt;# bla-bla-bla&lt;/span&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;except&lt;/b&gt; Exception, e:
    &lt;span style=&quot;color:#7F7F7F&quot;&gt;# preved&lt;/span&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;pass&lt;/b&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;finally&lt;/b&gt;:
    &lt;b style=&quot;color:#00007F&quot;&gt;print&lt;/b&gt; &lt;span style=&quot;color:#7F007F&quot;&gt;&quot;Hello world!&quot;&lt;/span&gt;

&lt;b style=&quot;color:#00007F&quot;&gt;def&lt;/b&gt; &lt;b style=&quot;color:#007F7F&quot;&gt;functionName&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;param&lt;b&gt;)&lt;/b&gt;:
    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; param:
        &lt;b style=&quot;color:#00007F&quot;&gt;print&lt;/b&gt; param
    &lt;b style=&quot;color:#00007F&quot;&gt;else&lt;/b&gt;:
        &lt;b style=&quot;color:#00007F&quot;&gt;print&lt;/b&gt; &lt;span style=&quot;color:#7F007F&quot;&gt;&quot;Fuck #not comment&quot;&lt;/span&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;print&lt;/b&gt; &lt;span style=&quot;color:#7F007F&quot;&gt;&apos;&quot;&quot;&quot;&apos;&lt;/span&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;print&lt;/b&gt; &lt;span style=&quot;color:#7F007F&quot;&gt;&quot;   \&quot;  &quot;&lt;/span&gt;
    &lt;span style=&quot;color:#7F7F7F&quot;&gt;# comment&lt;/span&gt;
    bac = &lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;1&lt;/span&gt;, &lt;b style=&quot;color:#00007F&quot;&gt;None&lt;/b&gt;, True, False&lt;b&gt;]&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;for&lt;/b&gt; abc &lt;b style=&quot;color:#00007F&quot;&gt;in&lt;/b&gt; bac:
        &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; &lt;b style=&quot;color:#00007F&quot;&gt;not&lt;/b&gt; abc:
            &lt;b style=&quot;color:#00007F&quot;&gt;continue&lt;/b&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;else&lt;/b&gt;:
            &lt;b style=&quot;color:#00007F&quot;&gt;break&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;del&lt;/b&gt; bac
    &lt;b style=&quot;color:#00007F&quot;&gt;raise&lt;/b&gt; Exception&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#7F007F&quot;&gt;&quot;Medved&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;print&lt;/b&gt; &lt;span style=&quot;color:#007F7F&quot;&gt;12345&lt;/span&gt;

&lt;b style=&quot;color:#00007F&quot;&gt;class&lt;/b&gt; &lt;b style=&quot;color:#0000FF&quot;&gt;ClassName&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;MegaClass&lt;b&gt;)&lt;/b&gt;:
    &lt;b style=&quot;color:#00007F&quot;&gt;pass&lt;/b&gt;
    
&lt;b style=&quot;color:#00007F&quot;&gt;lambda&lt;/b&gt; x, y: &lt;b style=&quot;color:#00007F&quot;&gt;return&lt;/b&gt; x+y    
&lt;/pre&gt;&lt;br /&gt;Короче, думаю, основная идея ясна :)&lt;br /&gt;&lt;br /&gt;P.S.: А сделайте кто-нибудь под колорайзер GUI. Будет здорово!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;+Bonus:&lt;/b&gt; Теперь есть GUI. См: &lt;a href=&quot;http://mkdir.livejournal.com/9930.html&quot;&gt;http://mkdir.livejournal.com/9930.html&lt;/a&gt;&lt;br /&gt;&lt;b&gt;++Bonus:&lt;/b&gt; Самая свежая версия: &lt;a href=&quot;http://mkdir.livejournal.com/10214.html&quot;&gt;http://mkdir.livejournal.com/10214.html&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=581464409&amp;r=895443597&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/9377.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/8380.html</guid>
  <pubDate>Wed, 29 Mar 2006 13:33:06 GMT</pubDate>
  <title>TaskTimer</title>
  <link>http://mkdir.livejournal.com/8380.html</link>
  <description>Выложил еще два скриншота для &lt;a href=&quot;http://mkdir.livejournal.com/6836.html&quot;&gt;TaskTimer on Ajax&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;http://flexx.kiev.ua/data/tt_screen1.gif&quot;&gt;Скриншот №1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://flexx.kiev.ua/data/tt_screen2.gif&quot;&gt;Скриншот №2&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://flexx.kiev.ua/data/tt_scrshoot.gif&quot;&gt;Старый скриншот&lt;/a&gt;&lt;/strong&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=606253709&amp;r=631537879&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/8380.html</comments>
  <category>win32</category>
  <category>javascript</category>
  <category>php</category>
  <category>ajax</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/7756.html</guid>
  <pubDate>Tue, 28 Mar 2006 10:40:05 GMT</pubDate>
  <title>Python и Crontab. Блокировка повторного запуска.</title>
  <link>http://mkdir.livejournal.com/7756.html</link>
  <description>Продолжение &lt;a href=&quot;http://mkdir.livejournal.com/7484.html&quot;&gt;предыдущего поста про блокировку&lt;/a&gt;.&lt;br /&gt;Всё то же самое, но на языке Python.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Использование модуля&lt;/b&gt;:&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:16px&quot;&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; pidLock
lock = pidLock.pidLock&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#FF8000&quot;&gt;&quot;/var/lock&quot;&lt;/span&gt;, &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;lockName&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:16px&quot;&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; os, sys

&lt;b style=&quot;color:#00007F&quot;&gt;class&lt;/b&gt; &lt;b style=&quot;color:#0000FF&quot;&gt;pidLock&lt;/b&gt;:
    
    &lt;b style=&quot;color:#00007F&quot;&gt;def&lt;/b&gt; &lt;b style=&quot;color:#007F7F&quot;&gt;__init__&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;self, lockDir = &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;.&quot;&lt;/span&gt;, name&lt;b&gt;)&lt;/b&gt;:
        self.name     = name
        self.lockDir  = lockDir
        self.fileName = self.getLockFile&lt;b&gt;()&lt;/b&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;if &lt;/b&gt;self.locked&lt;b&gt;()&lt;/b&gt;:
            sys.exit&lt;b&gt;()&lt;/b&gt;
        self.lock&lt;b&gt;()&lt;/b&gt;


    &lt;b style=&quot;color:#00007F&quot;&gt;def&lt;/b&gt; &lt;b style=&quot;color:#007F7F&quot;&gt;__del__&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;self&lt;b&gt;)&lt;/b&gt;:
        &lt;b style=&quot;color:#00007F&quot;&gt;if &lt;/b&gt;self.locked&lt;b&gt;()&lt;/b&gt;:
            self.unlock&lt;b&gt;()&lt;/b&gt;


    &lt;b style=&quot;color:#00007F&quot;&gt;def&lt;/b&gt; &lt;b style=&quot;color:#007F7F&quot;&gt;getLockFile&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;self&lt;b&gt;)&lt;/b&gt;:
        &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;&quot;&quot;
        returns filename for lock-file.
        &quot;&quot;&quot;&lt;/span&gt;
        fileName = self.lockDir + &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;/&quot;&lt;/span&gt; + self.name + &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;.lock&quot;&lt;/span&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;return&lt;/b&gt; fileName


    &lt;b style=&quot;color:#00007F&quot;&gt;def&lt;/b&gt; &lt;b style=&quot;color:#007F7F&quot;&gt;locked&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;self&lt;b&gt;)&lt;/b&gt;:
        &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;&quot;&quot;
        returns boolean. TRUE - already locked, FALSE - unlocked 
        &quot;&quot;&quot;&lt;/span&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;if not&lt;/b&gt; os.path.isfile&lt;b&gt;(&lt;/b&gt;self.fileName&lt;b&gt;)&lt;/b&gt;:
            &lt;b style=&quot;color:#00007F&quot;&gt;return&lt;/b&gt; False
        pid = open&lt;b&gt;(&lt;/b&gt;self.fileName, &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;.read&lt;b&gt;()&lt;/b&gt;
        res = os.popen&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#FF8000&quot;&gt;&quot;ps &quot;&lt;/span&gt;+pid, &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;.readlines&lt;b&gt;()&lt;/b&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;if &lt;/b&gt;len&lt;b&gt;(&lt;/b&gt;res&lt;b&gt;)&lt;/b&gt; == &lt;span style=&quot;color:#007F7F&quot;&gt;1&lt;/span&gt;:
           self.unlock&lt;b&gt;()&lt;/b&gt;
           &lt;b style=&quot;color:#00007F&quot;&gt;return&lt;/b&gt; False
        &lt;b style=&quot;color:#00007F&quot;&gt;return&lt;/b&gt; True
	
    
    &lt;b style=&quot;color:#00007F&quot;&gt;def&lt;/b&gt; &lt;b style=&quot;color:#007F7F&quot;&gt;lock&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;self&lt;b&gt;)&lt;/b&gt;:
        &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;&quot;&quot;
        Create .lock file for this process &lt;b&gt;(&lt;/b&gt;start lock-session&lt;b&gt;)&lt;/b&gt; 
        &quot;&quot;&quot;&lt;/span&gt;
        fp = open&lt;b&gt;(&lt;/b&gt;self.fileName, &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;w&quot;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;
        fp.write&lt;b&gt;(&lt;/b&gt;str&lt;b&gt;(&lt;/b&gt;os.getpid&lt;b&gt;()&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;
        fp.close&lt;b&gt;()&lt;/b&gt;

    
    &lt;b style=&quot;color:#00007F&quot;&gt;def&lt;/b&gt; &lt;b style=&quot;color:#007F7F&quot;&gt;unlock&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;self&lt;b&gt;)&lt;/b&gt;:
        &lt;span style=&quot;color:#FF8000&quot;&gt;&quot;&quot;&quot;
        Delete .lock file for this process.
        &quot;&quot;&quot;&lt;/span&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;try&lt;/b&gt;:
            os.unlink&lt;b&gt;(&lt;/b&gt;self.fileName&lt;b&gt;)&lt;/b&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;except&lt;/b&gt;:
            pass
&lt;/pre&gt;&lt;br /&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=627954745&amp;r=69265406&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/7756.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/7484.html</guid>
  <pubDate>Tue, 21 Mar 2006 08:21:28 GMT</pubDate>
  <title>PHP-CLI и Crontab. Блокировка повторного запуска.</title>
  <link>http://mkdir.livejournal.com/7484.html</link>
  <description>Не часто приходится сталкиваться с cron-скриптами, время выполнения которых может занять &lt;b&gt;больше чем полчаса&lt;/b&gt;. Но такие скрипты в природе реально существуют и, в принципе, имеют право быть.&lt;br /&gt;&lt;br /&gt;Довелось мне писать несколько &lt;b&gt;spider&apos;ов&lt;/b&gt; на PHP. Каждый выполняет свою задачу во время путешествия по &quot;паутине&quot;.&lt;br /&gt;Время выполнения некоторых из них может занять как две минуты, так и целый час, в зависимости от того, насколько &quot;далеко&quot; полезет паучок.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Итак, задача:&lt;/b&gt; Spider&apos;ы запускаются по крону. Например, каждые 5 минут. Если один из них не успел выполнить свою задачу за этот промежуток времени, то при повторном запуске должна срабатывать блокировка, предотвращающая двойной запуск одного и того же паука.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Решение:&lt;/b&gt;&lt;br /&gt;Решил задачу применением файлов с расширением .lock. Внутри этого файла находится &lt;b&gt;pid&lt;/b&gt; процесса, который создал этот .lock-файл. Все .lock-файлы лежат в отдельной директории &lt;b&gt;locks&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;1. Спайдер запускается и первым делом смотрит: &quot;Есть ли в директории &lt;i&gt;locks&lt;/i&gt; файл, блокирующий меня?&quot;.&lt;br /&gt;2. &lt;b&gt;Если файла нет&lt;/b&gt;, то спайдер создаёт его и продолжает работу.&lt;br /&gt;3. &lt;b&gt;Если файл есть&lt;/b&gt;, то спайдер читает из него pid и проверяет &quot;Выполняется ли в данный момент процесс с этим pid?&quot;.&lt;br /&gt;4. Если такой pid существует, то спайдер отваливается.&lt;br /&gt;5. Если процесс с таким pid уже не существует (например, был убит командой kill), то спайдер пересоздаёт файл и работает дальше.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&quot;Красивое&quot; решение будет работать на PHP5 и заключается в использовании конструктора и деструктора.&lt;br /&gt;Мы просто создаём экземпляр класса Lock и &quot;забываем&quot; о нём. Конструктор класса сам позаботится о проверке на наличие блокировки и её создании при необходимости, а деструктор занимается снятием блокировки по завершении работы скрипта.&lt;br /&gt;&lt;br /&gt;Всё достаточно просто и удобно. Если на момент запуска конструктора, блокировка существует, то конструктор завершает скрипт с кодом возврата 3. Почему 3? Ну просто мне так захотелось :)&lt;br /&gt;&lt;br /&gt;На практике создание автоматического блокиратора происходит так:&lt;br /&gt;&lt;br /&gt;$lock = new Lock($pathToLocks);&lt;br /&gt;где, $pathToLock - абсолютный или относительный путь к директории с .lock-файлами.&lt;br /&gt;&lt;br /&gt;Теперь код (Большая просьба не бить по почкам за плохой английский! Обещаю его освоить!):&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:14px&quot;&gt;
&lt;span style=&quot;color: #000000&quot;&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php

&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**
&amp;nbsp;*&amp;nbsp;Class&amp;nbsp;for&amp;nbsp;the&amp;nbsp;automatic&amp;nbsp;locking&amp;nbsp;the&amp;nbsp;dual&amp;nbsp;processes.
&amp;nbsp;*/

&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;class&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Lock&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;{{{&amp;nbsp;properties

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Flag&amp;nbsp;&quot;is&amp;nbsp;locked&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;&amp;nbsp;bool
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;&amp;nbsp;private
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFlag&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Path&amp;nbsp;to&amp;nbsp;directory&amp;nbsp;with&amp;nbsp;.lock&amp;nbsp;files.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;&amp;nbsp;string
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@accrss&amp;nbsp;&amp;nbsp;private
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$pathToLocks&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;}}}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;{{{&amp;nbsp;__construct

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;If&amp;nbsp;file&amp;nbsp;already&amp;nbsp;locked&amp;nbsp;-&amp;nbsp;exit.&amp;nbsp;Else&amp;nbsp;set&amp;nbsp;lock.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;&amp;nbsp;$pathToLocks
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;&amp;nbsp;public
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;__construct&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$pathToLocks&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pathToLocks&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$pathToLocks&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;isLocked&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;())&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setLock&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;}}}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;{{{&amp;nbsp;__destruct

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Unset&amp;nbsp;lock.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;__destruct&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lockFlag&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;unsetLock&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;}}}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;{{{&amp;nbsp;isLocked

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Returns&amp;nbsp;boolean.&amp;nbsp;TRUE&amp;nbsp;-&amp;nbsp;already&amp;nbsp;locked,&amp;nbsp;FALSE&amp;nbsp;-&amp;nbsp;unlocked
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;&amp;nbsp;bool
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;&amp;nbsp;public
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;isLocked&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFile&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getLockFileName&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;file_exists&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;ob_start&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;system&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&apos;ps&amp;nbsp;&apos;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;file_get_contents&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$res&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;ob_get_contents&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;ob_end_clean&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$res&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$res&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$res&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;explode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$res&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$res&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;==&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;unlink&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;}}}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;{{{&amp;nbsp;getLockFileName

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Returns&amp;nbsp;filename&amp;nbsp;for&amp;nbsp;lock-file.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;&amp;nbsp;string
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;&amp;nbsp;public
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getLockFileName&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$file&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;preg_replace&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&apos;!^(.+)\.[a-z0-9]+$!i&apos;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&apos;\\1.lock&apos;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;basename&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$_SERVER&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&apos;PHP_SELF&apos;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pathToLocks&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$file&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;}}}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;{{{&amp;nbsp;setLock

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Create&amp;nbsp;.lock&amp;nbsp;file&amp;nbsp;for&amp;nbsp;this&amp;nbsp;process&amp;nbsp;(start&amp;nbsp;lock-session)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;&amp;nbsp;bool
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;&amp;nbsp;public
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setLock&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFile&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getLockFileName&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fp&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;@&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;fopen&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&apos;w&apos;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fp&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$res&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;@&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;fwrite&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fp&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getmypid&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$res&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;fclose&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fp&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;unlink&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;fclose&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fp&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lockFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0666&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lockFlag&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;}}}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;{{{&amp;nbsp;unsetLock

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Delete&amp;nbsp;.lock&amp;nbsp;file&amp;nbsp;for&amp;nbsp;this&amp;nbsp;process.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;&amp;nbsp;bool
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;&amp;nbsp;public
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;unsetLock&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;@&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;unlink&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getLockFileName&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;}}}
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;}

&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;Если есть вопросы - спрашивайте. Всегда готов ответить.&lt;br /&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=765160580&amp;r=225537338&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/7484.html</comments>
  <category>php</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/7386.html</guid>
  <pubDate>Sat, 18 Mar 2006 07:10:01 GMT</pubDate>
  <title>Фрактал &quot;Папоротник&quot;</title>
  <link>http://mkdir.livejournal.com/7386.html</link>
  <description>Скачал себе &lt;a href=&quot;http://www.pythonware.com/products/pil/&quot;&gt;PIL&lt;/a&gt; (Python Imaging Library), поставил и, на радостях, решил создать какой-нибудь &quot;шедевр&quot; =)&lt;br /&gt;После часа кропотливой работы мозга, получилось вот это:&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://flexx.kiev.ua/img/fern.png&quot; width=&quot;400&quot; height=&quot;680&quot;&gt;&lt;br /&gt;&lt;br /&gt;Долго бьюсь головою об стену и не могу понять причину таких &quot;худых&quot; листьев папоротника.&lt;br /&gt;По-идее они должны быть на порядок шире и ветвистее...&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre style=&quot;margin:10px;padding:10px;border:1px solid #ccc;background:#FAFAFE;font-family:courier;font-size:16px&quot;&gt;
&lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; Image
&lt;b style=&quot;color:#00007F&quot;&gt;from&lt;/b&gt; random &lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; random
&lt;b style=&quot;color:#00007F&quot;&gt;from&lt;/b&gt; random &lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; randint
&lt;b style=&quot;color:#00007F&quot;&gt;from&lt;/b&gt; math   &lt;b style=&quot;color:#00007F&quot;&gt;import&lt;/b&gt; ceil

maxit    = &lt;span style=&quot;color:#007F7F&quot;&gt;70&lt;/span&gt;
max_rand = &lt;span style=&quot;color:#007F7F&quot;&gt;10&lt;/span&gt;
magnify  = &lt;span style=&quot;color:#007F7F&quot;&gt;65&lt;/span&gt;
x_shift  = &lt;span style=&quot;color:#007F7F&quot;&gt;170&lt;/span&gt;
y_shift  = &lt;span style=&quot;color:#007F7F&quot;&gt;10&lt;/span&gt;

img = Image.new&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#FF8000&quot;&gt;&apos;RGB&apos;&lt;/span&gt;, &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;400&lt;/span&gt;, &lt;span style=&quot;color:#007F7F&quot;&gt;680&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;, &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;

&lt;b style=&quot;color:#00007F&quot;&gt;for&lt;/b&gt; iterat &lt;b style=&quot;color:#00007F&quot;&gt;in&lt;/b&gt; xrange&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;30000&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;:
    x = &lt;b&gt;(&lt;/b&gt;random&lt;b&gt;()&lt;/b&gt; * max_rand&lt;b&gt;) /&lt;/b&gt; &lt;span style=&quot;color:#007F7F&quot;&gt;50000&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;
    y = &lt;b&gt;(&lt;/b&gt;random&lt;b&gt;()&lt;/b&gt; * max_rand&lt;b&gt;) /&lt;/b&gt; &lt;span style=&quot;color:#007F7F&quot;&gt;50000&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;
    &lt;b style=&quot;color:#00007F&quot;&gt;for&lt;/b&gt; i &lt;b style=&quot;color:#00007F&quot;&gt;in&lt;/b&gt; xrange&lt;b&gt;(&lt;/b&gt;maxit&lt;b&gt;)&lt;/b&gt;:
        rand_num = ceil&lt;b&gt;(&lt;/b&gt;random&lt;b&gt;()&lt;/b&gt; * max_rand * &lt;span style=&quot;color:#007F7F&quot;&gt;100&lt;/span&gt;&lt;b&gt;) /&lt;/b&gt; &lt;span style=&quot;color:#007F7F&quot;&gt;100&lt;/span&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; rand_num &amp;lt; &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;01&lt;/span&gt; * max_rand:
            x = &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;
            y = &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;16&lt;/span&gt; * y
        &lt;b style=&quot;color:#00007F&quot;&gt;elif&lt;/b&gt; rand_num &amp;lt; &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;86&lt;/span&gt; * max_rand:
            x = &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;85&lt;/span&gt; * x&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;04&lt;/span&gt; * y&lt;b&gt;)&lt;/b&gt;
            y = &lt;b&gt;(&lt;/b&gt;-&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;04&lt;/span&gt; * x&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;85&lt;/span&gt; * y&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; &lt;span style=&quot;color:#007F7F&quot;&gt;1&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;6&lt;/span&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;elif&lt;/b&gt; rand_num &amp;lt; &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;93&lt;/span&gt; * max_rand:
            x = &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;2&lt;/span&gt; * x&lt;b&gt;)&lt;/b&gt; - &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;26&lt;/span&gt; * y&lt;b&gt;)&lt;/b&gt;
            y = &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;23&lt;/span&gt; * x&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;22&lt;/span&gt; * y&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; &lt;span style=&quot;color:#007F7F&quot;&gt;1&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;6&lt;/span&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;else&lt;/b&gt;:
            x = &lt;b&gt;(&lt;/b&gt;-&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;15&lt;/span&gt; * x&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;28&lt;/span&gt; * y&lt;b&gt;)&lt;/b&gt;
            y = &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;26&lt;/span&gt; * x&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;24&lt;/span&gt; * y&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;44&lt;/span&gt;

    &lt;b style=&quot;color:#00007F&quot;&gt;if&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;x &amp;gt;= -&lt;span style=&quot;color:#007F7F&quot;&gt;5&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;&lt;b&gt;)&lt;/b&gt; &lt;b style=&quot;color:#00007F&quot;&gt;and&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;x &amp;lt;= &lt;span style=&quot;color:#007F7F&quot;&gt;5&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;&lt;b&gt;)&lt;/b&gt; &lt;b style=&quot;color:#00007F&quot;&gt;and&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;y &amp;gt;= &lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;&lt;b&gt;)&lt;/b&gt; &lt;b style=&quot;color:#00007F&quot;&gt;and&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;y &amp;lt;= &lt;span style=&quot;color:#007F7F&quot;&gt;10&lt;/span&gt;.&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;:
        x = int&lt;b&gt;(&lt;/b&gt;x * magnify&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; x_shift
        y = int&lt;b&gt;(&lt;/b&gt;y * magnify&lt;b&gt;)&lt;/b&gt; &lt;b&gt;+&lt;/b&gt; y_shift
        r = randint&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color:#007F7F&quot;&gt;128&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;
        g = randint&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;128&lt;/span&gt;, &lt;span style=&quot;color:#007F7F&quot;&gt;255&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;
        b = randint&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#007F7F&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color:#007F7F&quot;&gt;128&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;try&lt;/b&gt;:
            img.putpixel&lt;b&gt;(&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;x, y&lt;b&gt;)&lt;/b&gt;, &lt;b&gt;(&lt;/b&gt;r, g, b&lt;b&gt;))&lt;/b&gt;
        &lt;b style=&quot;color:#00007F&quot;&gt;except&lt;/b&gt; IndexError:
            &lt;b style=&quot;color:#00007F&quot;&gt;pass&lt;/b&gt;

img.save&lt;b&gt;(&lt;/b&gt;&lt;span style=&quot;color:#FF8000&quot;&gt;&apos;fern.png&apos;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;Время генерации папоротника на PIII-500: &lt;b&gt;53&lt;/b&gt; секунды&lt;br /&gt;В данном примере выполняется &lt;b&gt;70&lt;/b&gt; * &lt;b&gt;30 000&lt;/b&gt; = &lt;b&gt;2 100 000&lt;/b&gt; итераций&lt;br /&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=341060617&amp;r=305557700&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/7386.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/7056.html</guid>
  <pubDate>Mon, 06 Mar 2006 11:48:32 GMT</pubDate>
  <title>PHP vs Python</title>
  <link>http://mkdir.livejournal.com/7056.html</link>
  <description>Общался по аське с &lt;span class=&apos;ljuser&apos; lj:user=&apos;ttyv0&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://ttyv0.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://p-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://ttyv0.livejournal.com/&apos;&gt;&lt;b&gt;ttyv0&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; и слова, которые он сказал, я хочу зацитировать, чтобы не забыть =)&lt;br /&gt;&lt;div style=&quot;border:1px solid #9AA;background:#F5F5FF;padding:5px;margin:2px&quot;&gt;Сейчас законодатель &quot;моды&quot; - Google. А гуглевые интерфейсы - на &lt;a href=&quot;http://www.python.org/&quot; title=&quot;The Python language site&quot;&gt;питоне&lt;/a&gt;.&lt;br /&gt;Так что, за кем будущее - это очевидно. Может &lt;a href=&quot;http://www.ruby-lang.org/&quot; title=&quot;The Ruby language site&quot;&gt;Ruby&lt;/a&gt; еще.&lt;br /&gt;&lt;br /&gt;Google в сторону &lt;a href=&quot;http://www.php.net&quot; title=&quot;The PHP language site&quot;&gt;PHP&lt;/a&gt; даже не смотрел. Как только GMail появился, интерес к питону стремительно возрос.&lt;br /&gt;&lt;br /&gt;Вообще, я думаю, они тоже там немало перебирали всякого, в поисках нужного языка. Гугловцы, как показывает практика, знают, что делают. А ведь могли бинари на си заюзать. Но не стали почему-то.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Золотые слова!&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=330572913&amp;r=171446340&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/7056.html</comments>
  <category>google</category>
  <category>php</category>
  <category>python</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/6836.html</guid>
  <pubDate>Fri, 24 Feb 2006 11:51:18 GMT</pubDate>
  <title>Task Timer on Ajax</title>
  <link>http://mkdir.livejournal.com/6836.html</link>
  <description>Сколько ни программирую, а до сих пор не научился &lt;b&gt;правильно оценивать время&lt;/b&gt; на поставленную задачу.&lt;br /&gt;Либо справляюсь с нею гораздо быстрее, чем сам же предсказал, либо опаздываю. Конечно же, бывают случаи, когда время все-таки совпадает :-)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Чтобы научиться точно оценивать время&lt;/b&gt;, я решил накопить список разнообразных задач c потраченным временем на каждую. Таким образом, я буду чётко знать, сколько времени трачу на ту или иную задачу. Пройдёт некоторое время, и оценивать станет гораздо проще (вот наивный!) =)&lt;br /&gt;&lt;br /&gt;Итак, полез я в гугл искать таймеры... Много разных пересмотрел - ничего не пришлось по вкусу. Зато, в голове вырисовалась чёткая картина таск-таймера, который я хочу:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.&lt;/b&gt; Он должен лежать прямо на рабочем столе! System Tray - это слишком сложно.&lt;br /&gt;&lt;b&gt;2.&lt;/b&gt; Это не таймер для одной задачи - это таймер для списка из n-задач.&lt;br /&gt;&lt;b&gt;3.&lt;/b&gt; Одновременно можно запускать несколько таймеров.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Короче, пришлось писать самому :-)&lt;br /&gt;Засучив рукава, радостно принялся ваять. Повесил на рабочий стол страницу (WinXP/Active Desktop) и начал делать форму... Но, очень быстро выяснил, что при сабмите формы открывается окно IE с результатом. Нажатие на ссылку срабатывает точно также. Иными словами, Active Desktop позволяет размещать на рабочем столе &lt;b&gt;только статические страницы&lt;/b&gt;, точнее страницы, где не меняется location.&lt;br /&gt;&lt;br /&gt;Выход из ситуации нашёлся очень быстро. Ключевое слово - &lt;b&gt;jsHTTPRequest&lt;/b&gt; или, в простонародье, &lt;b&gt;Ajax&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;За несколько вечеров с кружкой чая напрограммил Task Timer и остался вполне доволен результатом. Получился эдакий &lt;b&gt;ToDo-list&lt;/b&gt; с таймером на каждую задачу. Безмерно кайфую :-)&lt;br /&gt;&lt;br /&gt;Скачать это &quot;удовольствие&quot; можно здесь: &lt;a href=&quot;http://flexx.kiev.ua/data/task_timer.zip&quot;&gt;task_timer.zip&lt;/a&gt; (16кб)&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://flexx.kiev.ua/data/tt_scrshoot.gif&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size:1.2em;font-weight:bold;&quot;&gt;скриншот #1&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;http://flexx.kiev.ua/data/tt_screen1.gif&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size:1.2em;font-weight:bold;&quot;&gt;скриншот #2&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;http://flexx.kiev.ua/data/tt_screen2.gif&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size:1.2em;font-weight:bold;&quot;&gt;скриншот #3&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Установка&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;1.&lt;/b&gt; Распакуйте содержимое архива :)&lt;br /&gt;&lt;b&gt;2.&lt;/b&gt; Файлы из папки task_timer залейте на (локальный?) сервачок.&lt;br /&gt;&lt;b&gt;3.&lt;/b&gt; MySQL (желательно 4.1.*): Создайте базу данных и залейте в неё дамп из файла task_timer.sql&lt;br /&gt;&lt;b&gt;4.&lt;/b&gt; Откройте config.inc.php и пропишите настройки базы.&lt;br /&gt;&lt;b&gt;5.&lt;/b&gt; На рабочий стол добавьте страницу для Task Timer, указав его URL. (Правый клик на рабочем столе -&amp;gt; Свойства -&amp;gt; закладка &quot;Desktop&quot; -&amp;gt; кнопка &quot;Customize Desktop...&quot; -&amp;gt; закладка &quot;Web&quot; -&amp;gt; добавляете страницу)&lt;br /&gt;&lt;b&gt;6.&lt;/b&gt; Должно заработать.&lt;br /&gt;&lt;b&gt;7.&lt;/b&gt; Если п.5 не сработал - большая просьба отписать в комменты!&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Использование&lt;/h3&gt;&lt;br /&gt;Интерфейс интуитивно-понятный. Единственное, что требует внимания - это &lt;b&gt;переименование таска&lt;/b&gt;.&lt;br /&gt;Чтобы переименовать таск, просто кликните два раза на его названии :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD:&lt;/b&gt; Добавил еще два скриншота.&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=197891601&amp;r=772419324&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/6836.html</comments>
  <category>win32</category>
  <category>javascript</category>
  <category>php</category>
  <category>ajax</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/6613.html</guid>
  <pubDate>Tue, 07 Feb 2006 14:15:34 GMT</pubDate>
  <title>Internet Explorer 7.0</title>
  <link>http://mkdir.livejournal.com/6613.html</link>
  <description>Как вы уже, наверное, знаете, совсем скоро грядёт выход стабильной версии браузера &lt;strong&gt;Internet Explorer 7.0&lt;/strong&gt;.&lt;br /&gt;Событие, которого многие веб-разработчики ждут, затаив дыхание ;-)&lt;br /&gt;&lt;br /&gt;В интернете даже появился сайт, посвящённый новой версии IE. Итак, встречайте:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:large&quot;&gt;&lt;a href=&quot;http://www.ie7.com&quot;&gt;www.IE7.com&lt;/span&gt;&lt;/a&gt;&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=695648535&amp;r=293006905&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/6613.html</comments>
  <category>ie</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/6094.html</guid>
  <pubDate>Fri, 23 Dec 2005 14:26:30 GMT</pubDate>
  <link>http://mkdir.livejournal.com/6094.html</link>
  <description>Придумал новый способ обхода сложных массивов :-) Ржунимагу =)))&lt;br /&gt;Вопщем, идея такая. У нас есть массив &lt;span style=&quot;font-weight: bold;&quot;&gt;$array&lt;/span&gt; (любой сложности) . Делаем следующее:&lt;pre&gt;ob_start();
print_r($array);
$buffer = ob_get_contents();
ob_clean();
&lt;/pre&gt;А затем пишем парсилку на регулярных выражениях, которая будет анализировать переменную &lt;span style=&quot;font-weight: bold;&quot;&gt;$buffer&lt;/span&gt; и принимать решения =))))&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=179960117&amp;r=206862482&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/6094.html</comments>
  <category>php</category>
  <lj:music>Trance - LIVE MIX6</lj:music>
  <lj:mood>bouncy</lj:mood>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://mkdir.livejournal.com/5774.html</guid>
  <pubDate>Fri, 16 Dec 2005 16:43:40 GMT</pubDate>
  <title>View source code</title>
  <link>http://mkdir.livejournal.com/5774.html</link>
  <description>Так уж сложилось, сейчас мне приходится писать сложные динамические интерфейсы на JavaScript с непосредственным использованием DOM.&lt;br /&gt;Первая проблема с которой я столкнулся, это желание посмотреть сгенерированный код =)&lt;br /&gt;Ведь его не просмотришь просто заглянув в сорцы страницы.&lt;br /&gt;&lt;br /&gt;И вот как я решил выкрутиться:&lt;pre&gt;
function debug(id) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; el = document.getElementById(id);
&amp;nbsp;&amp;nbsp;&amp;nbsp; source = el.innerHTML;
&amp;nbsp;&amp;nbsp;&amp;nbsp; source = source.replace(/&amp;lt;/g, &apos;&amp;amp;lt;&apos;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; source = source.replace(/&amp;gt;/g, &apos;&amp;amp;gt;&apos;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; source = source.replace(/\n/g, &apos;&amp;lt;br&amp;gt;&apos;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; source = source.replace(/ /g, &apos;&amp;amp;nbsp;&apos;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; win = window.open(&apos;&apos;, &apos;debug&apos;+id, &apos;width=500,height=450,resizable=yes,scrollbars=yes,titlebar=yes&apos;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; win.document.write(source);
}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Например, у меня есть родительский div в который добавляется невероятное количество чилдов.&lt;br /&gt;&amp;lt;div id=&quot;rows&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;В нужный момент я вызываю свою функцию: debug(&apos;rows&apos;);&lt;br /&gt;И в новом окне я преспокойно рассматриваю получившийся код =)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Вопрос:&lt;/span&gt; существуют ли более гуманные способы сделать это?&lt;img src=&apos;http://ads.sup.com/adv?i1=8349063&amp;vid=975777739&amp;r=702712601&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://mkdir.livejournal.com/5774.html</comments>
  <category>javascript</category>
  <lj:music>Silence</lj:music>
  <lj:security>public</lj:security>
</item>
</channel>
</rss>
