<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Игорь Артамонов &#187; Python</title>
	<atom:link href="http://artamonov.ru/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://artamonov.ru</link>
	<description>Посмотрим, глубока ли кроличья нора</description>
	<lastBuildDate>Fri, 21 May 2010 11:51:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google App Engine</title>
		<link>http://artamonov.ru/2010/01/28/google-app-engine/</link>
		<comments>http://artamonov.ru/2010/01/28/google-app-engine/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 14:57:33 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[PaaS]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=371</guid>
		<description><![CDATA[Погоняв Google App Engine пару месяцев расскажу о впечатлениях от него.
Платформа несомненно интересная, и будет очень полезна startup&#8217;ам, т.к. позволяет сосредоточится на решении своих конкретных задач, отдав все что не является конкурентым преимущество на откуп платформе и её сервисам.
К сожалению прям вот взять любой сайт и запустить его на GAE не получится, нужно делать именно [...]]]></description>
			<content:encoded><![CDATA[<p>Погоняв <a href="http://code.google.com/appengine/">Google App Engine</a> пару месяцев расскажу о впечатлениях от него.<br />
Платформа несомненно интересная, и будет очень полезна startup&#8217;ам, т.к. позволяет сосредоточится на решении своих конкретных задач, отдав все что не является конкурентым преимущество на откуп платформе и её сервисам.</p>
<p>К сожалению прям вот взять любой сайт и запустить его на GAE не получится, нужно делать именно под него, на Python или JVM, и нужно хорошо понимать как это работает. Я смотрел лишь связку Python + <a href="http://code.google.com/p/google-app-engine-django/">Django</a>. Многие преимущества Django тут отсутствуют (например знаменитая <a href="http://code.google.com/p/google-app-engine-django/">админка django</a>), но тем не менее результат получается очень быстро и вполне качественно. Для JVM есть многообещающий <a href="http://gaelyk.appspot.com/">Gaelyk</a>, ну и куча прочих framework&#8217;ов.<br />
<span id="more-371"></span></p>
<h2>Плюсы</h2>
<ul>
<li>бесплатен для небольшого проекта, и очень подходит для стартапов, с непостоянной посещаемостью. 2-3 тысячи посетителей в день обошлись в 10 центов, на совершенно не оптимизированном сайте. На нормальном должно держать тысяч 5, хотя зависит от структуры сайта, на каком-то сайте и пара сотен упрется в такой предел</li>
<li>очень масштабируемо, автоматически. Мо;но не боятся слэшдот/дигг/хабра-эффектов, все выдержит.</li>
<li>готовая обвязка инструментами и сервисами:</li>
<ul>
<li>мониторинг текущей загрузки</li>
<li>версионность приложения (может работать одновременно несколько версий, можно к примеру тестировать новую версию, пока пользователи видят лишь предыдущую)</li>
<li>готова вся работа с пользователем (через Google Accounts), не нужно заморачиваться с регистрацией, защитой от ботов, сменой и восстановлением пароля и пр. пользовательских данных,проверкой прав и т.д.</li>
<li>cron, message queue, отправка писем, работа с графикой и web-ом</li>
</ul>
</li>
</ul>
<h2>Минусы</h2>
<ul>
<li>хостит только поддомен, т.е. домен второго уровня прицепить не получится. поэтому все сайты в виде www.* Причина в том что GAE распределенн по разным датацентрам, и автоматическую балансировку трафика они могут сделать лишь для поддомена. Не известно будут ли они решать эту проблему, это хоть и всем не нравится, но жить с этим вполне можно.</li>
<li>нет поиска, что для компании, изначально на это делающей ставку, вообще странно. Мне даже в голову не могло придти что у Google не будет поиска, и ничуть не смутило то что не увидел этого в презентациях, ведь это само собой разумеющееся. Но факт: поиска нет.</li>
<li>нет нормального админского инструмента для работы с БД. Есть некий GQL, но этого не достаточно, он не поможет если вам нужно быстро найти пару &laquo;плохих&raquo; записей чтобы поправить вручную. Не заработает, например, потому что скорее всего для вашей ситуации (условия выборки) не будет индекса, а без индекса запрос не выполнится. Нормально пролистать, отсортировать и пр. тоже не получится. В общем чтобы полноценно админить БД придется писать код, с нуля, так как стандартная админка Django не работает <img src='http://artamonov.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </li>
<li>нет полноценной отладки, не посмотреть логи с ошибкой. К тому же SDK и боевой сервер иногда по разному себя ведут на одном и том же коде, так что это проблема. Спасает лишь то что одновременно могут быть задеплоены несколько версий, одну видят обычные пользователи, вторую вы можете самостоятельно протестировать, не показывая пока не убедитесь что все работает.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2010/01/28/google-app-engine/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Dataset Publisher</title>
		<link>http://artamonov.ru/2009/12/15/dataset-publisher/</link>
		<comments>http://artamonov.ru/2009/12/15/dataset-publisher/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 10:08:21 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Мои проекты]]></category>
		<category><![CDATA[Новые технологии]]></category>
		<category><![CDATA[datasets]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[torrent]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=344</guid>
		<description><![CDATA[
Кто нибудь занимается datamining, textmining, ir и прочими делами с большими массивами данных? Вот запустил небольшой сервис: datasetpublisher.com &#8211; торрент трекер для коллекций данных. Т.е. чтобы не качать очередные 5G дампа википедии со скоростью 70Kb/s (докачается как раз к моменту когда выложат новый дамп), а скачать с нормальной скоростью через торрент. 
Только запустил, поэтому там [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://artamonov.ru/wp-content/uploads/2009/12/datasetpublisher.png" alt="datasetpublisher" title="datasetpublisher" width="200" height="122" style="float: right; margin-left: 10px; margin-bottom: 10px" /></p>
<p>Кто нибудь занимается datamining, textmining, ir и прочими делами с большими массивами данных? Вот запустил небольшой сервис: <a href="http://www.datasetpublisher.com">datasetpublisher.com</a> &#8211; торрент трекер для коллекций данных. Т.е. чтобы не качать очередные 5G дампа википедии со скоростью 70Kb/s (докачается как раз к моменту когда выложат новый дамп), а скачать с нормальной скоростью через торрент. </p>
<p>Только запустил, поэтому там пока пусто, но будем наполнять. Если есть желание и есть что &#8211; то выкладывайте. Я, в свою очередь, постараюсь донести об этом сервисе до всех заинтересованных лиц.</p>
<p>Проект запущен на <a href="http://code.google.com/appengine/">Google App Engine</a>, что собственно и послужило причиной его появления. Уж очень я в последнее время заинтересовался этой платформой, и решил поэксперементировать. А так как я очень не люблю что-то делать &laquo;в корзину&raquo;, и считаю что подобные эксперименты, помимо исследовательской цели, должны принести конкретный применимый сейчас результат. И вспомнил разговор с <a href="http://ivan.begtin.name/">Иваном Бегтиным</a>, незадолго до этого, о том что неплохо бы иметь подобный ресурс. Теперь он есть. И с GAE разобрался, на него еще посмотрю как вести себя будет, и напишу свое мнение.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2009/12/15/dataset-publisher/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Производительность ruby</title>
		<link>http://artamonov.ru/2007/02/13/ruby-perfomance/</link>
		<comments>http://artamonov.ru/2007/02/13/ruby-perfomance/#comments</comments>
		<pubDate>Tue, 13 Feb 2007 10:45:46 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[оптимизация]]></category>

		<guid isPermaLink="false">http://www.artamonov.ru/2007/02/13/ruby-perfomance/</guid>
		<description><![CDATA[В минувшую субботу, на rupy 2007 возникло небольшое обсуждение с Андреем Таранцевым по поводу скорости вычисления числа из ряда фибоначи в ruby/jruby, что было одним из тестов производительности языков. Проблема возникла в том что последний очень медленно считал, в сотни и тысячи раз медленней java. JRuby вычисляет 40 элемент за 26 минут, а java 1,7 [...]]]></description>
			<content:encoded><![CDATA[<p>В минувшую субботу, на <a href="http://www.rupy.ru/">rupy 2007</a> возникло небольшое обсуждение с Андреем Таранцевым по поводу скорости вычисления числа из ряда фибоначи в ruby/jruby, что было одним из тестов производительности языков. Проблема возникла в том что последний очень медленно считал, в сотни и тысячи раз медленней java. JRuby вычисляет 40 элемент за 26 минут, а java 1,7 секунды. Python тоже не быстр, но ближе к java.<br />
Андрей предположил что это связано с тем что язык динамический, все можно переопределять, и т.д., поэтому мат. операции такие медленные. Я вот проверил, у меня возникло подозрение что вина в рекурсии, посчитал время вычисления для разных языков:<br />
<img src="/wp-content/images/200702/rubyfib.png" alt="Ruby Recursion Benchmark" /><br />
Если тоже самое вычислять итеративным алгоритмом, то время резко падает и остаётся в районе миллисекунд, без особого видимого роста, по крайней мере на таком объеме. Я знал что рекурсия это не очень быстро, но честно говоря никогда не замерял насколько, и очень удивлён что такое огромное влияние.<br />
Вот такое вот разочарование <img src='http://artamonov.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Если на чистоту то и java тоже не любит часто любимую мной рекурсию, даже такую простую, т.к. тоже не имеет <a href="http://en.wikipedia.org/wiki/Tail_recursion">tail call optimization</a>, и даже в любой момент может упасть по OutOfMemoryException из-за рекурсии, я уже спотыкался на этом когда то.</p>
<p>PS: на самом деле для ruby, а точнее Ruby on Rails, все это насчёт рекурсии совсем неважно, но иметь ввиду все же надо.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2007/02/13/ruby-perfomance/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Русские буквы в Django</title>
		<link>http://artamonov.ru/2006/02/07/russkie-bukvyi-v-django/</link>
		<comments>http://artamonov.ru/2006/02/07/russkie-bukvyi-v-django/#comments</comments>
		<pubDate>Tue, 07 Feb 2006 18:38:03 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.artamonov.ru/2006/02/07/russkie-bukvyi-v-django/</guid>
		<description><![CDATA[Привыкнув к Java, с её идеей о том что все строки всегда хранятся в Unicode, я сильно парюсь в Python.
Гдето чтото не так написал, или не сконвертировал из нужной кодировки в другую нужную, и все, и все полетело   Вот тут, в Django, например, чтобы заменить регекспом строку на русском, надо делать так:

#-*- coding: [...]]]></description>
			<content:encoded><![CDATA[<p>Привыкнув к Java, с её идеей о том что все строки всегда хранятся в Unicode, я сильно парюсь в Python.</p>
<p>Гдето чтото не так написал, или не сконвертировал из нужной кодировки в другую нужную, и все, и все полетело <img src='http://artamonov.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Вот тут, в Django, например, чтобы заменить регекспом строку на русском, надо делать так:</p>
<pre><code>
#-*- coding: cp1251 -*-

import re
instr = unicode(req.POST['param'], 'utf-8')
pat = re.compile(u'этоубрать', re.U)
instr = re.sub(pat, '_', instr)
</code></pre>
<p>а при выплевывании на страницу надо так</p>
<pre><code>
messages.append(unicode('Наше сообщение', 'cp1251').encode('utf-8'))
</code></pre>
<p>А я все то там, то тут пропускаю, то unicode() то encode() не в том месте, а они все поочереди идут, на выходе непонятно что получается <img src='http://artamonov.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Теперь разобрался вроде.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2006/02/07/russkie-bukvyi-v-django/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
