<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1970288943741103769</id><updated>2021-12-13T07:20:39.506+02:00</updated><category term="сайт"/><category term="linux"/><category term="python"/><category term="зарплаты"/><category term="admin"/><category term="django"/><category term="rant"/><category term="кризис"/><category term="успехи"/><category term="CSS"/><category term="apache"/><category term="fun"/><category term="howto"/><category term="mercurial"/><category term="multicore"/><category term="nginx"/><category term="openx"/><category term="pylons"/><category term="rss"/><category term="subverrsion"/><category term="tools"/><category term="vendor branches"/><category term="virtualenv"/><category term="vm"/><category term="yslow"/><category term="аналитка"/><category term="бизнес"/><category term="графики"/><category term="день рождения"/><category term="железо"/><category term="компании"/><category term="мысли"/><category term="отчеты"/><category term="продажи"/><category term="работа"/><category term="развитие"/><category term="управление"/><category term="халява"/><title type='text'>Блог команды ДОУ</title><subtitle type='html'>uncensored записи о разработке и развитии проекта developers.org.ua.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-4978897925981029087</id><published>2009-10-25T08:11:00.003+02:00</published><updated>2009-10-26T07:45:22.915+02:00</updated><title type='text'>Перезапуск Планеты ДОУ</title><content type='html'>У нас на developers небольшая реорганизация.&lt;br /&gt;&lt;br /&gt;Вместо одно большой &lt;a href=&quot;http://www.developers.org.ua/planet/&quot;&gt;планеты&lt;/a&gt; будет несколько поменьше, тематических. И называться это теперь будет &quot;сообщества&quot;. Каждый может создавать свое собственное сообщество, пригласить туда других участников, добавлять/удалять те ленты, которые считает нужным. Выглядеть это может так:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.developers.org.ua/members/c/1-Python/&quot;&gt;http://www.developers.org.ua/members/c/1-Python/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Называется это &quot;сообщества&quot; потому что кроме собственно ленты блогов (планеты) планируется еще дополнительная функциональность. А каждое из сообществ планируется тематическим, например Python, Embedded, Стартапы и т.п.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Инструкция по переносу своей ленты блога&lt;/h3&gt;  &lt;p&gt;Мы не будем проводить автоматический импорт существующей ленты блогов в новые сообщества. Вы можете перенести свою ленту самостоятельно. Это просто.&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;Откываете страницу &lt;a href=&quot;http://localhost:8001/members/c/create/&quot;&gt;создать     сообщество&lt;/a&gt;. Ищите в списке слева подходящее сообщество среди уже   имеющихся. Если ничего не выбрали - заполняете форму создаете свое.&lt;/li&gt;&lt;li&gt;  &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Если вы выбрали уже существующее —- странице сообщества   нажимаете кнопку &quot;Присоединиться&quot;&lt;/li&gt;&lt;li&gt;На странице сообщества идете по ссылке &quot;Добавить ленту&quot; и вписываете   адрес вашей RSS/Atom ленты&lt;/li&gt;&lt;li&gt;Ждете. Содержимое ленты появляется в планете. На странице &quot;Управление   лентами&quot; показываются ошибки агрегации, если были. Для админа там же есть   линк &quot;Обновить СЕЙЧАС&quot;, для немедленной загрузки всех фидов.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;http://www.developers.org.ua/members/c/create/&quot;&gt;&lt;/a&gt;&lt;/strong&gt;</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/4978897925981029087/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/4978897925981029087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/4978897925981029087'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/10/blog-post.html' title='Перезапуск Планеты ДОУ'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-2348634021665248907</id><published>2009-08-28T10:15:00.002+03:00</published><updated>2009-08-28T10:24:22.070+03:00</updated><title type='text'>hg rebase</title><content type='html'>Как включить новые changesets в вашу копию mercurial-репозитория? Несколько равноправных вариантов:&lt;br /&gt;&lt;br /&gt;1. hg pull ; hg update; # затем hg merge; hg commit, если необходимо&lt;br /&gt;2. hg pull -u # затем hg merge; hg commit&lt;br /&gt;3. hg fetch # делает hg merge/commit сам, если необходимо&lt;br /&gt;4. hg pull --rebase&lt;br /&gt;&lt;br /&gt;До недавнего времени я использовал №3, т.к. он самый &quot;экономный&quot; по времени. Теперь вот перехожу на №4, т.к. он не &quot;замусоривает&quot; историю лишними &quot;automatic merge&quot; ченджсетами.&lt;br /&gt;&lt;br /&gt;Чтобы работало rebase нужен hg 1.1 и строка &quot;hgext.rebase =&quot; в конфиге .hgrc.&lt;br /&gt;&lt;br /&gt;Выглядит это так:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ hg pull --rebase&lt;br /&gt;pulling from ssh://ischenko@.../&lt;br /&gt;searching for changes&lt;br /&gt;adding changesets&lt;br /&gt;adding manifests&lt;br /&gt;adding file changes&lt;br /&gt;added 1 changesets with 1 changes to 1 files (+1 heads)&lt;br /&gt;(run &#39;hg heads&#39; to see heads, &#39;hg merge&#39; to merge)&lt;br /&gt;saving bundle to /home/max/projects/../.hg/strip-backup/b34388790a07-temp&lt;br /&gt;adding branch&lt;br /&gt;adding changesets&lt;br /&gt;adding manifests&lt;br /&gt;adding file changes&lt;br /&gt;added 3 changesets with 4 changes to 4 files&lt;br /&gt;rebase completed&lt;br /&gt;$ hg st&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Читать больше: &lt;a href=&quot;http://mercurial.selenic.com/wiki/RebaseProject&quot;&gt;http://mercurial.selenic.com/wiki/RebaseProject&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/2348634021665248907/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/08/hg-rebase.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/2348634021665248907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/2348634021665248907'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/08/hg-rebase.html' title='hg rebase'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-579264757405219845</id><published>2009-08-17T19:18:00.001+03:00</published><updated>2009-08-17T19:20:03.136+03:00</updated><title type='text'>прогрессивная система прав для пользователей</title><content type='html'>Как работает система разграничения прав пользователей в традиционной CMS, такой как Wordpress или Django?&lt;br /&gt;&lt;br /&gt;Суперпользователь (администратор) может назначать (&quot;раздавать&quot;) разный уровень доступа для разных пользователей системы. Для большей гибкости права обычно назначаются не пользователям, а &quot;ролям&quot;, которые, в свою очередь, присваиваются пользователям. Но сути это не меняет - управлением правами занимается человек, администратор системы.&lt;br /&gt;&lt;br /&gt;Что сделали разработчики stackoverflow.com?&lt;br /&gt;&lt;br /&gt;Они автоматизировали процесс управления правами пользователей, используя понятие &quot;кармы&quot; (т.е. внутренний рейтинг пользователя). Чем выше карма пользователя, тем больше действий в системе ему доступно. Очень простая концепция.&lt;br /&gt;&lt;br /&gt;Такая система имеет два существенных преимущества перед традиционной системой прав:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Снижаются затраты на администрирование системы, т.к. она теперь по сути само-управляемая и не требует вмешательства в 95% случаев.&lt;/li&gt;&lt;li&gt;Поощрение пользователей к наполнению сайта (UGC). Чем больше пользователь работает с сайтом, тем выше у него карма и автоматически - выше полномочия. Пользователи любят, когда их ценят.&lt;br /&gt;  &lt;/li&gt;&lt;/ol&gt; Главный же недостаток - она сильно сложнее в реализации.&lt;br /&gt;&lt;br /&gt;Во-первых, нужно продумать алгоритм вычисления кармы пользователей и какие действия &quot;открываются&quot; на каждом новом уровне. Во-вторых, эти алгоритмы нужно будет постоянно обновлять, по  мере обновления сайта и по мере того, как &quot;нечестные&quot; пользователи будут находить и использовать &quot;дыры&quot; в логике.&lt;br /&gt;&lt;br /&gt;Для простых сайтов такая система - явный over-engineering. Но для сайтов посложнее я бы ее обязательно попробовал.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/579264757405219845/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/08/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/579264757405219845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/579264757405219845'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/08/blog-post.html' title='прогрессивная система прав для пользователей'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-8784349409728308471</id><published>2009-07-29T09:48:00.003+03:00</published><updated>2009-07-29T09:53:23.924+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Тупой Django ORM</title><content type='html'>...не умеет Identity Map:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; obj = AutoService.objects.get(id=31) # select from sto_autoservice id=31&lt;br /&gt;&gt;&gt;&gt; obj.carwash # select from sto_carwash where parent_id= 31&lt;br /&gt;&gt;&gt;&gt; obj.carwash.parent # и СНОВА select from sto_autoservice id=31&lt;br /&gt;&lt;br /&gt;В SQLAlchemy последнего запроса не было бы, благодаря Identity Map. Да и вообще мог быть всего один запрос если сконфигурировать &lt;a href=&quot;http://www.sqlalchemy.org/docs/05/ormtutorial.html#working-with-related-objects&quot;&gt;lazy loader&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Тупой.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/8784349409728308471/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/07/django-orm.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8784349409728308471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8784349409728308471'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/07/django-orm.html' title='Тупой Django ORM'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-3269957716381850307</id><published>2009-07-11T13:04:00.003+03:00</published><updated>2009-07-11T13:25:53.259+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="howto"/><category scheme="http://www.blogger.com/atom/ns#" term="mercurial"/><category scheme="http://www.blogger.com/atom/ns#" term="subverrsion"/><category scheme="http://www.blogger.com/atom/ns#" term="vendor branches"/><title type='text'>работа с vendor branches в mercurial</title><content type='html'>Одна вещь, которой мне не хватало после перехода на Mercurial - это vendor branches.&lt;br /&gt;&lt;br /&gt;На ДОУ мы используем Wordpress и несколько других сторонних библиотек. Причем не просто используем, а вынуждены вносить мелкие правки тут и там для наших нужд. С выходом каждой версии того же WordPress эти правки тоже нужно переносить.&lt;br /&gt;&lt;br /&gt;Работая с Subversion мы для этих целей использовали vendor branches, благо даже инструкции для &lt;a href=&quot;http://techblog.touchbasic.com/html/using-subversion-with-wordpress-part-1-creating-vendor-branches-and-integrating-your-existing-code/&quot;&gt;wordpress + vendor branches&lt;/a&gt; нашлись. У Mercurial специального решения этой проблемы нет, разработчики советуют разное.&lt;br /&gt;&lt;br /&gt;Опишу, к чему в итоге пришел я, может кому-то пригодится. Идеи по улучшению приветствуются.&lt;br /&gt;&lt;br /&gt;Вкратце идея такова:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Для Wordpress (и других библиотек) создается отдельный репозиторий, site-vendor, в который загружается &quot;чистый&quot; код библиотек. &lt;/li&gt;&lt;li&gt;В рабочем репозитории хранится отдельная копия  этих же библиотек, но уже с нашими локальными правками.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;По мере выхода новых версий, они загружаются поверх предыдущей версии в site-vendor, проставляется тег с номером новой версии.&lt;/li&gt;&lt;li&gt;По тегу (версии) делается diff (патч) между двумя версиями библитеки, который и применяется к копии библиотеки в рабочем репозитории.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Смысл отдельного репозитория в том, что он позволяет сделать three-way merge, который является аналогом vendor branches из svn.&lt;br /&gt;&lt;br /&gt;Mercurial умеет делать несколько бранчей в одном репозитории (named branches), но оно неудобное в использовании и вообще считается &quot;advanced&quot;. Отдельный репозиторий проще.&lt;br /&gt;&lt;br /&gt;Вот так примерно это выглядит в работе:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$ cd /path/to/site-vendor&lt;br /&gt;$ rm -fr wordpress/&lt;br /&gt;$ tar xzf latest.tar.gz # новая версия библиотеки&lt;br /&gt;$ rm latest.tar.gz&lt;br /&gt;$ hg addremove&lt;br /&gt;$ hg status&lt;br /&gt;$ hg ci -m &quot;wordpress 2.8.0 upgrade&quot;&lt;br /&gt;$ hg tag wordpress-2.8.0&lt;br /&gt;$ hg export -a wordpress-2.8.0 &amp;gt; /tmp/wp28.patch&lt;br /&gt;$ cd to /path/to/wc&lt;br /&gt;$ hg import /tmp/wp28.patch # ждем patch FAILED&lt;br /&gt;$ hg st -un # просматриваем .rej файлы и патчим вручную&lt;br /&gt;$ hg ci -m &quot;updated to wordpress 2.8&quot;&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/3269957716381850307/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/07/vendor-branches-mercurial.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/3269957716381850307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/3269957716381850307'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/07/vendor-branches-mercurial.html' title='работа с vendor branches в mercurial'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-7652200190795316983</id><published>2009-04-28T11:31:00.003+03:00</published><updated>2009-04-28T11:55:58.781+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualenv"/><title type='text'>python tip: быстрая настройка virtualenv</title><content type='html'>Во всех своих Python проектах я сейчас пользуюсь замечательным инструментом &lt;a href=&quot;http://pypi.python.org/pypi/virtualenv&quot;&gt;virtualenv&lt;/a&gt;, который позволяет создавать &quot;приватную&quot; копию Python специально для проекта. Таким образом решаются возможные конфликты по версиями библиотек между разными проектами.&lt;br /&gt;&lt;br /&gt;Эта функция из моего ~/.bashrc упрощает подключение приватной копии Python для выбранного проекта. Может и вам пригодится.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;function py () {&lt;br /&gt;for dir in . ..; do&lt;br /&gt;  if [ -d $dir/py ]; then&lt;br /&gt;    source $dir/py/bin/activate;&lt;br /&gt;    return;&lt;br /&gt;  fi&lt;br /&gt;done&lt;br /&gt;echo &quot;py dir not found, configuring virtualenv here&quot;&lt;br /&gt;which virtualenv &amp;gt;/dev/null &amp;amp;&amp;amp; virtualenv py &amp;amp;&amp;amp; source py/bin/activate&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/7652200190795316983/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/04/python-tip-virtualenv.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/7652200190795316983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/7652200190795316983'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/04/python-tip-virtualenv.html' title='python tip: быстрая настройка virtualenv'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-8817862995258687365</id><published>2009-04-21T11:04:00.005+03:00</published><updated>2009-04-23T07:53:01.358+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>использование &quot;глобальных&quot; переменных в Python</title><content type='html'>Маленький пример кода из документации &lt;a href=&quot;http://pylonshq.com/docs/en/0.9.7/configuration/#generating-urls&quot;&gt;Pylons&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;from pylons import url&lt;br /&gt;print url.current() # prints /foo/bar if this is request for /foo/bar&lt;/code&gt;&lt;/pre&gt;Чем является объект url? Переменной (глобальной) в pylons/__init__.py? А может это модуль url.py у которого есть функция current? С точки зрения Питона разница небольшая - и то и то есть ключ в каком-то словаре имен (&lt;a href=&quot;http://www.python.org/dev/peps/pep-0020/&quot;&gt;Namespaces are one honking great idea&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Так почему тогда это так &quot;напрягает&quot; &lt;a href=&quot;http://piranha.org.ua/&quot;&gt;некоторых&lt;/a&gt; &lt;a href=&quot;http://softwaremaniacs.org/&quot;&gt;разработчиков&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Да-да, все мы читали про Singletons are evil и глобальные переменные это тоже &quot;плохо&quot;. Но почему? Точнее не так - в питоне вы используете кучу глобальных переменных, которые &quot;появляются&quot; через ключевое слово import. E.g.: import urlllib; urllib.open(). Чем же import pylons; pylons.request.environ() хуже?&lt;br /&gt;&lt;br /&gt;Псевдоглобальные объекты, типа pylons.request, удобны тем, что они доступны через простой и понятный интерфейс, который любой программист на Python хорошо знает (import). Простота - это хорошо.&lt;br /&gt;&lt;br /&gt;Да, для создания таких объектов приходится использовать thread-locals, ну и что? Это implementation detail.&lt;br /&gt;&lt;br /&gt;Какая альтернатива? Если &quot;глобальные&quot; переменные не используются, тогда мы должны каким-то образом &quot;доставлять&quot; нужные объекты в нужные участки программы. Вариант один - передавать их по стеку вызовов.&lt;br /&gt;&lt;br /&gt;С одной стороны, это ограничивает видимость объектов и уменьшает зависимость между кусками кода, заставляя программиста более четко разделать код на разных уровнях абстракции. Это хорошо.&lt;br /&gt;&lt;br /&gt;Плохо это тем, что т.к. абстракции типа request или database нужны много где, код  в итоге загромождается и усложняется из-за необходисти &quot;носить&quot; с собой эти объекты, которые могут понадобится на 2-3 уровня ниже по стеку.&lt;br /&gt;&lt;br /&gt;Наверное, попытки держать это &quot;загромождение&quot; в рамках приведут к более &quot;чистому&quot; дизайну, т.к. не захочется лишний параметр передавать. А это уже вроде как хорошо. Ну и тестировать функции, которые не используют &quot;глобальные&quot; переменные тоже проще - не нужно возиться с &quot;заглушками&quot;.&lt;br /&gt;&lt;br /&gt;И что же у меня получается? Код без использования &quot;глобальных&quot; переменных - &quot;правильнее&quot;, а с ними - &quot;удобнее&quot;. Прямо как Pascal vs. C. ;)&lt;br /&gt;&lt;br /&gt;Может, действительно pylons.url и прочие - зло, а я - ленивый программист? Хотя лень у нас недостатком вроде и не считается...&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;update&lt;/span&gt;: в комментариях очень познавательная информация про библиотеку Contextual, которая решает проблему глобально-доступных объектов, но не использует thread locals.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/8817862995258687365/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/04/python.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8817862995258687365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8817862995258687365'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/04/python.html' title='использование &quot;глобальных&quot; переменных в Python'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-3767145444463888798</id><published>2009-04-14T13:14:00.001+03:00</published><updated>2009-04-14T17:30:41.649+03:00</updated><title type='text'>доходы</title><content type='html'>Если с &lt;a href=&quot;http://unblog.developers.org.ua/2009/04/blog-post.html&quot;&gt;аудиторией&lt;/a&gt; все просто - она спокойно себе растет процентов по 100 в год, с доходами сложнее. Доходы от рекламы, на которых существовал сайт упали сильно и резко.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_ElKfqNRP8Bw/SeIh3Ai0-2I/AAAAAAAAARU/X2jCtL2r15E/s1600-h/sales.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 208px;&quot; src=&quot;http://1.bp.blogspot.com/_ElKfqNRP8Bw/SeIh3Ai0-2I/AAAAAAAAARU/X2jCtL2r15E/s400/sales.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5323854938427947874&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Сейчас по продажам мы вернулись аж на весну 2007 года. Радует то, что дальнейшего падения пока (уже) не наблюдается. Стабильно лежим. :)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;update&lt;/span&gt;: динамика в долларах. в гривнах все конечно не так печально, всего в 2,5 раза где-то падение.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/3767145444463888798/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/04/blog-post_14.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/3767145444463888798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/3767145444463888798'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/04/blog-post_14.html' title='доходы'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_ElKfqNRP8Bw/SeIh3Ai0-2I/AAAAAAAAARU/X2jCtL2r15E/s72-c/sales.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-5974540615212277369</id><published>2009-04-09T11:57:00.003+03:00</published><updated>2009-04-09T12:10:53.999+03:00</updated><title type='text'>аудитория сайта</title><content type='html'>Когда я &lt;a href=&quot;http://twitter.com/devua/status/1477004969&quot;&gt;написал&lt;/a&gt; в Твиттере что месячная аудитория сайта в марте составила 53К уников (+125% к марту 2008) мне ответили, что мы достигли насыщения и остается работать над тем, чтобы ходили чаще.&lt;br /&gt;&lt;br /&gt;Интересный вопрос, на самом деле, какой у нас &quot;потолок&quot; по аудитории? В Украине, по разным оценкам, от 20 до 40 тыс. программистов и близких к ним специалистов. Пусть даже украинский трафик у нас 60%, это уже 25К - т.е. практически &lt;span style=&quot;font-style: italic;&quot;&gt;все&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Тем не менее, когда я был во вторник в Циклуме и ходил по офису, многие мне отвечали что про developers.org.ua они слышат первый раз. Вот еще картинка в тему, сравнение аудиторий по счетчику Бигмира:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_ElKfqNRP8Bw/Sd24nbD_7nI/AAAAAAAAARM/gO7lI5DAPIc/s1600-h/audience.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 249px;&quot; src=&quot;http://4.bp.blogspot.com/_ElKfqNRP8Bw/Sd24nbD_7nI/AAAAAAAAARM/gO7lI5DAPIc/s400/audience.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5322613322040733298&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Я, честно говоря, ожидал пересечения процентов на 20-30, ну уж никак не в 2-3%. Это может быть косвенным свидетельством того, что аудитория от насыщения еще далека.&lt;br /&gt;&lt;br /&gt;А кто же эти 20-35 тыс. украинских пользователей, которые приходят на наш сайт? Не знаю. Может быть студенты. Может HR, менеджмент и другие сотрудники софтверных компаний, которые не являются программистами.&lt;br /&gt;&lt;br /&gt;Что касается размера аудитории - вопрос остается открытым.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/5974540615212277369/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/04/blog-post.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/5974540615212277369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/5974540615212277369'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/04/blog-post.html' title='аудитория сайта'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ElKfqNRP8Bw/Sd24nbD_7nI/AAAAAAAAARM/gO7lI5DAPIc/s72-c/audience.png" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-2374771640950433417</id><published>2009-03-29T19:52:00.002+03:00</published><updated>2009-03-29T19:57:12.203+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="nginx"/><category scheme="http://www.blogger.com/atom/ns#" term="openx"/><category scheme="http://www.blogger.com/atom/ns#" term="yslow"/><title type='text'>Expires для OpenX баннеров (nginx)</title><content type='html'>Спасибо &lt;a href=&quot;http://piranha.org.ua/&quot;&gt;piranha&lt;/a&gt;, что помог с таким вот хаком:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  location /images/ {&lt;br /&gt;      proxy_pass http://127.0.0.1:81/;&lt;br /&gt;      expires 90d;&lt;br /&gt;      internal;&lt;br /&gt;  }&lt;br /&gt;  if ($args ~* &quot;contenttype=(jpeg|png|gif)$&quot;) {&lt;br /&gt;      rewrite ^/(.*) /images/$1 last;&lt;br /&gt;  }&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Фишка в том, что nginx требует, чтобы директива Expires была привязана к location. Этот хак создает специальный &quot;виртуальный&quot; location, на который затем можно установить expires.&lt;br /&gt;&lt;br /&gt;Таким образом можно кешировать медиафайлы (баннеры), которые раздает система &lt;a href=&quot;http://openx.org/&quot;&gt;OpenX&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/2374771640950433417/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/03/expires-openx-nginx.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/2374771640950433417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/2374771640950433417'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/03/expires-openx-nginx.html' title='Expires для OpenX баннеров (nginx)'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-6314747774100499555</id><published>2009-03-24T11:45:00.003+02:00</published><updated>2009-03-24T11:49:26.362+02:00</updated><title type='text'>nginx</title><content type='html'>Настроил на сервере nginx. Он обслуживает статику и работает как фронт-прокси перед Апачем и Python (WSGI cherrypy) серверами. Попробуйте его найти в списке процессов:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                           &lt;br /&gt;30386 max       20   0  150m  65m 3476 S    0  3.4   4:06.20 paster                            &lt;br /&gt;30362 max       20   0  149m  63m 3468 S    0  3.4   3:59.63 paster                            &lt;br /&gt;30328 max       20   0  149m  63m 3480 S    0  3.3   4:09.31 paster                            &lt;br /&gt;2272 mysql     20   0  111m  37m 6180 S    8  2.0 468:48.67 mysqld                            &lt;br /&gt;29822 www-data  20   0 60728  28m 5448 S    1  1.5   5:37.59 apache2                           &lt;br /&gt;29823 www-data  20   0 59748  28m 6168 S    0  1.5   5:40.39 apache2                           &lt;br /&gt;29821 www-data  20   0 60056  27m 5604 S   10  1.5   5:48.05 apache2                           &lt;br /&gt;29832 www-data  20   0 56912  24m 5540 S    1  1.3   5:58.88 apache2                           &lt;br /&gt;30839 www-data  20   0 56336  24m 5632 S    0  1.3   5:38.87 apache2                           &lt;br /&gt;29820 www-data  20   0 56048  24m 5540 S    2  1.3   5:41.11 apache2                           &lt;br /&gt;29989 www-data  20   0 55556  23m 5636 S    6  1.2   5:34.76 apache2                           &lt;br /&gt;29824 www-data  20   0 55272  23m 5744 S    0  1.2   5:51.84 apache2                           &lt;br /&gt;2107 www-data  20   0 55736  23m 5084 S    0  1.2   4:27.81 apache2                           &lt;br /&gt;12197 www-data  20   0 56320  23m 4272 S    8  1.2   2:10.17 apache2                           &lt;br /&gt;29756 root      20   0 42772  12m 7172 S    0  0.7   0:01.03 apache2                           &lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;21407 postfix   20   0  7928 3528 2748 S    0  0.2   0:00.01 smtpd                             &lt;br /&gt;21697 max       20   0 11172 1956 1268 R    0  0.1   0:00.00 sshd                              &lt;br /&gt;29829 www-data  20   0  5336 1904  768 S    0  0.1   0:18.29 nginx                             &lt;br /&gt;29830 www-data  20   0  5336 1864  768 S    0  0.1   0:21.25 nginx                             &lt;br /&gt;29828 www-data  20   0  5228 1828  768 S    0  0.1   0:16.01 nginx                             &lt;br /&gt;29827 www-data  20   0  5232 1820  768 S    0  0.1   0:18.83 nginx                             &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Чума. Плюс теперь у меня три идентичных пайтон-сервера работает, с балансировкой запросов между ними. Даунтайма теперь должно стать на порядок меньше.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/6314747774100499555/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/03/nginx.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/6314747774100499555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/6314747774100499555'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/03/nginx.html' title='nginx'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-4419593535194765062</id><published>2009-02-10T15:14:00.006+02:00</published><updated>2009-02-11T17:04:04.724+02:00</updated><title type='text'>Проблемы с Feedburner/Google миграцией</title><content type='html'>Feedburner объявил, что до 28 февраля все виды должны быть перенесены на сервера Гугл. Как по мне, не очень user friendly ход, но что делать - перенесли.&lt;br /&gt;&lt;br /&gt;В итоге сломались обновления в главном фиде сайта, http://www.developers.org.ua/feed/.&lt;br /&gt;&lt;br /&gt;Пробовал &quot;Resync Now&quot;. Отвечает &quot;Read time out&quot;. Чтение логов апача показало, что FeedBurner не докачивает фид полностью, выкачивая примерно 65-70 Кб:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;74.125.44.136 - - [10/Feb/2009:14:59:36 +0200]&lt;br /&gt;&quot;GET /feed/ HTTP/1.0&quot; 200 65831 &quot;-&quot; &quot;FeedBurner/1.0 (http://www.FeedBurner.com)&quot;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Тестовая закачка на десктоп прошла без проблем:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ curl -A &quot;FeedBurner&quot; -o z.xml http://www.developers.org.ua/feed/&lt;br /&gt;% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&lt;br /&gt;                            Dload  Upload   Total   Spent    Left  Speed&lt;br /&gt;100  248k    0  248k    0     0  20307      0 --:--:--  0:00:12 --:--:-- 17465&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Единственное объяснение - гугл резко &quot;прикрутил&quot; timeout и обрывает связь например на 5 секунде.&lt;br /&gt;&lt;br /&gt;FeedMedic молчит.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;update&lt;/span&gt;: похоже фидбернер просто получает gzip-версию фида, поэтому и размер такой.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ curl  --compressed -A &quot;FeedBurner&quot; -o z.xml http://www.developers.org.ua/feed/&lt;br /&gt;% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&lt;br /&gt;                             Dload  Upload   Total   Spent    Left  Speed&lt;br /&gt;100 65849    0 65849    0     0   4447      0 --:--:--  0:00:14 --:--:-- 14999&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;update2&lt;/span&gt;: похоже дело в медленной &quot;отдаче&quot; фида. Я сохранил содержимое фида в статический файл и заставил фидбернер взять этот файл. Resync прошел успешно и фид обновился. Теперь бы еще понять каким образом эту проблему решить. Ограничить кол-во записей блога в фиде?&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;update3&lt;/span&gt;: дело было в тормозах Вордпресса. Генерация фида с localhost занимала 13 секунд. После того, как в админке ВП уменьшили количество записей фида с 20 до 10 время генерации уменьшилось до 6 секунд. Теперь фид нормально индексируется google.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/4419593535194765062/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/02/feedburnergoogle.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/4419593535194765062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/4419593535194765062'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/02/feedburnergoogle.html' title='Проблемы с Feedburner/Google миграцией'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-8552905385305729138</id><published>2009-02-05T10:16:00.001+02:00</published><updated>2009-02-05T10:18:23.182+02:00</updated><title type='text'>В поисках спроса</title><content type='html'>Снизили цену на лого на Главной в три раза, с 2750 грн до 850 грн.&lt;br /&gt;&lt;br /&gt;Пытаемся найти цену, по которой сейчас покупают рекламу. Я конечно надеюсь, что 850 грн это &quot;слишком дешево&quot;, но нужно знать точно. Потому что если ее не покупают по 850 грн значит можно больше не париться с девелоперз и искать новую работу. И плохие новости лучше узнать побыстрее, fail early.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/8552905385305729138/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/02/blog-post.html#comment-form' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8552905385305729138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8552905385305729138'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/02/blog-post.html' title='В поисках спроса'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-250799260600504659</id><published>2009-01-29T12:29:00.000+02:00</published><updated>2009-01-29T12:30:02.268+02:00</updated><title type='text'>twitter</title><content type='html'>Читайте новости на твиттере, &lt;a href=&quot;http://twitter.com/devua&quot;&gt;twitter.com/devua&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/250799260600504659/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2009/01/twitter.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/250799260600504659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/250799260600504659'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2009/01/twitter.html' title='twitter'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-2667460619786459220</id><published>2008-12-22T14:18:00.002+02:00</published><updated>2008-12-22T14:23:44.680+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="зарплаты"/><category scheme="http://www.blogger.com/atom/ns#" term="отчеты"/><category scheme="http://www.blogger.com/atom/ns#" term="работа"/><title type='text'>тизер: новые зарплатные отчеты</title><content type='html'>Вот над чем я сейчас работаю:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_ElKfqNRP8Bw/SU-GGqwNxGI/AAAAAAAAAMw/oDfj_DJ6lAo/s1600-h/salarydb2.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 245px;&quot; src=&quot;http://1.bp.blogspot.com/_ElKfqNRP8Bw/SU-GGqwNxGI/AAAAAAAAAMw/oDfj_DJ6lAo/s400/salarydb2.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5282588337042736226&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;На мой очень субъективный взгляд новые отчеты будут куда более информативны. Заценить бета-версию можно &lt;a href=&quot;http://www.developers.org.ua/salarydb/&quot;&gt;здесь&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/2667460619786459220/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/12/blog-post_22.html#comment-form' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/2667460619786459220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/2667460619786459220'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/12/blog-post_22.html' title='тизер: новые зарплатные отчеты'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_ElKfqNRP8Bw/SU-GGqwNxGI/AAAAAAAAAMw/oDfj_DJ6lAo/s72-c/salarydb2.png" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-7083208238286003368</id><published>2008-12-16T14:28:00.003+02:00</published><updated>2008-12-16T14:34:46.189+02:00</updated><title type='text'>планета developers</title><content type='html'>Думаю над новой версией &lt;a href=&quot;http://www.developers.org.ua/planet/&quot;&gt;агрегатора блогов&lt;/a&gt;. Главное, что хочется сделать - какую-то классификацию по темам. Читать про флеш мне например совсем неинтересно, а кого-то не интересует питон например или записи на английском.&lt;br /&gt;&lt;br /&gt;Вот только совсем не ясно, как такую классификацию делать. Bayesian sort? ;)&lt;br /&gt;&lt;br /&gt;А еще у каждого участника будет ре-публикация своих фидов, примерно &lt;a href=&quot;http://www.developers.org.ua/m/max/&quot;&gt;так&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Меньше половины блогов, которые агрегируются в Планете имеют backlink/кнопку на девелоперз. Поставьте плз, код для вставки есть прямо в сайдбаре.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/7083208238286003368/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/12/developers.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/7083208238286003368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/7083208238286003368'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/12/developers.html' title='планета developers'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-6818682167303023296</id><published>2008-12-15T14:50:00.002+02:00</published><updated>2008-12-16T13:08:41.790+02:00</updated><title type='text'>Сайт &quot;немножко лежит&quot;?</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;update dec 16&lt;/span&gt;: похоже сайт был недоступен пользователям сети Воля, причем не всем. Сейчас вроде бы проблема решилась.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_ElKfqNRP8Bw/SUeMDxqi5dI/AAAAAAAAAMM/e4iMvigwu3U/s1600-h/screenshot1.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 277px; height: 149px;&quot; src=&quot;http://3.bp.blogspot.com/_ElKfqNRP8Bw/SUeMDxqi5dI/AAAAAAAAAMM/e4iMvigwu3U/s320/screenshot1.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5280343084614477266&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Это график доступа из сети Воля.&lt;br /&gt;&lt;br /&gt;Мне тут пользователи сегодня пишут, что сайт &quot;лежит&quot;, хотя у меня все открывается.&lt;br /&gt;&lt;br /&gt;Проверил через host-tracker.com -- похоже какие-то проблемы все-таки есть:&lt;br /&gt;&lt;br /&gt;&lt;table class=&quot;instant-check-res&quot; style=&quot;margin: 0pt;&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody id=&quot;tbl_head&quot; style=&quot;&quot;&gt;&lt;tr class=&quot;odd&quot;&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; class=&quot;first-col&quot;&gt;Received responses: &lt;span style=&quot;&quot; id=&quot;ok_cnt&quot;&gt;&lt;strong&gt;31&lt;/strong&gt; Ok&lt;/span&gt;&lt;span id=&quot;fail_cnt&quot;  style=&quot;color:red;&quot;&gt; &lt;strong&gt;3&lt;/strong&gt; Fail&lt;/span&gt;                            &lt;/td&gt;                         &lt;td colspan=&quot;1&quot; style=&quot;text-align: right;&quot; class=&quot;&quot;&gt;                             Average:&lt;/td&gt;                         &lt;td style=&quot;text-align: right; font-weight: bold; white-space: nowrap;&quot; id=&quot;avg_time&quot;&gt;1.57 sec&lt;/td&gt;                         &lt;td style=&quot;text-align: right; font-weight: bold;&quot; id=&quot;avg_speed&quot;&gt;102.08&lt;/td&gt;                         &lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; class=&quot;last-col&quot;&gt;                                                 &lt;br /&gt;&lt;/td&gt;                     &lt;/tr&gt;                     &lt;tr id=&quot;src_row&quot; style=&quot;display: none;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal;&quot; id=&quot;c_shost_name&quot;&gt;Charlotte&lt;/td&gt;                         &lt;td style=&quot;&quot; id=&quot;c_result&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td id=&quot;c_size&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time&quot; style=&quot;text-align: right; white-space: nowrap;&quot;&gt;0.81 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed&quot; style=&quot;text-align: right; white-space: nowrap;&quot;&gt;199.35&lt;/td&gt;                         &lt;td id=&quot;c_ip&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td id=&quot;c_partner&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://www.p30dreams.com/&quot; class=&quot;gray&quot;&gt;Persian Dreams&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;                    &lt;/tbody&gt;                    &lt;tbody id=&quot;tbl&quot; style=&quot;&quot;&gt;                    &lt;tr id=&quot;row_22&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name22&quot;&gt;Charlotte&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_result22&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size22&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time22&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;0.81 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed22&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;199.35&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip22&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner22&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://www.p30dreams.com/&quot; class=&quot;gray&quot;&gt;Persian Dreams&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_204&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name204&quot;&gt;Kiev, Ukraine&lt;/td&gt;                         &lt;td style=&quot;color: red; background-color: rgb(255, 255, 255);&quot; id=&quot;c_result204&quot; class=&quot;r&quot;&gt;Ошибка HTTP:Http_client.No_reply&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size204&quot; class=&quot;r&quot;&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td id=&quot;c_response_time204&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;40.07 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed204&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip204&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner204&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://hosted.in.ua/&quot; class=&quot;gray&quot;&gt;HOSTED&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_202&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name202&quot;&gt;Kiev, Ukraine&lt;/td&gt;                         &lt;td style=&quot;color: red; background-color: rgb(255, 255, 255);&quot; id=&quot;c_result202&quot; class=&quot;r&quot;&gt;Ошибка HTTP:Http_client.No_reply&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size202&quot; class=&quot;r&quot;&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td id=&quot;c_response_time202&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;40.10 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed202&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip202&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner202&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://hostbizua.com/&quot; class=&quot;gray&quot;&gt;HostBizUA.com&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_201&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name201&quot;&gt;Kiev, Ukraine&lt;/td&gt;                         &lt;td style=&quot;color: red; background-color: rgb(255, 255, 255);&quot; id=&quot;c_result201&quot; class=&quot;r&quot;&gt;Ошибка HTTP:Http_client.No_reply&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size201&quot; class=&quot;r&quot;&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td id=&quot;c_response_time201&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;40.07 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed201&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip201&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner201&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://prostohosting.net/&quot; class=&quot;gray&quot;&gt;ProstoHosting.NET&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_148&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name148&quot;&gt;Philadelphia, PA, US&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_result148&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size148&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time148&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;0.70 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed148&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;229.65&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip148&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner148&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://www.bluetreehost.com/&quot; class=&quot;gray&quot;&gt;Bluetreehost&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_17&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name17&quot;&gt;Montreal, QC, Canada&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_result17&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size17&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time17&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;2.21 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed17&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;72.53&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip17&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner17&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://hostiran.net/&quot; class=&quot;gray&quot;&gt;HostIran Networks&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_128&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name128&quot;&gt;Atlanta, GA, US&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_result128&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size128&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time128&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;0.83 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed128&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;192.38&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip128&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner128&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://www.netlevel.ru/&quot; class=&quot;gray&quot;&gt;NetLevel Network&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_182&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name182&quot;&gt;Houston, TX, US&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_result182&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size182&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time182&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;0.84 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed182&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;192.12&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip182&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner182&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://www.premiumreseller.com/&quot; class=&quot;gray&quot;&gt;PremiumReseller&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_135&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name135&quot;&gt;East Lansing, MI, US&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_result135&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size135&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time135&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;2.42 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed135&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;66.32&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip135&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner135&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://www.nimhost.com/&quot; class=&quot;gray&quot;&gt;NIMHOST&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_45&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name45&quot;&gt;Frankfurt, Germany&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_result45&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size45&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time45&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;0.23 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed45&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;686.55&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip45&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner45&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://www.qbem.com/&quot; class=&quot;gray&quot;&gt;QBEM&lt;/a&gt;&lt;/td&gt;                     &lt;/tr&gt;&lt;tr id=&quot;row_55&quot; style=&quot;&quot;&gt;                         &lt;td class=&quot;r&quot; style=&quot;font-weight: normal; background-color: rgb(255, 255, 255);&quot; id=&quot;c_shost_name55&quot;&gt;Kiev&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_result55&quot; class=&quot;r&quot;&gt;Ok&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_size55&quot; class=&quot;r&quot;&gt;164367&lt;/td&gt;                         &lt;td id=&quot;c_response_time55&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;0.56 sec&lt;/td&gt;                         &lt;td id=&quot;c_speed55&quot; style=&quot;text-align: right; white-space: nowrap; background-color: rgb(255, 255, 255);&quot;&gt;286.32&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_ip55&quot; class=&quot;r&quot;&gt;94.76.195.6&lt;/td&gt;                         &lt;td style=&quot;background-color: rgb(255, 255, 255);&quot; id=&quot;c_partner55&quot; class=&quot;last-col&quot;&gt;&lt;a href=&quot;http://xfes.ru/&quot; class=&quot;gray&quot;&gt;FES Hosting.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Непонятно только что с этой хренью делать? Может это UA-IX/Воля какая нибудь?</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/6818682167303023296/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/12/blog-post_15.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/6818682167303023296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/6818682167303023296'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/12/blog-post_15.html' title='Сайт &quot;немножко лежит&quot;?'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ElKfqNRP8Bw/SUeMDxqi5dI/AAAAAAAAAMM/e4iMvigwu3U/s72-c/screenshot1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-8482709784135331273</id><published>2008-12-13T17:21:00.002+02:00</published><updated>2008-12-13T17:50:15.292+02:00</updated><title type='text'>История одного бага</title><content type='html'>Началось все несколько месяцев назад. Один из клиентов сайта сообщил, что не смог опубликовать свою вакансию в нашем разделе &lt;a href=&quot;http://www.developers.org.ua/jobboard/&quot;&gt;Вакансии&lt;/a&gt;. (Для клиентов я написал специальную админку, где они самостоятельно редактируют и публикуют свои вакансии).&lt;br /&gt;&lt;br /&gt;Ошибка оказалась очень странной - статус вакансии был &quot;опубликовано&quot;, но даты показа/снятия с показа - пустые. В итоге вакансию не было видно на сайте, при этом система не давала пользователю опубликовать ее повторно, т.к. считала, что та уже опубликована.&lt;br /&gt;&lt;br /&gt;Странность в том, что в коде только _одно_ место, где вакансия получает статус &quot;опубликовано&quot;. Там же и устанавливаются даты снятия с показа. Все это в одной трансакции т.е. установить статус без даты никак не возможно:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;python&quot;&gt;&lt;br /&gt;  def publish_jobpost(self, jobpost):&lt;br /&gt;      # ...&lt;br /&gt;      jobpost.published_date = now&lt;br /&gt;      jobpost.status = &#39;publish&#39;&lt;br /&gt;      jobpost.expires_on = expires_on&lt;br /&gt;      client.jb_credit -= jobpost.price&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Вообще-то, в коде есть еще одно место, где jobad.status меняется на &#39;publish&#39;. У клиента есть возможность снять вакансию с показа. В этом случае он может затем передумать и снова &quot;включить&quot; ее.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;python&quot;&gt;&lt;br /&gt;  def toggle_vacancy(self, id):&lt;br /&gt;      if c.vacancy.status == &#39;offline&#39;:&lt;br /&gt;          status = &#39;publish&#39;&lt;br /&gt;      else:&lt;br /&gt;          status = &#39;offline&#39;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Проблема только в том, что поставить статус offline можно только из status==&#39;publish&#39;. Т.е. возвращаемся к исходной проблеме.&lt;br /&gt;&lt;br /&gt;Я честно говоря, поломал голову и бросил. Работы хватает, а глюк этот встречался только у некоторых клиентов (где-то в 10% случаев).&lt;br /&gt;&lt;br /&gt;Но затем глюк повторился еще раз. В следующем месяце - еще пару раз. Пришлось заняться багой снова. Леше Маслову пришла в голову светлая мысль - написать триггер, который будет проверять, что при insert/update даты установлены правильно если status=&#39;publish&#39;.&lt;br /&gt;&lt;br /&gt;Триггер написали и забыли. И вот наконец вчера это случилось. Триггер упал, что повлекло за собой exception, который я получил по почте, вместе с traceback&#39;ом. И что же было в трейсбеке:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;python&quot;&gt;&lt;br /&gt;Module doupy.controllers.sc:333 in toggle_vacancy&lt;br /&gt;       else:&lt;br /&gt;               c.vacancy.status = status&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Как всегда, случилось &quot;невозможное&quot;! Очевидно у записи был статус offline. Но как? И тут я вспомнил про маааленький крон-скриптик, который &quot;снимает&quot; с показа старые вакансии, у которых уже давно истек срок &quot;годности&quot;. Вот скриптик:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;br /&gt;mysql -B ... &amp;lt;&amp;lt;EOF&lt;br /&gt;update jobad_posts set post_status = &#39;offline&#39; \&lt;br /&gt;where expires_on &amp;lt; date_add(now(), interval - 2 month);&lt;br /&gt;EOF&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;И, понятно, update успешно срабатывал для черновиков, у которых expires_on == &#39;0&#39;. Понятно стало и почему так редко он проявлялся и не проявлялся ни разу у меня на рабочей машине - нужно было ждать, чтобы черновик был поврежден в результате крон вызова.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/8482709784135331273/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/12/blog-post_13.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8482709784135331273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8482709784135331273'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/12/blog-post_13.html' title='История одного бага'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-4048084175668673989</id><published>2008-12-06T13:52:00.001+02:00</published><updated>2008-12-06T13:54:21.406+02:00</updated><title type='text'>Раздел Планета на Главную?</title><content type='html'>Как вы думаете, стоит ли перенести содержимое страницы &lt;a href=&quot;http://www.developers.org.ua/planet/&quot;&gt;Планета&lt;/a&gt; на главную? Выглядеть это может например так:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.developers.org.ua/?planet=1&quot;&gt;http://www.developers.org.ua/?planet=1&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/4048084175668673989/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/12/blog-post.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/4048084175668673989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/4048084175668673989'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/12/blog-post.html' title='Раздел Планета на Главную?'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-6276730329442108557</id><published>2008-12-02T14:52:00.002+02:00</published><updated>2008-12-02T15:28:46.795+02:00</updated><title type='text'>Python gotcha</title><content type='html'>Сегодня делал второй (пятый) выпуск &lt;a href=&quot;http://www.developers.org.ua/newsletter/&quot;&gt;рассылки&lt;/a&gt;. Начиная с четвертого выпуска для рассылок используется свой код на Python. И вот сегодня несколько человек написали, что они не могут прочесть письмо т.к. одни кракозябры.&lt;br /&gt;&lt;br /&gt;Я конечно тестировал код перед рассылкой и у меня в гмейл все показывалось нормально. Выяснился забавный баг. Письмо у меня собирается примерно так:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;   msgText = MIMEText(html_version.encode(&#39;utf8&#39;), &#39;html&#39;, &#39;utf8&#39;)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Здесь html_version - это unicode-строка, которую я кодирую в UTF, а последний аргумент &#39;utf8&#39; указывает MIME-кодировку полученного объекта. Теперь начинается интересное. Кодировки MIME с названием &quot;utf8&quot; не существует, а существует &quot;utf-8&quot; (с дефисом). На питоне можно писать и так и эдак, разницы никакой, а вот для внешнего мира это оказалось существенно.&lt;br /&gt;&lt;br /&gt;Непонятно, правда, почему &lt;a href=&quot;http://www.python.org/doc/2.5.2/lib/module-email.html&quot;&gt;email lib&lt;/a&gt; не может делать эту подстановку за пользователя. Зафайлил &lt;a href=&quot;http://bugs.python.org/issue4487&quot;&gt;баг&lt;/a&gt; в трекер.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/6276730329442108557/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/12/python-gotcha.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/6276730329442108557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/6276730329442108557'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/12/python-gotcha.html' title='Python gotcha'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-3622997549799056938</id><published>2008-11-29T20:56:00.008+02:00</published><updated>2008-12-01T11:09:42.614+02:00</updated><title type='text'>Делаю профили.. затягивает</title><content type='html'>&lt;div&gt;Наконец-то пишу функционал, которым пользуюсь сам. Это прет неподеццки.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Что уже сделано:&lt;div&gt;&lt;ul&gt;&lt;li&gt;публичный адрес странички профиля, напр. &lt;a href=&quot;http://www.developers.org.ua/m/max/&quot;&gt;http://www.developers.org.ua/m/max/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;загрузка фоток (любого размера, при загрузке масштабируются до 200 пикселей по ширине), &lt;a href=&quot;http://www.developers.org.ua/members/3050/&quot;&gt;пример&lt;/a&gt;&lt;/li&gt;&lt;li&gt;загрузка аватарок пользователей с gravatar.com, &lt;a href=&quot;http://www.developers.org.ua/members/2732/&quot;&gt;пример&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ре-публикация ленты твиттера, если пользователь указал свой twitter id, &lt;a href=&quot;http://www.developers.org.ua/members/6283/&quot;&gt;пример&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;публичная страничка &lt;a href=&quot;http://www.developers.org.ua/members/&quot;&gt;Участники&lt;/a&gt;, пока правда малофункциональная&lt;/li&gt;&lt;li&gt;поиск участника по имени&lt;/li&gt;&lt;li&gt;форма &quot;Написать пользователю&quot; - ее реально используют, а одни хитрые друзья пытались через нее своими вакансиями спамить :)&lt;/li&gt;&lt;li&gt;грамотный SEO для страниц участников, &lt;a href=&quot;http://www.google.com.ua/search?q=%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9+%D0%94%D0%B5%D0%B3%D0%B5%D0%BB%D0%B5%D1%80&amp;amp;ie=utf-8&amp;amp;oe=utf-8&quot;&gt;пример1&lt;/a&gt;, &lt;a href=&quot;http://www.google.com.ua/search?q=%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9+%D0%94%D0%B5%D0%B3%D0%B5%D0%BB%D0%B5%D1%80&amp;amp;ie=utf-8&amp;amp;oe=utf-8&quot;&gt;пример2&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Что хочу сделать:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;управление емейл подписками (кнопка Отписаться)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;функция &quot;Друзья&quot;, для построения сети контактов :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ре-публикация рсс-ленты пользователя, например личного блога, который нельзя поставить в Планету&lt;/li&gt;&lt;li&gt;рейтинг пользователей: раздача +/- другим участникам&lt;br /&gt;&lt;/li&gt;&lt;li&gt;мини-аватарки 24х24, как на Хабре&lt;/li&gt;&lt;li&gt;загрузка аваторок из гмейл, через XMPP&lt;/li&gt;&lt;li&gt;загрузка резюме в формате doc/html/pdf (?)&lt;/li&gt;&lt;li&gt;функция &quot;Группы&quot;&lt;/li&gt;&lt;li&gt;функция &quot;ищу работу&quot;: галочка в профиле, страничка со списоком пользователей, которые ищут работу&lt;/li&gt;&lt;/ul&gt;А что хочется вам?&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/3622997549799056938/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/11/blog-post_29.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/3622997549799056938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/3622997549799056938'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/11/blog-post_29.html' title='Делаю профили.. затягивает'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-1601287343963228110</id><published>2008-11-11T09:46:00.005+02:00</published><updated>2008-11-11T14:35:16.322+02:00</updated><title type='text'>Разработка оживает</title><content type='html'>Кризис кризисом, но разработка на developers.org.ua понемногу оживает. На этой неделе на сайте появились:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;новый &lt;a href=&quot;http://www.developers.org.ua/calendar/&quot;&gt;Календарь&lt;/a&gt; (без фреймов)&lt;/li&gt;&lt;li&gt;облако тегов в &lt;a href=&quot;http://www.developers.org.ua/blog/&quot;&gt;Архиве&lt;/a&gt; блога&lt;/li&gt;&lt;li&gt;новый алгоритм показа Похожие статьи в Блоге&lt;/li&gt;&lt;li&gt;поддержка поля Город в &lt;a href=&quot;http://www.developers.org.ua/jobboard/&quot;&gt;Вакансиях&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;И наконец самое главное: зачатки &quot;социальной сети&quot;, публичные странички профилей пользователей. Вот например &lt;a href=&quot;http://www.developers.org.ua/members/389/&quot;&gt;Сергей Волошин&lt;/a&gt;, &lt;a href=&quot;http://www.developers.org.ua/members/106/&quot;&gt;А4&lt;/a&gt; и &lt;a href=&quot;http://www.developers.org.ua/members/1/&quot;&gt;я&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Спасибо &lt;a href=&quot;http://www.developers.org.ua/members/6038/&quot;&gt;Леше Маслову&lt;/a&gt; за активное участие в разработке. Pair programming - это оказывается увлекательное занятие.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/1601287343963228110/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/11/blog-post_11.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/1601287343963228110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/1601287343963228110'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/11/blog-post_11.html' title='Разработка оживает'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-6493055112515307753</id><published>2008-11-03T16:48:00.003+02:00</published><updated>2008-11-03T16:52:25.063+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="pylons"/><title type='text'>Django, дубль два</title><content type='html'>В мае вместе с &lt;a href=&quot;http://piranha.org.ua&quot;&gt;Соловьевым&lt;/a&gt; мы пробовали сделать интеграцию с Django, тогда эти ничем хорошим не закончилось. Хочу попробовать еще раз, на этот раз подойти к проблеме с другой стороны. Хочу вклеить существующий legacy код на пилонс в новое Django приложение.&lt;br /&gt;&lt;br /&gt;Зачем? Напишу, если интеграция будет успешной. :)</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/6493055112515307753/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/11/django.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/6493055112515307753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/6493055112515307753'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/11/django.html' title='Django, дубль два'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-8248427766941236363</id><published>2008-11-03T10:27:00.003+02:00</published><updated>2008-11-03T11:01:26.862+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="аналитка"/><category scheme="http://www.blogger.com/atom/ns#" term="зарплаты"/><title type='text'>О достоверности базы зарплат</title><content type='html'>Хороший вопрос:&lt;br /&gt;&lt;blockquote&gt;Возможен ли вариант что группа людей (скажем человек 50), договорилась и заполнила &lt;a href=&quot;http://www.developers.org.ua/salary-db/survey/&quot;&gt;анкеты&lt;/a&gt; демпинговыми данными (например сказали что они получают 100 долл и не больше, или наоборот поставили 3000). Тогда ведь актуальность информации теряется.&lt;br /&gt;&lt;br /&gt;Можете ли вы гарантировать что накрутчики не влияют на рейтинг и он не выходит за рамки погрешности проценов в 5?&lt;br /&gt;&lt;/blockquote&gt;Гарантировать - не можем. Я даже не могу оценить количественно достоверность нашей статистики, мы ведь не делаем статистическую &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B0&quot;&gt;выборку&lt;/a&gt;.  С анонимным анкетированием от накруток особенно сложно защититься, т.к. нет идентификации пользователей.&lt;br /&gt;&lt;br /&gt;Сейчас все анкеты просматриваются модератором и при необходимости отклоняются. Вот последние анкеты (3 - Киев):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;+-----------+-----------------+----------------+----------+----------+&lt;br /&gt;| survey_id | submission_date | monthly_salary | status   | location |&lt;br /&gt;+-----------+-----------------+----------------+----------+----------+&lt;br /&gt;|      6160 | 2008-11-03      |           1200 | approved |        3 |&lt;br /&gt;|      6159 | 2008-11-03      |           3000 |          |        3 |&lt;br /&gt;|      6155 | 2008-11-02      |           1700 | approved |        3 |&lt;br /&gt;|      6154 | 2008-11-02      |           2700 | approved |        3 |&lt;br /&gt;|      6153 | 2008-11-02      |           2000 | approved |        3 |&lt;br /&gt;|      6150 | 2008-11-01      |            700 | approved |        3 |&lt;br /&gt;|      6147 | 2008-11-01      |           6000 |          |        3 |&lt;br /&gt;|      6146 | 2008-11-01      |           1250 | approved |        3 |&lt;br /&gt;|      6143 | 2008-11-01      |           1200 | approved |        3 |&lt;br /&gt;|      6142 | 2008-11-01      |           1320 | approved |        3 |&lt;br /&gt;|      6141 | 2008-11-01      |           1300 | approved |        3 |&lt;br /&gt;|      6140 | 2008-11-01      |           1500 | approved |        3 |&lt;br /&gt;|      6133 | 2008-11-01      |           1850 | approved |        3 |&lt;br /&gt;+-----------+-----------------+----------------+----------+----------+&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Плюс график динамики зарплат на главной рассчитывается по упрощенной схеме.&lt;br /&gt;&lt;br /&gt;Но в целом, да, это проблема. Т.е. накруток (аномальных всплесков активности) пока замечено не было, но не могу гарантировать что их не было в прошлом или что мы сможем отразить такую атаку в будущем.&lt;br /&gt;&lt;br /&gt;Но это  не значит, что сделать ничего нельзя. Обещаю заняться системой анти-флуда как только запустим новую Базу Компаний. Есть несколько идей, что можно сделать, но говорить подробно не хочу. ;)&lt;br /&gt;&lt;br /&gt;Ваши идеи и помощь с реализацией принимаются с благодарностью.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/8248427766941236363/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/11/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8248427766941236363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/8248427766941236363'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/11/blog-post.html' title='О достоверности базы зарплат'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1970288943741103769.post-3858863188722186540</id><published>2008-10-31T09:11:00.003+02:00</published><updated>2008-10-31T14:10:56.673+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="кризис"/><category scheme="http://www.blogger.com/atom/ns#" term="продажи"/><title type='text'>Оптимизируем продажи</title><content type='html'>Вот такое письмо разослал сегодня нашим рекламодателям. Послушаю &lt;a href=&quot;http://lib.ru/MEMUARY/ZHZL/ford.txt&quot;&gt;Форда&lt;/a&gt;, который говорил, что лучше продавать дешевле или даже в убыток, чем не продавать совсем. Посмотрим, какой будут результат.&lt;br /&gt;&lt;br /&gt;--------------------------------------------------&lt;br /&gt;&lt;br /&gt;Уважаемые клиенты &lt;a href=&quot;http://developers.org.ua/&quot; target=&quot;_blank&quot;&gt;developers.org.ua&lt;/a&gt;,&lt;br /&gt;&lt;br /&gt;Спасибо вам за то, что работаете с нами. У меня есть для вас хорошие новости. :)&lt;br /&gt;&lt;br /&gt;Экономическая ситуация в стране и мире сейчас явно ухудшается. В условиях финасовой нестабильности очевидно что первыми под нож идут рекламные и маркетинговые бюджеты.&lt;br /&gt;&lt;br /&gt;Мы хотим, чтобы и в этим условиях площадка  &lt;a href=&quot;http://developers.org.ua/&quot; target=&quot;_blank&quot;&gt;developers.org.ua&lt;/a&gt; оставалась эффективной и выгодной для вас, поэтому мы пересмотрели наш прайс-лист.  Некоторые позиции подешевели в разы (например лого в Вакансиях). Плюс появилась возможность покупать баннеры не на месяц, а на тысячи показов. При покупке логотипа на Главной или в Вакансиях вы получаете бесплатные текстовые вакансии.&lt;br /&gt;&lt;br /&gt; Новые цены см. на сайте, &lt;a href=&quot;http://www.developers.org.ua/pages/advertising/&quot; target=&quot;_blank&quot;&gt;http://www.developers.org.ua/&lt;wbr&gt;pages/advertising/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Очень рассчитываем, что даже с урезанными/замороженными бюджетами наша площадка останется привлекательной. Ведь жизнь продолжается и &quot;то, что нас не убивает, делает нас сильнее&quot;. Пережившие кризис получат отличную фору перед менее удачливыми/расторопными конкурентами.</content><link rel='replies' type='application/atom+xml' href='http://unblog.developers.org.ua/feeds/3858863188722186540/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://unblog.developers.org.ua/2008/10/blog-post_31.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/3858863188722186540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1970288943741103769/posts/default/3858863188722186540'/><link rel='alternate' type='text/html' href='http://unblog.developers.org.ua/2008/10/blog-post_31.html' title='Оптимизируем продажи'/><author><name>Max Ischenko</name><uri>http://www.blogger.com/profile/04804052850217494476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>