<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Vurt.ru blog</title>
 
 <link href="http://www.vurt.ru" />
 <updated>2012-02-23T06:04:33-08:00</updated>
 <id>http://www.vurt.ru</id>
 <author>
   <name>Mikhail Kashkin</name>
   <email>mkashkin-gmail-com</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/app-engine" /><feedburner:info uri="app-engine" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Вегетарианцы</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/8hG-uHrRqMc/vegetable-my-brain" />
   <updated>2012-02-23T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2012/02/vegetable-my-brain</id>
   <content type="html">&lt;p&gt;Мне часто попадаются люди которые из-зо всех сил кричат, что есть животных это зло; что всех кто убивает зверюшек ждут загробные мучения; что портится карма, а потом она вернется через внуков или в старости.&lt;/p&gt;

&lt;p&gt;Во-первых в мире нет магии, нет загробной жизни, кармы, родовых проклятий и святая вода не спасет от вампиров. Кстати, то что святая вода не помогает от вампиров легко доказывается тем, что она не действует на зомби, а судя по эпосу у них одна и та же основа.&lt;/p&gt;

&lt;p&gt;Есть организм и есть законы по которым он работает. Есть вариативность конкретных людей и их вкусов. Наверное есть классификация людей по их гастрономическим пристрастиям, но я такую не встречал и не вижу практической ценности в публичном распространении такой информации. Она важна для эндокринологов и популяризация этого знания скорее всего будет вредной.&lt;/p&gt;

&lt;p&gt;Веганство, вегетарианство и всякие увлечения диетами — это мода. Хорошо когда увлечение диетами приводит человека к тому что он начинает изучать что же собственно он есть и что нужно его организму. Но когда люди как бараны начинают верить очередному "гуру", то это может иметь очень плохие последствия. Под плохими я подразумеваю всего-то необратимый вред для организма и смерть. Причем параллельно с выносом мозга окружающим.&lt;/p&gt;

&lt;p&gt;Я год жил как вегетарианец, причем даже не пил алкоголь все это время (наверное за год выпил эквивалент 50 грамм спирта). Мне хотелось провести эксперимент над собой, хотелось понять могу ли контролировать эту сферу. Оказалось возможно.&lt;/p&gt;

&lt;p&gt;Вегетарианцем быть сложно, в каждом заведении 90% меню просто было недоступно. Стоимость чека ощутимо возрастает, при этом поесть можно далеко не везде, а только в местах подороже. Самое смешное, что специализированные места со специализированным меню для вегетарианцев являются самым большим фарсом. Все блюда из сои называются так же как и их мясные аналоги. Если человек отказался от мяса, то зачем же ему есть "гамбургер" или "бурито"? Почему нельзя по другому оформить блюдо и назать по другому и скрыть то что вам не хватает мяса.&lt;/p&gt;

&lt;p&gt;Попытка убедить окружающих, что мясо кушать нельзя производит стойкое впечатление, что люди так сильно страдают, что хотят хоть как-то оправдать свои страдания забивая мусором голову окружающим, стараясь сформировать у них ложные ценности пользуясь отсутствием четкого мнения. Собственно так как и происходят все holy war.&lt;/p&gt;

&lt;p&gt;Если вы не едите мясо потому что это делает вас лучше, позволяет "чувствовать легкость", избавляет от "тяжелой энергии", то вы идиоты. Вегетарианство — это не идеология, а мода.&lt;/p&gt;

&lt;p&gt;Если вы не едите мясо потому что вам так нравится, то мне все равно. Это личное мнение и его надо уважать, но до того момента как вы попытаетесь сделать меня лучше.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/8hG-uHrRqMc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2012/02/vegetable-my-brain</feedburner:origLink></entry>
 
 <entry>
   <title>Почему я хочу уехать</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/J6K9ihkoSw8/relocate" />
   <updated>2012-02-01T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2012/02/relocate</id>
   <content type="html">&lt;p&gt;Хочу рассказать почему я хочу уехать отсюда. У меня есть дочка, ей скоро будет полтора года. Те у кого есть свои дети наверное поймут ту бесконечную радость которую родители могут получить даже просто смотря на свое маленькое чудо.&lt;/p&gt;

&lt;p&gt;Так вот недавно она заболела, не буду погружать в подробности мракобесия местного здравоохранения. Но очень кратко выскажу некоторые результаты:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Мы попали в больницу где ни один врач не мог оказать квалифицированную помощь по достаточно рядовой болезни&lt;/li&gt;
&lt;li&gt;Нас заставили находиться в больнице и за ночь пребывания заразили болезнью (в детских отделениях вообще всегда эпидемия какой-то болезни из-за санитарных условий) которая была существенно опаснее (!)&lt;/li&gt;
&lt;li&gt;Все мамаши которые были в больнице сидели как тупые курицы и даже не пытались узнать о том чем и зачем их лечат, не говоря уже о том, чтобы оплатить копеечные анализы самостоятельно или вообще проявить какую-то активность&lt;/li&gt;
&lt;li&gt;Наш участковый врач пытался продать нам несуществующее лекарство на персональном бланке (читай получить откат) пользуясь нашим беспокойством&lt;/li&gt;
&lt;li&gt;Мы не смогли подключив все свои контакты и предлагая оплату найти врача который даже в частном порядке стал бы следить за ребенком и мог бы квалифицировано ответить на наши вопросы (всякие шаманские припарки, гомеопатию, уринотерапию и прочий бред мы не принимаем). Им не нужна лишняя ответственность&lt;/li&gt;
&lt;li&gt;С деньгами или без мы не можем найти в принципе кого-то кто может помочь с элементарной болезнью (кишечная инфекция, она #2 по причине  смертности младенцев, но в целом болезнь очень распространенная)&lt;/li&gt;
&lt;li&gt;Мы не можем защититься от таких проблем в будущем, оказалось что платного медстрахования в принципе нет (в Одессе есть только Интосана которая пришлет "скорую" только после подписания полиса, вместо страховки покрывающей лечение у них депозит)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Выводы следующие:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Мы должны сами очень сильно повышать свои навыки и знания в медицине чтобы бороться с элементарными болезнями. Это само по себе не плохо, но не может быть единственным условием выживания&lt;/li&gt;
&lt;li&gt;Жители Украины жрут своих детей, им насрать на свое потомство и они не задумываются о том как даже проявить заботу к своему чаду. Вообще украинцы очень поганый народ, они пассивны, глупы, недальновидны. Это очень сильно было видно в критической ситуации, казалось бы инстинкты материнства должны помогать.&lt;/li&gt;
&lt;li&gt;Даже если готов платить, то ты все равно никому не нужен. Нет кого-то кому можно заплатить и получить гарантии хотя бы видимости помощи.&lt;/li&gt;
&lt;li&gt;С детьми пассивных и тупых родителей придется воспитывать свою дочь если оставаться тут.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Понимаю что может быть достаточно эмоционально, но поверьте за каждым словом есть множество деталей, которые сократил, а то пост больше бы походил на произведения Кафки о том как я боролся с системой. Раньше в фильмах или выступлениях клоунов многие уповали на славянскую солидарность и теплоту. Так вот это все ложь, не знаю насколько искренняя улыбка американцев, но тут нет ни улыбок ни теплоты ни участия. Есть просто тупое молчание людей которым ничего не надо. Самое страшное — это попытаться что-то менять. Тебя попытаются сожрать свои же. Если вы в комментариях хотите написать что-то в стиле "вали", то совершенно напрасно. Если вы думаете, что не пытался, то тоже зря, может быть кто-то и сделал больше, но я точно не из тех кто не сделал ничего.&lt;/p&gt;

&lt;p&gt;Я не говорю, что прощаюсь или уезжаю прямо сейчас, но это мои мысли и настроения которые уже давно в голове.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Обновление&lt;/strong&gt;. Прошу прощения у тех кого ввел в заблуждение, Алисия сейчас здорова. Мы болели в ноябре, но еще раньше, в сентябре в Турции попали в госпиталь с подозрением на ту же болезнь и могли сравнить уровень тут и там.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/J6K9ihkoSw8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2012/02/relocate</feedburner:origLink></entry>
 
 <entry>
   <title>Блог vurt.ru теперь на github</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/oN6Scc3Ms4s/vurtru-on-github-now" />
   <updated>2012-01-31T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2012/01/vurtru-on-github-now</id>
   <content type="html">&lt;p&gt;Наверное уже заметили в своих RSS ридерах десятки нотификаций о якобы новых постах. К сожалению этого не удалось избежать. Этот блог переехал в очередной раз. Удивленно понимаю, что в четвертный, сначала были посты в моем старом ЖЖ, потом на Tublr'е, потом на GAE и теперь наконец-то на github'е. Но при этом хочу сказать что опять получил удовольствие и считаю что этот шаг во имя прогресса.&lt;/p&gt;

&lt;p&gt;Не планирую эту заметку делать большой, но если вы хотите получить такой же прекрасный сайт, то можете &lt;a href="https://github.com/xen/xen.github.com"&gt;форкнуть мой блог на github'е&lt;/a&gt;. А еще лучше воспользоваться инструкцией на специальном сайте &lt;a href="http://jekyllbootstrap.com/"&gt;jekyllbootstrap.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Особая благодарность сервису комментариев DISQUS который позволил сохранить все комментарии просто перезалив карту ссылок.&lt;/p&gt;

&lt;p&gt;P.S. План по удалению всех своих проектов с GAE формально выполнен.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/oN6Scc3Ms4s" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2012/01/vurtru-on-github-now</feedburner:origLink></entry>
 
 <entry>
   <title>RFC: formgear</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/1KOB-fuMagc/RFC-formgear" />
   <updated>2012-01-27T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2012/01/RFC-formgear</id>
   <content type="html">&lt;p&gt;Давно хотелось подумать о том каким должен быть framework которым мне бы хотелось пользоваться. Некоторые мысли оформил в ввиде эксперимента и хотел бы получить обратную связь. В этой статье речь идет о том как формировать модели.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Внимание, код не является полностью работающим, но является прототипом. Цель публикации документации — привлеч внимание&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;formgear — это активно развиваемый проект идея которого в том, чтобы максимально упростить работу по созданию сайтов.&lt;/p&gt;

&lt;p&gt;Когда планирую сайт, то делаю его в несколько простых этапов. Перый это подготовка что-то типа "карты сайта". Обычно
назваю этот документ &lt;code&gt;sitemap.txt&lt;/code&gt;. Пример такого документа:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- Главная страница
- Новости
  - Страница новости
  - Архив
- О нас
- Форма заказа
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;После этого приступаю к формированию списков типов контента на сайте, например в примере выше видно, что есть
приблизительно такой список:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Новость&lt;/li&gt;
&lt;li&gt;Страница текста (скорее всего страница "О нас")&lt;/li&gt;
&lt;li&gt;Форма заказа&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Расписав каждый тип данных приблизительно в таком виде, можно понять какие структуры данных будут. Вот пример описания
Новости:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Название (строка)&lt;/li&gt;
&lt;li&gt;Краткий текст&lt;/li&gt;
&lt;li&gt;slug&lt;/li&gt;
&lt;li&gt;Тело новости&lt;/li&gt;
&lt;li&gt;Картинка&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Как программисту кажется, что такого описания уже должно быть достаточно чтобы нажать какую-то магическую кнопку и
получить работающий сайт. Для этого и создается &lt;strong&gt;formgear&lt;/strong&gt;. Взять какой-то простой и предсказуемый синтаксис
(никакого сраного XML) и сделать так чтобы после создания документов все магическим образом заработало.&lt;/p&gt;

&lt;p&gt;На данный момент в проекте уже реализовано создание моделей в очень простом декларативном стиле, либо с помощью
python кода, либо с помощью YAML описания близкого по формату к обычному тексту (чуть более в формализированном виде).&lt;/p&gt;

&lt;p&gt;Вот пример того как можно создать модель, файл news.yaml:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="yaml"&gt;&lt;span class="l-Scalar-Plain"&gt;title&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;News Page&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;description&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="p-Indicator"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="no"&gt;News page that appears on the site. Here is description for admin section. Hope&lt;/span&gt;
  &lt;span class="no"&gt;you enjoy this simple format.&lt;/span&gt;

&lt;span class="l-Scalar-Plain"&gt;fields&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;
  &lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;name&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;title&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;title&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;News Title&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;type&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;string&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;length&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;80&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;required&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;1&lt;/span&gt;
  &lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;name&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;leadin&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;title&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;Lead description usually small version of body.&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;type&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;string&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;length&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;80&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;widget&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;
      &lt;span class="l-Scalar-Plain"&gt;name&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;textarea&lt;/span&gt;
      &lt;span class="l-Scalar-Plain"&gt;rows&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;5&lt;/span&gt;
      &lt;span class="l-Scalar-Plain"&gt;css&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;bold&lt;/span&gt;
  &lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;name&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;publishdate&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;title&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;Publish Date&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;type&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;date&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;widget&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;date&lt;/span&gt;
  &lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;name&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;body&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;title&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;News item body&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;description&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="p-Indicator"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="no"&gt;Some text about you here is welcome&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;widget&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;
      &lt;span class="l-Scalar-Plain"&gt;name&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;markdownwysiwyg&lt;/span&gt;
      &lt;span class="l-Scalar-Plain"&gt;theme&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;simple&lt;/span&gt;
  &lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;name&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;image&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;type&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;image&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;desription&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="p-Indicator"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="no"&gt;Main photo, will be autoresized&lt;/span&gt;
    &lt;span class="l-Scalar-Plain"&gt;widget&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;
      &lt;span class="l-Scalar-Plain"&gt;name&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;image&lt;/span&gt;
      &lt;span class="l-Scalar-Plain"&gt;addons&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="p-Indicator"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;crop&lt;/span&gt;&lt;span class="p-Indicator"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="p-Indicator"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Этот код не совсем актуальный, но дает представление о идее. Теперь самое главное, как же работать с этим файлом.
В текущий момент реализован следующий путь:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;formgear.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Model&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NewsYAML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;__yaml__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;news.yaml&amp;#39;&lt;/span&gt;
  &lt;span class="c"&gt;# тут код который вы хотите использовать дополнительно&lt;/span&gt;
  &lt;span class="c"&gt;# он может прекрывать определения из yaml файла&lt;/span&gt;

&lt;span class="c"&gt;# этот код эквивалентен приблизительно следующему python коду&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;formgear.fields&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;formgear.widgets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NewsPy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;News Title&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;leadin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Lead...&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;TextareaWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;css&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;bold&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="n"&gt;publishdate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTimeField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TextField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c"&gt;# etc, думаю идея понятна&lt;/span&gt;

&lt;span class="c"&gt;# код можно совмещать, например если вы решили создать дополнительное свойство&lt;/span&gt;
&lt;span class="c"&gt;# не в yaml файле, а в python коде&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NewsMix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;__yaml__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;news.yaml&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;popular&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BooleanField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Popular news&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# теперь надо попробовать сгеренировать форму:&lt;/span&gt;

&lt;span class="n"&gt;killallhumans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NewsMix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;killallhumans&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;# этот код вернет HTML код для отображения формы.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;TODO:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;В текущий момент модели пока не умеют хранить данные&lt;/li&gt;
&lt;li&gt;API могут меняться, особенно в части с импортом моделей и виджетов
уже есть реестры, но хочется сильно упростить описательную часть&lt;/li&gt;
&lt;li&gt;пока нет url роутингов, но пример идеи можно посмотреть в &lt;code&gt;test/data/sample/sitemap.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;не понятно будет ли этот проект оформлен как библиотека которую можно будет использовать
в любых своих проектах или будет тесно связан с каким-то фреймворком&lt;/li&gt;
&lt;li&gt;formgear дурацкое название, скорее всего будет придумано какое-то более эпичное&lt;/li&gt;
&lt;li&gt;нет вообще никаких тестов&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Дальше на &lt;a href="https://github.com/xen/formgear"&gt;Github https://github.com/xen/formgear&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/1KOB-fuMagc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2012/01/RFC-formgear</feedburner:origLink></entry>
 
 <entry>
   <title>Про стартапы и идеи</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/lDcM3K7HooA/startup" />
   <updated>2012-01-12T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2012/01/startup</id>
   <content type="html">&lt;p&gt;Случайно зашел на один форум и нашел там человека который написал слезный пост о том что у него есть супер идея, которая может захватить все человечество. У меня родился следующий пост, который подытоживает мои мысли о стартапах.&lt;/p&gt;

&lt;h3&gt;Цена идеи&lt;/h3&gt;

&lt;p&gt;Давайте начнем с того, что идея сама по себе ничего не стоит. Это такая красивая городская легенда, как про вампиров или мистическую связь близнецов. Во-первых ценность имеет бизнес с клиентами и динамикой. Во-вторых сделать что-то супер-мега-пупер человеку не из среды сложно. В фильмах показывают месяц жизни человека который становится миллионером, но на практике даже искатели кладов тратят годы на то чтобы стать профессионалами в своем деле. Вы не поверите, но они изучают архивы, покупают дорогостоящее оборудование, получают образование историков. В-третьих, супер идеи мало когда становятся успешными бизнесами, такова практика и многолетняя история человечества, люди не могут воспринимать что-то кардинально новое. Поэтому выбирают что-то старое и понятное, может чуть лучше.&lt;/p&gt;

&lt;h3&gt;Воровство идей&lt;/h3&gt;

&lt;p&gt;Это тоже какой-то глупый миф. Если у вас есть идея и вы ею живете, то зачем ее красть до того как она реализована? Пройти путь от плана на салфетке до готового бизнеса это очень неблагодарное дело. Если ваше дело окажется стоящим, то его точно так же можно купить и после того как оно докажет свою состоятельность. Может быть кому-то откроет глаза, но люди с деньгами умеют таки их считать. Какой смысл вкладываться в высокий риск, если можно подождать немного и вложить деньги в менее рискованный, пусть даже это потребует немного больше денег.&lt;/p&gt;

&lt;p&gt;Для людей с культом золотого тельца в голове деньги являются большой ценностью, но для людей которые занимаются финансовыми операциями – это всего-то инструмент. У них нет священного трепета перед десятью или сотней тысяч долларов. Но они знают им ценность.&lt;/p&gt;

&lt;p&gt;Деньги это очень дешевый инструмент. А вот люди которые могут от идеи дойти до бизнеса единицы, и они ценнее денег. Собственно из этого и проистекает вывод, что идея ничего не стоит. Если бизнес состоит только из идеи, то его могут повторить все, если он состоит из большой, глубокой работы и налаживания связей, то он тут же вырастает в цене, потому что его повторить сложно. А чтобы повторить нужны люди и тд.&lt;/p&gt;

&lt;h3&gt;Где брать деньги на свой проект&lt;/h3&gt;

&lt;p&gt;Скорее всего их вам никто не даст, в Украине/России нет институтов финансирования постиндустриальных видов бизнеса. Трактор купить можно, потому что он стоит и банк его видит (хотя могут быть проблемы с ликвидностью, если все же его надо будет изъять). Но есть специальный чит: всю идею реализовывать не обязательно. Достаточно сделать главную часть которая приносит деньги. Проблема большинства лежит именно в этом. Люди не могут выделить основную идею, но им уже мерещатся огромные здания с тысячами сотрудников и миллиардные обороты. Если же главное не отделяется с легкостью, то скорее всего ваша идея является дремучим нагромождением ошибочных предположений.&lt;/p&gt;

&lt;p&gt;Вместо простого приложения для социальных сетей люди придумывают свои новые социальные сети.&lt;/p&gt;

&lt;p&gt;Для более иллюстративного умственного эксперимента давайте сделаем простой рассчет. У Facebook есть 10к лучших в мире специалисты по созданию социальных сетей, у них есть NN миллиардов долларов (может быть NNN, это не принципиально). У них есть 550 миллионов пользователей. Вы создаете свою социальную сеть и выходите на рынок. И она оказывается той самой идеей которой не хватало пусть даже ВСЕМ пользователям Facebook. Что сделает руководство компании если почувствует угрозу с вашей стороны? Бросит свои капиталы и своих сотрудников на защиту. Теперь вы начнете бороться с NN миллиардами долларов, с 10к лучших специалистов и существующей базой в 550 миллионов пользователей. Кто победит? В лучшем случае вас купят.&lt;/p&gt;

&lt;h3&gt;Ложка меда&lt;/h3&gt;

&lt;p&gt;Пост конечно же мрачный и достаточно негативный, но я честно не специально сгущал краски. Так есть на самом деле, может быть не все еще достаточно повзрослели чтобы это понять. Но у меня есть конструктивный сценарий. В бизнесе сложность представляет из себя не идея, а постороение бизнеса как таковое. Сложно научиться управлять людьми, добиваться условий у партнеров и клиентов, увольнять бывших знакомых и тд. То есть как раз тем 99% успеха любого бизнеса которые скрывают от нищих и глупцов. Так вот чтобы сделать свой супер бизнес надо взять готовую идею из тех которые ближе к сердцу и начать их реализовывать самому. Попытаться построить бизнес с нуля.&lt;/p&gt;

&lt;p&gt;В качестве бонуса дам ссылку на картинку из поста Ильи Бирмана которую он разместил в &lt;a href="http://ilyabirman.ru/meanwhile/2012/01/07/3/"&gt;одном из постов&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://imgur.com/s9cGT"&gt;&lt;img src="http://i.imgur.com/s9cGTl.jpg" title="Hosted by imgur.com" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/lDcM3K7HooA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2012/01/startup</feedburner:origLink></entry>
 
 <entry>
   <title>Почетный #Odessapy drinkup второго созыва  27 января 2012</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/VZ3QwbSz2eg/Odessapy-drinkup" />
   <updated>2012-01-10T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2012/01/Odessapy-drinkup</id>
   <content type="html">&lt;p&gt;На &lt;a href="http://www.vurt.ru/2011/11/Odessa-py-drinkup"&gt;прошлой встрече&lt;/a&gt; мы запланировали провести две встречи, первую в январе тоже в режиме drinkup'а, а вторую в феврале, но уже постараться сделать доклады и пригласить докладчиков. Соответственно, раз праздники закончились, то самое время анонсировать второй почетный drinkup. Только в Одессе, только хардкор, только Python.&lt;/p&gt;

&lt;p&gt;Предварительное место проведения (там еще не знают о наших планах, поэтому место может поменяться ближе к дате события) ресторан &lt;a href="http://www.gambrinus.net.ua/"&gt;Гамбринус&lt;/a&gt; по адресу &lt;a href="http://maps.yandex.ru/?text=%D0%A3%D0%BA%D1%80%D0%B0%D0%B8%D0%BD%D0%B0%2C%20%D0%9E%D0%B4%D0%B5%D1%81%D1%81%D0%BA%D0%B0%D1%8F%20%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C%2C%20%D0%9E%D0%B4%D0%B5%D1%81%D1%81%D0%B0%2C%20%D0%9F%D1%80%D0%B8%D0%BC%D0%BE%D1%80%D1%81%D0%BA%D0%B8%D0%B9%20%D1%80%D0%B0%D0%B9%D0%BE%D0%BD%2C%20%D0%94%D0%B5%D1%80%D0%B8%D0%B1%D0%B0%D1%81%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F%20%D1%83%D0%BB%D0%B8%D1%86%D0%B0%2C%2031&amp;amp;sll=30.734312%2C46.484033&amp;amp;ll=30.734312%2C46.484033&amp;amp;spn=0.015643%2C0.008804&amp;amp;z=16&amp;amp;l=map"&gt;Дерибасовская, 31&lt;/a&gt;. Дата проведения указана в заголовке, но можно ее повторить еще раз: 27 января 2012.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://docs.google.com/spreadsheet/viewform?formkey=dF84ZEIxcFpmOVQ5YzdrSU9YLUJ0VHc6MQ"&gt;&lt;strong&gt;Форма регистрации&lt;/strong&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://d24w6bsrhbeh9d.cloudfront.net/photo/1668720_460s.jpg" alt="Одесса встречает" /&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/VZ3QwbSz2eg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2012/01/Odessapy-drinkup</feedburner:origLink></entry>
 
 <entry>
   <title>Дополнительные конфигурации в Buildout</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/b-pvzSN7ZG8/buildout-configs" />
   <updated>2011-12-19T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2011/12/buildout-configs</id>
   <content type="html">&lt;p&gt;Хочу добавить в копилку мелких удобств buildout возможность расширения конфигураций и создания альтернативных.&lt;/p&gt;

&lt;p&gt;Мы столкнулись с проблемой создания двух параллельных конфигураций для Django проекта используя &lt;a href="http://pypi.python.org/pypi/djangorecipe"&gt;djangorecipe&lt;/a&gt;. Django уже имеет систему файлов настроек, но хочется не только регулировать параметры самого django, но и указывать какие именно пакеты устанавливать в окружение. Например &lt;code&gt;django-debug-toolbar&lt;/code&gt; или &lt;code&gt;ipython&lt;/code&gt; не нужны на сервере в рабочем режиме, но весьма удобны во время разработки.&lt;/p&gt;

&lt;p&gt;Наверное уже обращали внимание на параметр &lt;code&gt;extends&lt;/code&gt;, но одно дело использовать чьи-то готовые примеры, другое дело самому гибко настраивать. Используя эту директиву относительно удобно можно регулировать актуальный набор параметров конечного набора конфигурации. Например у вас есть начальный файл &lt;code&gt;buildout.cfg&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="cfg"&gt;&lt;span class="k"&gt;[buildout]&lt;/span&gt;
&lt;span class="na"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&lt;/span&gt;
&lt;span class="s"&gt;  django&lt;/span&gt;

&lt;span class="na"&gt;eggs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&lt;/span&gt;
&lt;span class="s"&gt;  ....&lt;/span&gt;
&lt;span class="s"&gt;  site&lt;/span&gt;
&lt;span class="s"&gt;  south&lt;/span&gt;
&lt;span class="s"&gt;  django_markdown&lt;/span&gt;
&lt;span class="s"&gt;    &lt;/span&gt;
&lt;span class="k"&gt;[django]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;djangorecipe&lt;/span&gt;
&lt;span class="na"&gt;settings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
&lt;span class="na"&gt;project&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;site&lt;/span&gt;
&lt;span class="na"&gt;wsgi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;eggs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&lt;/span&gt;
&lt;span class="s"&gt;  ${buildout:eggs}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Но для рабочего окружения нужен другой конфигурационный файл и дополнительные пакеты, поэтому создаем рядом файл &lt;code&gt;dev.cfg&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="cfg"&gt;&lt;span class="k"&gt;[buildout]&lt;/span&gt;
&lt;span class="na"&gt;extends&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;buildout.cfg&lt;/span&gt;
&lt;span class="na"&gt;eggs +&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&lt;/span&gt;
&lt;span class="s"&gt;  django-debug-toolbar&lt;/span&gt;
&lt;span class="s"&gt;  ipython&lt;/span&gt;

&lt;span class="k"&gt;[django]&lt;/span&gt;
&lt;span class="na"&gt;settings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;development&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Вся магия происходит во второй строчке. В этом месте импортируется файл &lt;code&gt;buildout.cfg&lt;/code&gt; и все остальное содержимое файла изменяет параметры по следующим правилам:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="cfg"&gt;&lt;span class="c"&gt;# Добавить значения в список&lt;/span&gt;
&lt;span class="k"&gt;[section1]&lt;/span&gt;
&lt;span class="na"&gt;option +&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;a3 a4&lt;/span&gt;

&lt;span class="c"&gt;# Убрать значения из списка&lt;/span&gt;
&lt;span class="k"&gt;[section2]&lt;/span&gt;
&lt;span class="na"&gt;option -&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;b1 b2&lt;/span&gt;

&lt;span class="c"&gt;# Назначить новые значения, если переменная или секция не была определенна,&lt;/span&gt;
&lt;span class="c"&gt;# то они будут созданы&lt;/span&gt;
&lt;span class="k"&gt;[section3]&lt;/span&gt;
&lt;span class="na"&gt;option&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;h1 h2 &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Теперь можно указывать какой конфигурационный файл надо исполнить:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;bin/buildout -c dev.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ну и напоследок, во всем это можно очень быстро запутаться. Поэтому запомните ключ &lt;strong&gt;annotate&lt;/strong&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;annotate

  Display annotated sections. All sections are displayed, sorted
  alphabetically. For each section, all key-value pairs are displayed,
  sorted alphabetically, along with the origin of the value (file name or
  COMPUTED_VALUE, DEFAULT_VALUE, COMMAND_LINE_VALUE).
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ссылки:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://pypi.python.org/pypi/zc.buildout/1.5.2#adding-and-removing-options"&gt;Adding and removing options&lt;/a&gt; в официальной документации по buildout.&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/b-pvzSN7ZG8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/12/buildout-configs</feedburner:origLink></entry>
 
 <entry>
   <title>Системный buildout</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/bcgxPlgS2ts/System-buildout" />
   <updated>2011-12-05T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2011/12/System-buildout</id>
   <content type="html">&lt;p&gt;К стыду своему только на прошлой неделе додумался прочитать вывод &lt;code&gt;buildout --help&lt;/code&gt;. Возможно этой команды раньше не было:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;init

   Initialize a buildout, creating a buildout.cfg file if it doesn't
   exist and then performing the same actions as for the buildout
   command.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;В эта команда позволяет сэкономить несколько секунд времени при создании нового проекта. &lt;!-- cut --&gt; Для того чтобы воспользоваться всеми преимуществами прогресса надо с помощью системного &lt;code&gt;easy_install&lt;/code&gt; или &lt;code&gt;pip&lt;/code&gt; установить &lt;code&gt;zc.buildout&lt;/code&gt; в качестве системной команды. Не буду вдаваться в детали этого процесса, поскольку он оказался несколько запутанным на моей машине со множеством разных версий python. Просто покажу вывод следующей команды:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ls -l &lt;span class="sb"&gt;`&lt;/span&gt;which buildout&lt;span class="sb"&gt;`&lt;/span&gt;
lrwxr-xr-x  1 root  staff    72B Nov 30 15:38 /usr/local/bin/buildout@ -&amp;gt; /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/buildout
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Теперь для того чтобы начать новый проект мне достаточно выполнить команду &lt;code&gt;buildout init&lt;/code&gt;. Получается приблизительно так:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;xen@Nekomusume.local  ~/Dev % mkdir proj 
xen@Nekomusume.local  ~/Dev % &lt;span class="nb"&gt;cd &lt;/span&gt;proj 
xen@Nekomusume.local  ~/Dev/proj % buildout init
Creating &lt;span class="s1"&gt;&amp;#39;/Users/xen/Dev/proj/buildout.cfg&amp;#39;&lt;/span&gt;.
Creating directory &lt;span class="s1"&gt;&amp;#39;/Users/xen/Dev/proj/bin&amp;#39;&lt;/span&gt;.
Creating directory &lt;span class="s1"&gt;&amp;#39;/Users/xen/Dev/proj/parts&amp;#39;&lt;/span&gt;.
Creating directory &lt;span class="s1"&gt;&amp;#39;/Users/xen/Dev/proj/eggs&amp;#39;&lt;/span&gt;.
Creating directory &lt;span class="s1"&gt;&amp;#39;/Users/xen/Dev/proj/develop-eggs&amp;#39;&lt;/span&gt;.
Generated script &lt;span class="s1"&gt;&amp;#39;/Users/xen/Dev/proj/bin/buildout&amp;#39;&lt;/span&gt;.
xen@Nekomusume.local  ~/Dev/proj % 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Структура проекта сгенерировалась автоматом, заодно создался конфигурационный файл с пустым содержимым.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;xen@Nekomusume.local  ~/Dev/proj % ls -al 
total 8
drwxr-xr-x   7 xen  staff   238B Dec  5 13:35 ./
drwxr-xr-x@ 20 xen  staff   680B Dec  5 13:35 ../
drwxr-xr-x   3 xen  staff   102B Dec  5 13:35 bin/
-rw-r--r--   1 xen  staff    20B Dec  5 13:35 buildout.cfg
drwxr-xr-x   4 xen  staff   136B Dec  5 13:35 develop-eggs/
drwxr-xr-x   2 xen  staff    68B Dec  5 13:35 eggs/
drwxr-xr-x   3 xen  staff   102B Dec  5 13:35 parts/
xen@Nekomusume.local  ~/Dev/proj % cat buildout.cfg 
&lt;span class="o"&gt;[&lt;/span&gt;buildout&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="nv"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;И в папке &lt;code&gt;bin&lt;/code&gt; сразу же появился исполняемый скрипт&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;xen@Nekomusume.local  ~/Dev/proj % ls -al bin
total 8
drwxr-xr-x  3 xen  staff   102B Dec  5 13:35 ./
drwxr-xr-x  7 xen  staff   238B Dec  5 13:35 ../
-rwxr-xr-x  1 xen  staff   566B Dec  5 13:35 buildout*
xen@Nekomusume.local  ~/Dev/proj % 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Единственный нюанс: buildout привязан к python2.7 который является основной версией на моей машине. Но можно сделать нужные симлинки например под другими именами (например &lt;code&gt;buildout-2.6&lt;/code&gt;) и вызывать их.&lt;/p&gt;

&lt;p&gt;Надеюсь кому-то этот совет сэкономит несколько секунд жизни.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/bcgxPlgS2ts" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/12/System-buildout</feedburner:origLink></entry>
 
 <entry>
   <title>Donutor на Vurt.ru</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/ArbQ-4pYXqE/Donutor-Vurt-ru" />
   <updated>2011-12-01T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2011/12/Donutor-Vurt-ru</id>
   <content type="html">&lt;p&gt;Мои хорошие знакомые из студии &lt;a href="http://psyho.ua/"&gt;Psyho.ua&lt;/a&gt; запустили свой новый сервис под названием &lt;a href="http://donutor.com/"&gt;Донатор&lt;/a&gt;. Сервис позволяет жертвовать своими деньгами на поддержку разных проектов которые вам нравятся. Чтобы не читать о том, что написано у них на сайте в двух словах расскажу как это работает:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Вы нажимаете на кнопку слева&lt;/li&gt;
&lt;li&gt;Соглашаетесь с тем что каждый месяц какая-то небольшая сумма будет уходить к какому-то хорошему человеку (в данном случае это буду я)&lt;/li&gt;
&lt;li&gt;Раз в месяц эта сумма будет перечисляться на счет сервиса и потом перераспределяться между теми кого добавили в список&lt;/li&gt;
&lt;li&gt;Раз в месяц я буду получать деньги для оплаты блекджека и женщин&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Блестящий план разбивается о мысль с подозрениями о том, что вообще возможна ситуация, что кто-то захочет расставаться с деньгами в мою пользу. Но если такое случится, то я буду искренне напуган и напишу об этом пост.&lt;/p&gt;

&lt;hr /&gt; 


&lt;p&gt;Если серьезно, то ссылка это мой способ поддержать знакомых коллег в их начинании. Как это ни странно, но проектов которые кажутся толковыми делается не так уж и много.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/ArbQ-4pYXqE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/12/Donutor-Vurt-ru</feedburner:origLink></entry>
 
 <entry>
   <title>#Odessa.py drinkup</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/A_iFVxkrg_E/Odessa-py-drinkup" />
   <updated>2011-11-22T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2011/11/Odessa-py-drinkup</id>
   <content type="html">&lt;p&gt;Думаю что стоит попробовать встретиться в Одессе программистам использующим Python и близлежащие технологии или просто тем кто готов был бы выпить. Пока точно не определились, но приблизительно через пару недель (числа 9го декабря).&lt;/p&gt;

&lt;p&gt;Если вы в Одессе, то приглашаю. Только сразу предупреждаю, что это будет первая встреча, если будет много человек, то скорее всего нам будет не комфортно. Поэтому не публикую место и время.&lt;/p&gt;

&lt;p&gt;Предлагаю &lt;a href="https://docs.google.com/spreadsheet/viewform?hl=ru&amp;amp;formkey=dE94cmtLcnNmcFRHTURVQnlmaWlDbHc6MQ"&gt;&lt;strong&gt;заполнить форму&lt;/strong&gt;&lt;/a&gt;, чтобы оценить ваш интерес.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Внимание, сейчас регистрация остановлена&lt;/strong&gt;. Набралось больше 15 человек, поэтому сейчас закрыл форму. Возможно кто-то откажется, оставьте свой контакт в комментариях, постараюсь что-то придумать.&lt;/p&gt;

&lt;p&gt;Время проведения в 19:00 в пятницу в одном из ресторанов в центре города.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/A_iFVxkrg_E" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/11/Odessa-py-drinkup</feedburner:origLink></entry>
 
 <entry>
   <title>GAE is for... porn</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/xbt3poFZJ04/GAE-is-for-porn" />
   <updated>2011-11-18T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2011/11/GAE-is-for-porn</id>
   <content type="html">&lt;p&gt;Вышло обновленное полиси для Google App Engine, теперь в нем нет запрета на размещение на хостинге сайтов с порно и азартными играми. Конечно при условии, что ваш бизнес это позволяет. &lt;a href="http://groups.google.com/group/google-appengine/browse_thread/thread/1f282a23f57d32d8"&gt;Ссылка на обсуждение в рассылке&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Если у кого-то остаются сомнения, то на персональной странице в Google Plus у &lt;a href="http://plus.google.com/116333290923912560988/posts"&gt;Gregory D'alesandre&lt;/a&gt; значится его должность &lt;em&gt;Senior Product Manager for Google App Engine&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;К сожалению он не смог пообещать, что условия не изменятся в ближайшие 3 года, но по крайней мере 90 дней у вас есть.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/xbt3poFZJ04" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/11/GAE-is-for-porn</feedburner:origLink></entry>
 
 <entry>
   <title>Установка Growl 1.3.x на Lion</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/qoqqZZNofWQ/Growl-1-3-x-Lion" />
   <updated>2011-11-12T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2011/11/Growl-1-3-x-Lion</id>
   <content type="html">&lt;p&gt;Внезапно оказалось, что удобная система нотификаций Growl &lt;a href="http://apple.slashdot.org/story/11/10/20/1757226/os-x-notifier-app-growl-goes-closed-source"&gt;перешла в категорию платных&lt;/a&gt;. Для меня лично она является частью лица OSX, такая удобная неотъемлемая часть к которой уже привык и отказываться не хотелось бы. Я бы и не знал о изменениях, если бы Growl не начал показывать каждый день уведомления, что пора бы обновиться и не отправлять на страницу где радостно сообщать что версия теперь стоит два бакса. Помимо того что дело в деньгах неприятный осадок добавляет то, что продукт всегда был с открытым кодом. И лично для меня был носителем духа того времени когда пользователи Mac собирались в Москве для того чтобы прочитать друг-другу лекцию о системе, купить их можно было практически только на руках. Все было маленькое и дружное. То есть еще в то время когда уже появился первый iPod Classic, но не было шуток про геев. Хотя сам Growl вышел несколько позже.&lt;/p&gt;

&lt;p&gt;В общем хватит соплей и восспоминаний. Если у вас нет XCode, то проще конечно же купить. Если есть, то сможете скачать и собрать из исходников. Нужно:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Установленный XCode&lt;/li&gt;
&lt;li&gt;mercurial (проверочное слово &lt;code&gt;hg --version&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;умение запустить Terminal.app&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Первый шаг это получить актуальную копию исходников, они доступны на странице проекта на хостинге Google Code &lt;a href="http://growl.googlecode.com/"&gt;growl.googlecode.com&lt;/a&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /tmp
&lt;span class="nv"&gt;$ &lt;/span&gt;hg clone https://code.google.com/p/growl/
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;growl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Теперь одно из двух, либо надо создать сертификат, либо убрать его упоминание из конфигурации проекта в XCode. Если честно, то процедура запуска и индексации проекта выглядит настолько громоздко, что я бы рекомендовал обойтись без этого. Тем более, что даже на официальной странице с инструкцией указано, что могут быть проблемы в файле &lt;code&gt;hgrevision.h&lt;/code&gt;. Они у меня возникли и рекомендованная попытка понажимать кнопку &lt;code&gt;Build&lt;/code&gt; не сработала. Поэтому нафиг XCode, будем генерировать сертификат разработчика, если хотите посмотреть что произойдет если пропустить этот пункт, то попробуйте скомпилировать сразу:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Запустите &lt;strong&gt;Keychain Access.app&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Зайдите в меню приложения (рядом с  пункт с названием приложения)&lt;/li&gt;
&lt;li&gt;Certificate Assistant &gt; Create a certificate&lt;/li&gt;
&lt;li&gt;В появившемся диалоге укажите название "&lt;em&gt;3rd Party Mac Developer Application: The Growl Project, LLC&lt;/em&gt;" (без кавычек), и тип сертификата &lt;em&gt;Code&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Теперь можно запускать компиляцию:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;xcodebuild -project Growl.xcodeproj -target Growl.app -configuration Release
&lt;span class="nv"&gt;$ &lt;/span&gt;open build/Release
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Появится диалог запрашивающий доступ с сертификату, чтобы не тратить время разрешите навсегда, через пару минут все будет готово. Последняя команда откроет в &lt;strong&gt;Finder.app&lt;/strong&gt; папку в которой будет лежать файл &lt;strong&gt;Growl.app&lt;/strong&gt;. Его надо перенести в &lt;code&gt;/Applications/&lt;/code&gt; и запустить.&lt;/p&gt;

&lt;p&gt;Мне привычно было пользоваться Growl в панели управления, но разработчики пошли по другому пути.&lt;/p&gt;

&lt;p&gt;Дополнительные ссылки:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://pragmactic-osxer.blogspot.com/2011/11/building-growl.html"&gt;Инструкция как выключить провеку сертификата&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://growl.info/documentation/developer/growl-source-install.php"&gt;Официальная инструкция для разработчика&lt;/a&gt; на официальном сайте (на самом сайте найти сложно, пришлось через поиск)&lt;/li&gt;
&lt;li&gt;Must have утилитка для работы с Growl через командную строку &lt;a href="https://github.com/indirect/growlnotify"&gt;growlnotify&lt;/a&gt; которая раньше была в официально .DMG файле.&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/qoqqZZNofWQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/11/Growl-1-3-x-Lion</feedburner:origLink></entry>
 
 <entry>
   <title>PyCon 2011 в Киеве 22-23 октября 2011</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/8ob1yecHHXA/PyCon-2011-22-23-2011" />
   <updated>2011-09-27T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/09/PyCon-2011-22-23-2011</id>
   <content type="html">&lt;p&gt;&lt;img src="http://habrastorage.org/storage1/69bbfa12/c7e091af/5799da47/df773d03.png" align="left" /&gt; От имени организаторов украинского PyCon рад возможности объявить о начале регистрации на это важное Python-событие, прежде всего обращаюсь к жителеям западной части России, всей Украины, Белоруссии, Польши, Австрии, Германии и вообще всех стран в ближайшей досягаемости от Киева, а так же тех кто хотел бы приехать из более удаленных мест.&lt;/p&gt;

&lt;p&gt;В этом году пройдет вторая ежегодная конференция PyCon, это крупнейшее профессиональное событие на постсоветском пространстве для тех кто тем или иным способом связан с технологиями на этом языке программирования. Событие займет два дня &lt;b&gt;22-23 октября 2011&lt;/b&gt; и пройдет в Киеве. На событии ожидается более 250 слушателей которым будут представлены доклады в течении двух дней от более чем десятка докладчиков. Доклады будут осуществляться на русском и английском языке.&lt;habracut /&gt;&lt;/p&gt;

&lt;p&gt;UaPyCon — это событие для сообщества организованное при поддержке Python Software Foundation и является нашей версией ежегодных конференций которые проводятся по всему миру. Цель конференции — профессиональное общение для программистов любого уровня: от новичков которые только делают выбор, до профессионалов с многолетним опытом которые хотели бы представить свои технологии и получить обратную связь во время живого общения. Конференция является площадкой для формирования контактов, а так же возможность лично встретиться со многими участниками сообщества. Кроме того — это просто грандиозное событие по концентрации докладчиков.&lt;/p&gt;

&lt;h4&gt;Доклады&lt;/h4&gt;


&lt;p&gt;В этом году мы планируется провести двухдневную конференцию в два потока — включая доклады, мастер-классы, панельные дискуссии и lighting talks. Кроме того, будет проведена «recruiting session» — у желающих будет возможность больше узнать о украинских компаниях, которые разрабатывают на питоне, об их проектах и побеседовать с их представителями.&lt;/p&gt;

&lt;p&gt;Среди докладчиков ожидаются:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Игорь Почечуев, Василий Дижак, Тарас Мурашко, Игорь Давыденко, Андрей Светлов, Павел Коломиец, Александр Соловьев, Роман Ворушин (Киев, Украина)&lt;/li&gt;
&lt;li&gt;Александр Бойко (Харьков, Украина)&lt;/li&gt;
&lt;li&gt;Александр Лябах (Днепропетровск, Украина)&lt;/li&gt;
&lt;li&gt;Михаил Кашкин (Одесса, Украина)&lt;/li&gt;
&lt;li&gt;Александр Литовченко (Донецк, Украина)&lt;/li&gt;
&lt;li&gt;Юрия Юревич (Омск, Россия)&lt;/li&gt;
&lt;li&gt;Армин Ронахер (Armin Ronacher, Австрия)&lt;/li&gt;
&lt;li&gt;Ендрю Годвин (Andrew Godwin, Великобритания)&lt;/li&gt;
&lt;li&gt;Мартин Шустрик (Martin Sustrik, Словакия)&lt;/li&gt;
&lt;li&gt;Анжей Млечко (Andrzej Mleczko, Италия)&lt;/li&gt;
&lt;li&gt;Маттео Босколо (Matteo Boscolo, Италия)&lt;/li&gt;
&lt;li&gt;Ожидаются подтверждения участия от Тарека Заде (Tarek Ziade) и Luke Kenneth Casson Leighton.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Более подробная информация о докладах, их содержании будут опубликованы на официальном сайте после обработки материалов.&lt;/p&gt;

&lt;h4&gt;Регистрация&lt;/h4&gt;


&lt;p&gt;Количество мест будет ограничено в связи с ограниченным предложеним помещения в Киеве. Поэтому лучше не медлить с регистрацией, по опыту прошлого года перед началом конференции могут возникнуть проблемы с билетами:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://ua.pycon.org/register/"&gt;&lt;b&gt;Страница регистрации на сайте конференции&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Для студентов предусмотрена скидка, если вы планируете купить билет со скидкой, то от вас потребуется предъявить действующий студенческий билет&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;Организация&lt;/h4&gt;


&lt;p&gt;Для тех кто хочет следить за событием через социальные сети:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.facebook.com/event.php?eid=184792284919138"&gt;Оцифиальная страница события в Facebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href="http://twitter.com/uapycon"&gt;@uapycon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Страница события в &lt;a href="http://lanyrd.com/2011/uapycon/"&gt;Lanyrd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Событие в &lt;a href="http://vk.com/event30503016"&gt;Vk.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Хештег: &lt;a href="https://twitter.com/search?q=%23uapycon"&gt;#uapycon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;u&gt;Внимание&lt;/u&gt;: регистрация на страницах в Facebook или Vk.com не являются регистрацией на событие, это только способ упростить взаимодействие между участниками.&lt;/p&gt;

&lt;p&gt;Для тех кто хочет освежить впечатления прошлого года можете ознакомиться с видео на канале конференции &lt;a href="http://blip.tv/pycon-ukraine"&gt;http://blip.tv/pycon-ukraine&lt;/a&gt; (тут же будут публиковаться и новые видео).&lt;/p&gt;

&lt;p&gt;Спонсоры конференции:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Золотые: &lt;a href="https://odesk.com"&gt;oDesk&lt;/a&gt;, &lt;a href="http://prom.ua"&gt;Prom.ua&lt;/a&gt;, &lt;a href="http://42coffeecups.com"&gt;42 Coffee Cups&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Серебрянные: &lt;a href="http://insollo.com"&gt;InSollo&lt;/a&gt;, &lt;a href="http://djangostars.com"&gt;DjangoStars&lt;/a&gt;, &lt;a href="http://www.jetbrains.com"&gt;JetBrains&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Бронзовые: &lt;a href="http://nic.ua"&gt;NIC.UA&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Партнеры: &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;, &lt;a href="http://wingware.com"&gt;Wingware&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Медиапартнеры: &lt;a href="http://developers.org.ua"&gt;Developers.org.ua&lt;/a&gt;, &lt;a href="http://devcult.ru/"&gt;Devcult.ru&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Контакты:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Организационные вопросы и спонсорство: Владимир Гоцык (&lt;a href="http://twitter.com/gotsyk"&gt;@gotsyk&lt;/a&gt;, &lt;nobr&gt;gotsyk[]gmail.com&lt;/nobr&gt;) &lt;/li&gt;
&lt;li&gt;Пресса и информационное спонсорство: Михаил Кашкин (&lt;a href="http://twitter.com/mikashkin"&gt;@mikashkin&lt;/a&gt;, &lt;nobr&gt;mkashkin[]gmail.com&lt;/nobr&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/8ob1yecHHXA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/09/PyCon-2011-22-23-2011</feedburner:origLink></entry>
 
 <entry>
   <title>Python 2.7</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/zUA2YNWD6Fw/Python-2-7" />
   <updated>2011-08-25T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/08/Python-2-7</id>
   <content type="html">&lt;p&gt;Для тех кто не следит за &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=3429"&gt;развитием работ связанных с добавлением python runtime 2.7&lt;/a&gt; хочу обратить внимание, что сейчас открыта регистрация на тестирование. Недавно задача поменяла статус на "Начата" и вот первые плоды — это &lt;a href="https://docs.google.com/spreadsheet/viewform?formkey=dDVaelk0NkhHMVA2NU5kS1hfajNfM0E6MQ"&gt;форма регистрации для доверенных тестировщиков&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/zUA2YNWD6Fw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/08/Python-2-7</feedburner:origLink></entry>
 
 <entry>
   <title>Buildout: руководство пользователя, урок 1</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/V0uQT6oDbfE/Buildout-1" />
   <updated>2011-08-04T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/08/Buildout-1</id>
   <content type="html">&lt;p&gt;Одна из основных вещей которую я использую в проектах — это система автоматической развертки рабочего окружения. В случае python лучшим является &lt;code&gt;buildout&lt;/code&gt;. &lt;code&gt;pip&lt;/code&gt; попроще, но имеет свои недостатки хотя уж лучше &lt;code&gt;pip&lt;/code&gt; чем ничего. Использование систем развертки начинается с того что вы сталкиваетесь с ситуацией когда требуется одновременно работать со множеством версий одной и той же библиотеки, но не хочется их устанавливать в системную область. Особенно это актуально тогда когда пытаетесь попробовать разные пакеты. Кроме того головной болью является сама процедура поиска и скачивания и локальной установки каких-то нужных продуктов. Buildout позволяет решить все эти проблемы.&lt;/p&gt;

&lt;p&gt;Предлагаю для просмотра первый урок о том как можно развернуть окружение.&lt;/p&gt;

&lt;iframe width="700" height="428" src="http://www.youtube.com/embed/SA2iWivDJiE" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;


&lt;p&gt;Секретная команда для запуска &lt;code&gt;bootstrap.py&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python2.6 &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;curl http://python-distribute.org/bootstrap.py&lt;span class="o"&gt;)&lt;/span&gt; --distribute
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Ваши комментарии могут повлиять на качество и содержание последующих уроков.&lt;/strong&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/V0uQT6oDbfE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/08/Buildout-1</feedburner:origLink></entry>
 
 <entry>
   <title>Поддержка Go</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/ZFMbMj_q7IM/Golang" />
   <updated>2011-05-11T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/05/Golang</id>
   <content type="html">&lt;p&gt;В последнем релизе GAE появилась поддержка языка программирования Go. Хочу поделиться мыслями по поводу того почему стоит учить Go.&lt;/p&gt;

&lt;h3&gt;Устройство рынка разработки&lt;/h3&gt;

&lt;p&gt;Сразу хочется заткнуть рты ярым поцреотам, их мнение они могут оставить при себе до тех пор пока объем денег outsource разработки для внутреннего рынка не превысит объемы outsource рынка который создают США в этих странах. То есть не при нашей жизни.&lt;/p&gt;

&lt;p&gt;Есть несколько фактов:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Крупнейший рынок софта — это США. Там делается основной объем ПО с которым работает весь мир. Часть этого ПО пишется внутри страны, часть попадает на внешний рынок разработки. Думаю не очень сложно проследить как происходит распространение технологий. Сначала появляется что-то новое и постепенно вовлекаются все более новые группы разработчиков и заказчиков.&lt;/li&gt;
&lt;li&gt;Новые технологии появляются сначала в США. За редким исключением сложно вспомнить какие-то удачные и популярные проекты которые были бы созданы например во Франции. В любом случае 100% софта который я использую имеют английскую документацию и сайты.&lt;/li&gt;
&lt;li&gt;Успешные стартапы в основном начинают свой путь из США.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Отсюда можно сделать вывод, что раз центр появления софта — это США и волна распространения технологии разрастается оттуда. Циклы этого движения выглядят следующим образом:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Появление технологии. Ее придумывают нестандартно мыслящие люди в своих часто успешных стартапах и в какой-то момент предлагают в открытый доступ.&lt;/li&gt;
&lt;li&gt;Пионеры. Высокооплачиваемые специалисты которые следят за новинками и активно занимаются самообучением начинают пробовать эти новые технологии в своих проектах. Обычно эти люди более адаптивны, харизматичны и могут убедить, что их выбор поможет стать проекту более успешным, часто они и есть эти самые проекты. А поскольку мозгов у них побольше, то их проекты выстреливают с большей вероятностью.&lt;/li&gt;
&lt;li&gt;Активный бизнес. Тот этап когда технология пошла в массы, когда уже можно найти сотрудников на свободном рынке. Компании начинают включать в свои бизнес-процессы эти технологии.&lt;/li&gt;
&lt;li&gt;Инертный бизнес и поддержка. Это тот случай когда клиенты принимают решения не на основе здравого смысла, а бизнес-логики. Для того чтобы утвердить использование какого-то ресурса или инструмента надо доказать, что он может жить долго. Конечно в быстро развивающейся отрасли это часто совпадает с финальным этапом развития.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Получается, что новые технологии получают признание сначала в среде высокооплачиваемых специалистов в США, а после того как они уже переработали технологию и отказались, она попадает на рынок аутсорсинга в страны третьего и четвертого мира. Тем самым задают моду на эти технологии. Примеров можно привести множество, например знаю, что в Москве есть компания которая пишет на COBOLе, потому что в США и Индии уже практически невозможно найти специалистов.&lt;/p&gt;

&lt;p&gt;Если совсем доступным языком перефразировать: те технологии которые все радостно используют тут зачастую то, что переварили и выплюнули более высокоразвитые рынки. И в Рашку/Украшке попадают те технологии за которые даже не берутся в Индии.&lt;/p&gt;

&lt;p&gt;Это иллюстрация того на каком месте в пищевой цепочке находятся эти страны.&lt;/p&gt;

&lt;h3&gt;Собственно при чем тут Go?&lt;/h3&gt;

&lt;p&gt;На самом деле не при чем. Через год/два вместо Go можно будет вписать какую-то другую технологию. Но если говорить о здесь и сейчас, то по всем признакам Go находится в стадии перехода от использования пионерами и подходит к стадии "активного бизнеса". Есть реальная возможность впрыгнуть в поезд более высокооплачиваемых и интересных проектов.&lt;/p&gt;

&lt;p&gt;Компания Google создает некоторый класс таких технологий которые подходят для определенного рода задач. Из-за своего масштаба они вынуждены влиять на экосистему и пытаться подминать ее под себя. Безусловно это у них будет получаться лучше других в силу своего масштаба и синергии между различными технологиями.&lt;/p&gt;

&lt;p&gt;Все же, если вы решаете какой язык стоит учить одним из следующих, то я определенно бы посоветовал обратить внимание на Go. Сейчас этот язык получил статус &lt;del&gt;третьего языка&lt;/del&gt; &lt;ins&gt;третьей платформы&lt;/ins&gt; в GAE (с ограничениями). В TIOBE индексе занимает очень высокие позиции для своего срока жизни. Мне кажется у него будет (или уже есть, пропустил?) просто запускаться как NaCl внутри Chrome.&lt;/p&gt;

&lt;p&gt;Кто бы мог подумать, что следующим языком внутри GAE станет C/C++ подобный Go?&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/ZFMbMj_q7IM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/05/Golang</feedburner:origLink></entry>
 
 <entry>
   <title>Свадьба Принца Уильяма и Кейт Миддлтон</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/JQtE4COGcY8/officialroyalwedding2011" />
   <updated>2011-04-29T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/04/officialroyalwedding2011</id>
   <content type="html">&lt;p&gt;Наверное кому-то может показаться странным появление уведомления об одном из самых освещаемых событий в этом блоге. Лично я не читаю новости моды и светской жизни и включив на несколько минтут &lt;a href="http://www.youtube.com/theroyalchannel"&gt;онлайн трансляцию&lt;/a&gt; вижу насколько красивое событие разворачивается.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://img.lenta.ru/online/2011/04/29/wedding/p16.jpg" /&gt;&lt;br /&gt;(Изображение с &lt;a href="http://lenta.ru/online/2011/04/29/wedding/"&gt;Lenta.ru&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Думаю никто не сомневается, что эта свадьба привлекает сейчас самое пристальное внимание и одна из самых популярных тем в мире. Но для нас интересно то, что один из самых нагруженных сайтов в текущий момент работает под управлением Google App Engine. Можете проверить сами заголовки &lt;a href="http://www.officialroyalwedding2011.org/"&gt;www.officialroyalwedding2011.org&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/JQtE4COGcY8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/04/officialroyalwedding2011</feedburner:origLink></entry>
 
 <entry>
   <title>Изменение места встречи GTUG, 28 апреля</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/9LYNG8m94RA/GTUG-28" />
   <updated>2011-04-28T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/04/GTUG-28</id>
   <content type="html">&lt;p&gt;Сегодня, &lt;strong&gt;28-го марта, в 18-30, в Национальном центре аэрокосмического образования, пр. Гагарина, 26&lt;/strong&gt; (бывший кинотеатр Орион, перекресток проспекта Гагарина и улицы Телевизионной, рядом с Юридической академией) пройдет встреча Днепропетровского GTUG.&lt;/p&gt;

&lt;p&gt;Если ваши знакомые или друзья тоже идут на встречу — проверьте, в курсе ли они, где проходит встреча и как туда добраться. Если возникнут вопросы — звоните координатору Днепропетровского GTUG, Алексею Иванкину, +380 67 6329114.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Начало регистрации — в 18:15, посмотреть карту проезда &lt;a href="http://goo.gl/yVEpd"&gt;goo.gl/yVEpd&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Программа события&lt;/h2&gt;

&lt;p&gt;Окончательная программа события теперь:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Михаил Кашкин, “GAE для сайтов с высокой нагрузкой”&lt;/li&gt;
&lt;li&gt;Сергей Солодилов, ePythia, "Реализация геолокационного сервиса под Android".&lt;/li&gt;
&lt;li&gt;Кирил Зотин, Dimalex, “Клиент-серверное взаимодействие под Android в деталях”&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/9LYNG8m94RA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/04/GTUG-28</feedburner:origLink></entry>
 
 <entry>
   <title>Обновления ленты</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/aibWA_vm5nY/" />
   <updated>2011-04-19T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/</id>
   <content type="html">&lt;p&gt;Читателям в Google Reader наверное пришлось пересмотреть несколько последних постов сегодня утром. Приношу свои извинения, я попросил исправить грамматически ошибки в нескольких последних постах. Возможно теперь мой блог будет чуть приятнее читать.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.juliphoto.com/"&gt;Особая благодарность Юле&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/aibWA_vm5nY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/04/</feedburner:origLink></entry>
 
 <entry>
   <title>Встреча Днепропетровского GTUG, 28 апреля</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/tXe1Yv_VODw/Dnepr-GTUG" />
   <updated>2011-04-14T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/04/Dnepr-GTUG</id>
   <content type="html">&lt;p&gt;Очередная встреча Днепропетровского GTUG состоится 28-го апреля.&lt;/p&gt;

&lt;p&gt;Мы начинаем организацию второй в 2011 году днепропетровской GTUG. Предлагаемые темы докладов: GAE и Android. Приглашаем программистов, которым интересны языки программирования Python и Java и их применение с использованием технологий Google.&lt;/p&gt;

&lt;h3&gt;Программа&lt;/h3&gt;

&lt;p&gt;Встречу планируем начать в 18:30, место проведения будет то же, что и в прошлый раз: Днепропетровск, улица Серова, 4. Планируется провести 3 доклада продолжительностью до 45 минут с небольшими перерывами и временем на дополнительные вопросы.&lt;/p&gt;

&lt;p&gt;В текущий момент есть определенность с первым докладом, его прочитает специальный гость Михаил Кашкин (&lt;a href="http://www.vurt.ru/"&gt;www.vurt.ru&lt;/a&gt;). Тема доклада будет связана с созданием сайтов на Google App Engine.&lt;/p&gt;

&lt;p&gt;Программа будет согласована в течение нескольких дней, просьба присылать свои предложения.&lt;/p&gt;

&lt;h3&gt;О GTUG&lt;/h3&gt;

&lt;p&gt;GTUG от Google Technology User Group - это независимые группы людей, сформированные во многих странах и городах мира для обмена опытом среди пользователей и программистов, интересующихся технологиями компании Google.&lt;/p&gt;

&lt;p&gt;Днепропетровский GTUG был образован в прошлом году и уже успел провести несколько встреч. Эта встреча вторая в этом году.&lt;/p&gt;

&lt;h3&gt;Участие&lt;/h3&gt;

&lt;p&gt;Для того, чтобы прийти на событие, заполните &lt;a href="http://bit.ly/ewjtW2"&gt;регистрационную форму&lt;/a&gt; и укажите свой правильный email. Более подробную информацию о месте проведения и окончательное расписание будет выслано по электронной почте.&lt;/p&gt;

&lt;p&gt;Дополнительная информация:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://vkontakte.ru/event26084418"&gt;Страница события во ВКонтакте&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dnepr.gtugs.org/home"&gt;Сайт Днепропетровского GTUG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Спонсорство&lt;/h3&gt;

&lt;p&gt;Предыдущее мероприятие Днепропетровского GTUG'а собрало около 80 человек. Это активная аудитория программистов, которая интересуется новыми технологиями и наиболее востребованными языками программирования на рынке.
По поводу спонсорства мероприятия просьба обращаться по телефону +38 (067) 283-82-99&lt;/p&gt;

&lt;p&gt;Текущий список спонсоров:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.908.ua/"&gt;Компания 908.ua, основной днепропетровский спонсор&lt;/a&gt;, проекты &lt;a href="http://audiko.net"&gt;audiko.net&lt;/a&gt; и &lt;a href="http://klumba.ua"&gt;klumba.ua&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;iPark Ventures, (проект Experika)&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/tXe1Yv_VODw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/04/Dnepr-GTUG</feedburner:origLink></entry>
 
 <entry>
   <title>Python SSL под OSX</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/wWRLpYZXC48/Python-SSL-OSX" />
   <updated>2011-04-12T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/04/Python-SSL-OSX</id>
   <content type="html">&lt;p&gt;Небольшой совет. Меня долго раздражало сообщение о необходимости установить SSL модуль при заливке данных на GAE. Проблема даже не в сообщении, а в самом факте, что данные отправлялись по открытому каналу.&lt;/p&gt;

&lt;p&gt;У меня установлен менеджер пакетов MacPorts и, к сожалению, опции компиляции не дали нужного результата. Поэтому надо скомпилировать SSL и установить самостоятельно:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://pypi.python.org/pypi/ssl"&gt;Скачиваете SSL&lt;/a&gt; и распаковываете&lt;/li&gt;
&lt;li&gt;Указываете свою версию gcc, которой надо компилировать (у меня 4.2):&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ CC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/usr/bin/gcc-4.0&amp;#39;&lt;/span&gt; python2.5 setup.py build 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Устанавливаете в site-packages:&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo python2.5 setup.py install
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Теперь данные будут загружаться через SSL.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/wWRLpYZXC48" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/04/Python-SSL-OSX</feedburner:origLink></entry>
 
 <entry>
   <title>Введение в Tipfy</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/uCsXTk_h0Bc/Tipfy" />
   <updated>2011-04-03T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/04/Tipfy</id>
   <content type="html">&lt;p&gt;Уже не раз писал о том, что мы используем в качестве основы &lt;a href="http://www.tipfy.org/"&gt;Tipfy&lt;/a&gt;. И я думаю остаются вопросы прочему и в чем особенности.&lt;/p&gt;

&lt;p&gt;Прежде всего tipfy состоит из нескольких частей, которые в целом определили наш выбор. Поскольку &lt;a href="http://www.buildout.org/"&gt;zc.buildout&lt;/a&gt; это необходимое условие для работы над любым python проектом, в котором участвует несколько человек, возникла задача найти нормальный рецепт для разворачивания GAE SDK. Такой рецепт был найден, заодно захотелось узнать, чем занимается автор и, оказалось, что он еще и делает &lt;a href="http://www.tipfy.org/"&gt;Tipfy&lt;/a&gt;. Поскольку нам хотелось отказаться от всего мусора, который предлагает Django, то Tipfy быстро занял нужное место.&lt;/p&gt;

&lt;!-- cut --&gt;


&lt;p&gt;Вот краткий список того, что нужно было именно нам:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Рецепт для разворачивания GAE проектов &lt;a href="http://pypi.python.org/pypi/appfy.recipe.gae/"&gt;appfy.recipe.gae&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Tipfy ориентирован на скорость, что определяет, какие компоненты в него включены&lt;/li&gt;
&lt;li&gt;Подходит для создания сайтов без фреймворка&lt;/li&gt;
&lt;li&gt;Имеет более-менее понятный стандарт конфигурирования&lt;/li&gt;
&lt;li&gt;Уже имеет некоторые полезные модули для организации авторизации, работы с задачами, security cookie&lt;/li&gt;
&lt;/ul&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Внимание&lt;/strong&gt;&lt;br/&gt;
Это важная оговорка, многие могут подумать, что Tipfy — это то, что им
надо для начала работы над новым GAE проектом. Хочу предостеречь
этих людей. Tipfy прежде всего ваш выбор тогда, когда вы точно
уверены, что код фреймворка будет только мешать.&lt;/p&gt;&lt;/blockquote&gt;

&lt;h2&gt;С чего начать&lt;/h2&gt;

&lt;p&gt;Убедитесь, что версия python, которую вы используете, является версией 2.5.x. Надеюсь, что скоро это требование устареет, в связи с планами Google добавить поддержку 2.7.&lt;/p&gt;

&lt;p&gt;Мой пример будет немного отличаться от рекомендуемого пути, но приведет к тому же результату.&lt;/p&gt;

&lt;p&gt;Создайте папку проекта:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;mkdir demo
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;demo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h2&gt;Подготавливаем окружение&lt;/h2&gt;

&lt;p&gt;Теперь можно создать buildout.cfg, все его содержимое можно взять на странице &lt;a href="http://pypi.python.org/pypi/appfy.recipe.gae/"&gt;документации по рецепту appfy.recipe.gae&lt;/a&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="cfg"&gt;&lt;span class="k"&gt;[buildout]&lt;/span&gt;
&lt;span class="na"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&lt;/span&gt;
&lt;span class="s"&gt;    gae_sdk&lt;/span&gt;
&lt;span class="s"&gt;    gae_tools&lt;/span&gt;
&lt;span class="s"&gt;    app_lib&lt;/span&gt;

&lt;span class="na"&gt;unzip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;relative-paths&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;download-cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;etc/downloads&lt;/span&gt;
&lt;span class="c"&gt;# eggs-directory = etc/eggs&lt;/span&gt;
&lt;span class="na"&gt;develop-eggs-directory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;etc/develop-eggs&lt;/span&gt;
&lt;span class="na"&gt;parts-directory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;etc/parts&lt;/span&gt;

&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="k"&gt;[gae_sdk]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;appfy.recipe.gae:sdk&lt;/span&gt;
&lt;span class="na"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;http://googleappengine.googlecode.com/files/google_appengine_1.4.3.zip&lt;/span&gt;
&lt;span class="na"&gt;destination&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${buildout:parts-directory}&lt;/span&gt;
&lt;span class="na"&gt;hash-name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;clear-destination&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;true&lt;/span&gt;

&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="k"&gt;[gae_tools]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;appfy.recipe.gae:tools&lt;/span&gt;
&lt;span class="na"&gt;sdk-directory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${gae_sdk:destination}/google_appengine&lt;/span&gt;

&lt;span class="k"&gt;[app_lib]&lt;/span&gt;
&lt;span class="c"&gt;# Sets the library dependencies for the app.&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;appfy.recipe.gae:app_lib&lt;/span&gt;
&lt;span class="na"&gt;lib-directory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;src/distlib&lt;/span&gt;
&lt;span class="na"&gt;use-zipimport&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false&lt;/span&gt;

&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="na"&gt;eggs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&lt;/span&gt;
&lt;span class="s"&gt;    tipfy&lt;/span&gt;
&lt;span class="s"&gt;    tipfy.ext.debugger&lt;/span&gt;
&lt;span class="s"&gt;    tipfy.ext.jinja2&lt;/span&gt;
&lt;span class="s"&gt;    tipfy.ext.wtforms&lt;/span&gt;
&lt;span class="s"&gt;    tipfy.ext.db&lt;/span&gt;
&lt;span class="c"&gt;# Остальные необходимые модули, например:&lt;/span&gt;
&lt;span class="c"&gt;#   pygments&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Конечно выполнение этого сценария потребует создания структуры папок:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;etc/downloads&lt;/code&gt; — кеш, в который скачиваются egg файлы&lt;/li&gt;
&lt;li&gt;&lt;code&gt;etc/develop-eggs&lt;/code&gt; — папка, в которую можно будет положить яйца, которые будут разрабатываться&lt;/li&gt;
&lt;li&gt;&lt;code&gt;etc/parts&lt;/code&gt; — рабочая директория рецептов, которым нужны дополнительные данные, в нашем случае сюда скачается GAE SDK&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src&lt;/code&gt; — собственно данные проекта и его исходный код&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src/distlib&lt;/code&gt; — ключевое место проекта, вся магия для того, чтобы наполнить эту папку зависимыми модулями, которые потом уйдут на хостинг вместе с кодом&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Подробнее о работе переменных, которым присвоены значения с путями, можно прочитать в &lt;a href="http://pypi.python.org/pypi/zc.buildout#predefined-buildout-options"&gt;справке по buildout&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Создаем папки:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;demo &lt;span class="nv"&gt;$ &lt;/span&gt;mkdir etc etc/downloads etc/develop-eggs etc/parts
demo &lt;span class="nv"&gt;$ &lt;/span&gt;mkdir src src/distlib
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Самое время развернуть окружение:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;demo &lt;span class="nv"&gt;$ &lt;/span&gt;python2.5 &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;curl http://python-distribute.org/bootstrap.py&lt;span class="o"&gt;)&lt;/span&gt; --distribute
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Команда создает папку &lt;code&gt;bin&lt;/code&gt; и скачивает современный аналог старых setuptools &lt;a href="http://packages.python.org/distribute/"&gt;distribute&lt;/a&gt;. Поскольку выполнять требуется один раз, предлагаю такой краткий вариант. А теперь главная часть:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;demo &lt;span class="nv"&gt;$ &lt;/span&gt;bin/buildout
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Выполнение команды займет некоторое время, но результат того стоит. Вы получите полностью готовое окружение.&lt;/p&gt;

&lt;h2&gt;Устройство проекта&lt;/h2&gt;

&lt;p&gt;Теперь дело за малым, начать писать код своего проекта. Он будет расположен в папке &lt;code&gt;src&lt;/code&gt;. Структура tipfy проекта достаточно простая:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;app.yaml&lt;/code&gt; — уже знакомый по документации &lt;a href="http://code.google.com/appengine/docs/python/config/appconfig.html#About_app_yaml"&gt;конфигурационный файл&lt;/a&gt; Google App Engine проекта&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main.py&lt;/code&gt; — в принципе, этот файл нужно будет изменять достаточно редко&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config.py&lt;/code&gt; — файл конфигурации, тоже должен быть знаком по многим другим проектам&lt;/li&gt;
&lt;li&gt;&lt;code&gt;urls.py&lt;/code&gt; — правила роутинга адресов страниц к хендлерам их обрабатывающим&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Авторы рекомендуют так же следующие папки:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lib&lt;/code&gt; — ваши библиотеки&lt;/li&gt;
&lt;li&gt;&lt;code&gt;templates&lt;/code&gt; — папка с шаблонами, если ваш проект совсем маленький, то возможно будет удобно размещать все шаблоны в одной папке&lt;/li&gt;
&lt;li&gt;&lt;code&gt;static&lt;/code&gt; — место для статических файлов, часто можно встретить следующую структуру внутри:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;js&lt;/code&gt; — javascript&lt;/li&gt;
&lt;li&gt;&lt;code&gt;images&lt;/code&gt; — картинки&lt;/li&gt;
&lt;li&gt;&lt;code&gt;css&lt;/code&gt; — таблицы стилей&lt;/li&gt;
&lt;li&gt;остальные файлы, например, &lt;code&gt;robots.txt&lt;/code&gt;, &lt;code&gt;favicon.ico&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;&lt;code&gt;app.yaml&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Файл, необходимый для работы любого GAE проекта. Минимальное содержимое для tipfy получится следующим:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="yaml"&gt;&lt;span class="l-Scalar-Plain"&gt;application&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;my-app&lt;/span&gt; &lt;span class="c1"&gt;# тот id который вы выбрали в консоли GAE&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;version&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;dev&lt;/span&gt;        &lt;span class="c1"&gt;# версия&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;runtime&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;python&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;api_version&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;1&lt;/span&gt;

&lt;span class="l-Scalar-Plain"&gt;derived_file_type&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;
&lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;python_precompiled&lt;/span&gt;

&lt;span class="l-Scalar-Plain"&gt;handlers&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;
&lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;url&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;/(robots\.txt|favicon\.ico)&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;static_files&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;static/\1&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;upload&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;static/(.*)&lt;/span&gt;

&lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;url&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;/static&lt;/span&gt;      &lt;span class="c1"&gt;# та самая папка static&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;static_dir&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;static&lt;/span&gt;

&lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;url&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;/remote_api&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;script&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;$PYTHON_LIB/google/appengine/ext/remote_api/handler.py&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;login&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;admin&lt;/span&gt;

&lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;url&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;/_ah/queue/deferred&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;script&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;main.py&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;login&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;admin&lt;/span&gt;

&lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;url&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;/.*&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;script&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;main.py&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Обратите внимание на последний блок, он указывает, что любые адреса страниц, кроме тех, которые были указаны выше (порядок имеет значение) передаются модулю &lt;code&gt;main.py&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;&lt;code&gt;main.py&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Главный загрузочный файл проекта тоже достаточно простой:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="c"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;lib&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c"&gt;# Add /lib as primary libraries directory, with fallback to /distlib&lt;/span&gt;
    &lt;span class="c"&gt;# and optionally to distlib loaded using zipimport.&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;lib&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;distlib&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;distlib.zip&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;config&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tipfy&lt;/span&gt;

&lt;span class="c"&gt;# Is this the development server?&lt;/span&gt;
&lt;span class="n"&gt;debug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;SERVER_SOFTWARE&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Dev&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Instantiate the application.&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tipfy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make_wsgi_app&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Строка &lt;code&gt;if 'lib' not in sys.path:&lt;/code&gt; проверяет добавлены ли модули, которые лежат в папке &lt;code&gt;lib&lt;/code&gt;, в путях, по которым ищет python. Из-за особенности устройства инстанций GAE путь уже может быть изменен (модулем, который загрузился до этого или &lt;a href="http://code.google.com/appengine/docs/python/config/appconfig.html#Warmup_Requests"&gt;warmup хендлером&lt;/a&gt;), поэтому проводится проверка.&lt;/p&gt;

&lt;p&gt;Рецепт &lt;code&gt;appfy.recipe.gae&lt;/code&gt; после запуска &lt;code&gt;bin/buildout&lt;/code&gt; заполняет папку &lt;code&gt;src/distlib&lt;/code&gt; теми продуктами, которые перечислены в директиве &lt;code&gt;${app_lib:eggs}&lt;/code&gt; в &lt;code&gt;buildout.cfg&lt;/code&gt;. Поэтому, после перезапуска buildout'а мы получаем актуальное содержимое папки, включая изменения из яиц, которые разрабатываются и находятся в режиме для разработки.&lt;/p&gt;

&lt;p&gt;Редактировать файл &lt;code&gt;main.py&lt;/code&gt; требуется крайне редко, разве что вам надо загрузить какие-то модули до обработки конфигурации и того, как начнут обрабатываться middleware самим tipfy (а точнее &lt;a href="http://werkzeug.pocoo.org/"&gt;werkzeug&lt;/a&gt; вокруг которого tipfy на самом деле является оберткой).&lt;/p&gt;

&lt;h3&gt;&lt;code&gt;config.py&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Конфигурационный файл тоже имеет достаточно простую архитектуру, из обязательных полей, по сути только перечень middleware (который может быть пустым) и сам перечень приложений:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="c"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;
&lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="c"&gt;# Configurations for the &amp;#39;tipfy&amp;#39; module.&lt;/span&gt;
&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tipfy&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;# Enable debugger. It will be loaded only in development.&lt;/span&gt;
    &lt;span class="s"&gt;&amp;#39;middleware&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;tipfy.ext.debugger.DebuggerMiddleware&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="c"&gt;# Перечень ваших приложений&lt;/span&gt;
    &lt;span class="s"&gt;&amp;#39;apps_installed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;demo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="c"&gt;# другие приложения&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Остальные настройки&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;code&gt;urls.py&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Хотя описание путей само по себе нельзя назвать простым занятием, но файл &lt;code&gt;urls.py&lt;/code&gt; в данном случае является предельно простым и прозначным:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="c"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tipfy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;get_config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;import_string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Rule&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;logging&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_rules&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;app_module&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;get_config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tipfy&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;apps_installed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c"&gt;# Load the urls module from the app and extend our rules.&lt;/span&gt;
            &lt;span class="n"&gt;app_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;import_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;.urls&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;app_module&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;rules&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app_rules&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_rules&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ne"&gt;AttributeError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ne"&gt;ImportError&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ouch! Misconfigured modules list, cant use &lt;/span&gt;&lt;span class="si"&gt;%r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; 
                &lt;span class="n"&gt;app_module&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;rules&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Задача файла обойти все приложения, зарегистрированные в конфигурационном файле &lt;code&gt;config.py&lt;/code&gt; (директива &lt;code&gt;apps_installed&lt;/code&gt;) и объединить их в единое правило.&lt;/p&gt;

&lt;h2&gt;Пишем код&lt;/h2&gt;

&lt;p&gt;Теперь время написать хоть что-то, что сможет вывести на экран вожделенный &lt;code&gt;Fuck world!&lt;/code&gt;. Создайте папку &lt;code&gt;demo&lt;/code&gt;, со следующей структурой:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__init__.py&lt;/code&gt; — пустой файл, который говорит, что текущая папка является python модулем&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handlers.py&lt;/code&gt; — непосредственно код модуля&lt;/li&gt;
&lt;li&gt;&lt;code&gt;urls.py&lt;/code&gt; — правила обработки страниц сайта&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Содержимое &lt;code&gt;src\demo\handlers.py&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tipfy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RequestHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Response&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HelloWorldHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RequestHandler&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Hello, World!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Содержимое &lt;code&gt;src\demo\urls.py&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tipfy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Rule&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_rules&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;Rule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;hello-world&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;demo.handlers.HelloWorldHandler&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h2&gt;Запуск проекта&lt;/h2&gt;

&lt;p&gt;Когда весь гениальный код написан, хочется его проверить в деле. Рецепт &lt;code&gt;appfy.recipe.gae&lt;/code&gt; услужливо сделал для этого все нужные скрипты и разместил их в папке bin. Поскольку нас интересует запуск, выполните следующую команду:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;demo &lt;span class="nv"&gt;$ &lt;/span&gt;bin/dev_appserver src
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Если все было сделано правильно, у вас должны были появиться логи проверки версии SDK и уведомление о том, на каком порту запущен веб сервер. Адрес можно скопировать в браузер и попытаться зайти, где с некоторой вероятностью получить приветствие.&lt;/p&gt;

&lt;p&gt;Скрипт &lt;code&gt;dev_appserver&lt;/code&gt; может получать все те параметы, которые описаны в &lt;a href="http://code.google.com/appengine/docs/python/tools/devserver.html"&gt;документации&lt;/a&gt;, но для удобства можно их перечислить в специальном конфигурационном файле &lt;code&gt;gaetools.cfg&lt;/code&gt; и положить рядом с &lt;code&gt;buildout.cfg&lt;/code&gt;. Пример файла:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="cfg"&gt;&lt;span class="k"&gt;[dev_appserver]&lt;/span&gt;
&lt;span class="na"&gt;defaults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&lt;/span&gt;
&lt;span class="s"&gt;    --datastore_path=var/data.store&lt;/span&gt;
&lt;span class="s"&gt;    --history_path=var/history.store&lt;/span&gt;
&lt;span class="s"&gt;    --blobstore_path=var/blob.store&lt;/span&gt;
&lt;span class="s"&gt;    src&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Последняя строка указывает на папку, в которой расположен проект, что упростит команду запуска сервера до:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;demo &lt;span class="nv"&gt;$ &lt;/span&gt;bin/dev_appserver
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Не забудьте создать папку &lt;code&gt;var&lt;/code&gt; если воспользуетесь указанным файлом.&lt;/p&gt;

&lt;h2&gt;Развертывание проекта на хостинге&lt;/h2&gt;

&lt;p&gt;Остался последний шаг - отправить проект на сервера App Engine и проверить работу там. Для этого в папке &lt;code&gt;bin&lt;/code&gt; есть скрипт &lt;code&gt;appfg&lt;/code&gt;, который так же входит в состав стандартного SDK, и имеет тот же самый &lt;a href="http://code.google.com/appengine/docs/python/tools/uploadinganapp.html"&gt;набор команд&lt;/a&gt;. Заливка на сервер происходит достаточно просто:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;demo &lt;span class="nv"&gt;$ &lt;/span&gt;bin/appcfg --no_cookies --email&lt;span class="o"&gt;=&lt;/span&gt;your_email@gmail.com --passin update src
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;В качестве email'а укажите свой. Выполнение команды может занять минуты.&lt;/p&gt;

&lt;h2&gt;Дополнительная информация&lt;/h2&gt;

&lt;p&gt;Все описаные шаги в будущем можно сократить, скачав с сайта tipfy архив типового проекта &lt;a href="http://www.tipfy.org/tipfy.build.tar.gz"&gt;www.tipfy.org/tipfy.build.tar.gz&lt;/a&gt;, в котором уже есть необходимая структура папок и файлов.&lt;/p&gt;

&lt;p&gt;Дополнительные ссылки:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://werkzeug.pocoo.org/"&gt;Werkzeug&lt;/a&gt; — основная библиотека, на основе которой построен tipfy&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tipfy.org/"&gt;Tipfy&lt;/a&gt; — главный сайт Tipfy, место, где можно найти более подробную документацию&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/appengine/tools_tips.html"&gt;Tools and tips&lt;/a&gt; — карта статей и документации по разным API GAE&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/uCsXTk_h0Bc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/04/Tipfy</feedburner:origLink></entry>
 
 <entry>
   <title>Добро пожаловать на Vurt.ru</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/xA2K7JjawIM/Vurt-ru" />
   <updated>2011-03-17T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Vurt-ru</id>
   <content type="html">&lt;p&gt;Блог переехал на свой домен и поменял платформу. Если все сделал правильно, теперь на &lt;a href="http://app-engine.tumblr.com/"&gt;старом блоге&lt;/a&gt; будут публиковаться анонсы со ссылкой на этот сайт.&lt;/p&gt;

&lt;p&gt;В качестве движка был выбран &lt;a href="https://github.com/Arachnid/bloggart"&gt;bloggart&lt;/a&gt; (&lt;a href="https://github.com/xen/bloggart"&gt;мой форк&lt;/a&gt;), который стал результатом популярной &lt;a href="http://blog.notdot.net/2009/10/Writing-a-blog-system-on-App-Engine"&gt;серии постов Google&lt;/a&gt; инжеренера Ника Джонсона (Nick Johson) о том, как надо писать приложения под GAE.&lt;/p&gt;

&lt;p&gt;Соглашусь, что было немного странно, что блог о гаешечке расположен на какой-то другой платформе. Но одно дело написание кода, другое желание делиться информацией.&lt;/p&gt;

&lt;p&gt;Для тех, кто был &lt;a href="http://feeds.feedburner.com/app-engine"&gt;RSS подписчиком&lt;/a&gt; ничего не изменилось, поскольку Feedburner переключен на новый фид и пару дней тестирования показали, что даже не появились дубликаты перенесенных записей. К сожалению при переезде потерялись старые даты, но это небольшая потеря.&lt;/p&gt;

&lt;p&gt;Пользователям Tumblr (в старое место) к сожалению будут приходить только ссылки с анонсами. Похоже за последние пару лет политика поменялась и больше нельзя импортировать запись полностью.&lt;/p&gt;

&lt;p&gt;Комментарии не перенеслись, но на новом сайте уютнее и я приглашаю всех пользоваться им. Про Bloggart будет следующий пост.&lt;/p&gt;

&lt;p&gt;Добро пожаловать на мой старый новый блог о Google App Engine.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/xA2K7JjawIM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Vurt-ru</feedburner:origLink></entry>
 
 <entry>
   <title>Выступления на pycamp в Киеве</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/bXOKU5qlHbs/pycamp" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/pycamp</id>
   <content type="html">&lt;p&gt;Видео с выступления на pycamp в Киеве. Начало немного смазано. Выступление было расчитано на аудиторию с начальным уровнем знаний, поэтому возможно кому-то покажется повторением материала.&lt;/p&gt;

&lt;p&gt;&lt;embed src="http://blip.tv/play/g_5ggcuPZQI" type="application/x-shockwave-flash" width="480" height="295" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/bXOKU5qlHbs" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/pycamp</feedburner:origLink></entry>
 
 <entry>
   <title>Список open source проектов для GAE</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/-9So-q2QVEg/open-source-GAE" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/open-source-GAE</id>
   <content type="html">&lt;p&gt;Большой архив англоязычной рассылки проектов с открытым исходным кодом и разной степени свободными лицензиями.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://groups.google.com/group/google-appengine/web/google-app-engine-open-source-projects"&gt;Список&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/-9So-q2QVEg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/open-source-GAE</feedburner:origLink></entry>
 
 <entry>
   <title>Обновление bootstrap.py</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/-OuaLLViQHY/bootstrap-py" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/bootstrap-py</id>
   <content type="html">&lt;p&gt;Сегодня мы столкнулись с небольшой проблемой. Проект отказался разворачивать рабочее окружение стандартными командами:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python2.5 bootstrap.py --distribute
&lt;span class="nv"&gt;$ &lt;/span&gt;bin/buildout
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Мы начали получать сообщение:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="pytb"&gt;&lt;span class="gt"&gt;Traceback (most recent call last):&lt;/span&gt;
  File &lt;span class="nb"&gt;&amp;quot;bin/buildout&amp;quot;&lt;/span&gt;, line &lt;span class="m"&gt;22&lt;/span&gt;, in &lt;span class="n"&gt;&amp;amp;lt;module&amp;amp;gt;&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;zc.buildout.buildout&lt;/span&gt;
&lt;span class="gr"&gt;ImportError&lt;/span&gt;: &lt;span class="n"&gt;No module named zc.buildout.buildout&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Оказалось проблема в том, что ребята из Zope Corporation обновили версии своих продуктов. Для того чтобы исправить проблему надо либо перейти на следующую версию zc.buildout, либо прямо указывать версию:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;bootstrap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;distribute&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Переход не займет много времени, просто замените старый bootstrap.py на новый &lt;a href="http://svn.zope.org/repos/main/zc.buildout/branches/1.4/bootstrap/bootstrap.py"&gt;http://svn.zope.org/repos/main/zc.buildout/branches/1.4/bootstrap/bootstrap.py&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Более подробная информация доступна в рассылке distutils &lt;a href="http://mail.python.org/pipermail/distutils-sig/2010-August/016745.html"&gt;http://mail.python.org/pipermail/distutils-sig/2010-August/016745.html&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/-OuaLLViQHY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/bootstrap-py</feedburner:origLink></entry>
 
 <entry>
   <title>Use Case: SnapABug</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/ipei1HzXL-E/Use-Case-SnapABug" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Use-Case-SnapABug</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;Этот пост открывает новую рубрику в блоге. Use Case — это описание разных интересных проектов которые уже работают на Google App Engine. Если вы делаете какой-то проект и он хотя бы доступен для тестирования, то вполне вероятно этот блог одно из мест где вам будут рады. Думаю необычная платформа должна дать жизнь новым интересным проектам, о которых мы будем говорить в этой рубрике.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;SnapABug&lt;/h1&gt;

&lt;p&gt;&lt;a href="http://snapabug.com"&gt;&lt;img src="https://img.skitch.com/20110315-d1ykpfuc8hun3d1un7arc4be7f.preview.jpg" alt="SnapEngage Live chat and more..." /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Технологии: Java, Google App Engine&lt;/p&gt;

&lt;h2&gt;Описание проекта&lt;/h2&gt;

&lt;p&gt;Представьте себе задачу, вы разрабатываете и выпускаете сайт, но все ли идет хорошо? В какой-то момент клиент или посетитель начинает говорить что где-то там что-то как-то не так работает. Если это клиент, то можно взять телефон и начать выяснять что не так.&lt;/p&gt;

&lt;p&gt;Вы по телефону будете выяснять в чем же там все таки не так. И то чего вам будет не хватать это возможности взглянуть на экран его глазами. В крайнем случае придется приехать к нему в офис и увидеть проблему. Но что делать если посетитель не клиент или нет возможности прийти к клиенту?&lt;/p&gt;

&lt;p&gt;В этом случае мы просим клиента сделать screenshot и приложить его к письму. Способ стар как мир, но кажется иногда срабатывает. Одна проблема: приходится объяснять клиенту как делать снимок экрана и отправлять его по почте.&lt;/p&gt;

&lt;p&gt;"Но что если бы браузер сам делал снимки экрана?", так подумали ребята которые сделали &lt;a href="http://snapabug.com"&gt;SnapABug&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Как это все работает&lt;/h2&gt;

&lt;p&gt;Вы размещаете на своем сайте небольшой JavaScript который располагается где-то на границе окна. Если пользователь видит проблему то он нажимает на ссылку и в открывшемся окне заполняет небольшую заявку. На следующем шаге запускается Java Applet который делает снимок сайта так как он выглядит у клиента. Полученный отчет содержит информацию о посетителе, характеристиках его браузера, географии и, конечно же, картинку.&lt;/p&gt;

&lt;p&gt;Я задал несколько вопросов Jerome Breche, и узнал, что по их оценкам Java есть у 90% пользователей. А значит у вас очень большая вероятность, что сообщение об ошибке будет содержать удобное визуальное дополнение.&lt;/p&gt;

&lt;p&gt;Думаю &lt;a href="http://www.snapabug.com/"&gt;видео даст исчерпывающие ответы&lt;/a&gt; о возможностях этого инновационного проекта.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/ipei1HzXL-E" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Use-Case-SnapABug</feedburner:origLink></entry>
 
 <entry>
   <title>UniversITy'2011 в Киеве 25го февраля</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/QaW0MBaN3ME/UniversITy-2011-25" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/UniversITy-2011-25</id>
   <content type="html">&lt;p&gt;Опять еду в Киев. В этот раз буду читать доклад на &lt;a href="http://university.aiesec.kiev.ua/"&gt;конференции UniversITy  2011&lt;/a&gt;, темой которой являются облачные вычисления.&lt;/p&gt;

&lt;p&gt;Мой доклад называется "GAE как платформа для стартапов". Выступление будет в пятницу, после выступления вернусь в Одессу.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/QaW0MBaN3ME" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/UniversITy-2011-25</feedburner:origLink></entry>
 
 <entry>
   <title>Tools and Tips</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/YiaNouBMgek/Tools-and-Tips" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Tools-and-Tips</id>
   <content type="html">&lt;p&gt;Внезапно в подразделе GAE на Google Code появился новый подраздел. Это удобнейшая карта документации сервисов, дополнительных библиотек и утилит доступных в Python и Java SDK&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/appengine/tools_tips.html"&gt;Посмотреть&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/YiaNouBMgek" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Tools-and-Tips</feedburner:origLink></entry>
 
 <entry>
   <title>Проблемы с SQLite в SDK</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/nbl9q-SNe98/SQLite-SDK" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/SQLite-SDK</id>
   <content type="html">&lt;p&gt;Во время тестирования обнаружилась досадная проблема, оказывается при использовании SQLite в запросах которых присутствует ключ в качестве одного из критериев он игнорируется. Например такой код:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;some_field&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;some_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;__key__ &amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;some_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# Этот критерий будет проигнорирован&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Причем если только ключ, то все будет найдено:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;__key__ &amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;some_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# Это сработает&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Если переключиться на стандартное хранилище (а точнее не использовать флаг &lt;code&gt;--use_sqlite&lt;/code&gt;), то будет работать как и ожидалось.&lt;/p&gt;

&lt;p&gt;ID заявки &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=3232"&gt;3232&lt;/a&gt;, если у вас проблема тоже повторяется, то проголосуйте.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/nbl9q-SNe98" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/SQLite-SDK</feedburner:origLink></entry>
 
 <entry>
   <title>SMS верификация</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/TIkGUkmf1GA/SMS" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/SMS</id>
   <content type="html">&lt;p&gt;Мне сложно судить о том, что SMS верификация это плохо. Как человек который находится по ту сторону проверки срабатывает стокгольмский синдром и кажется, что все не так уж и сложно, но как видно у некоторых людей все же есть проблемы. Вот пример истории такой истории.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://romaklimenko.tumblr.com/post/265077219/google-app-engine" class="tumblr_blog"&gt;romaklimenko&lt;/a&gt;:&lt;/p&gt;




&lt;blockquote&gt;&lt;p&gt;Вчера я написал небольшое приложение на Django для Google App Engine, но выложить не смог, т.к. на мой номер не приходили SMS с auth. code. Я конечно расстроился, написал в поддержку Google, а сам стал думать что может это и к лучшему, ведь на нормальном хостинге и возможностей больше.&lt;/p&gt;

&lt;p&gt;Но на следующий день мне пришло такое письмо:&lt;/p&gt;

&lt;blockquote&gt;
Hello,&lt;/blockquote&gt;

&lt;blockquote&gt;You&amp;#8217;re receiving this email because you indicated you&amp;#8217;d had some problems verifying your Google App Engine account using SMS.  We just wanted to let you know we&amp;#8217;ve enabled your account&amp;#8212;you should be able to create applications now!&lt;/blockquote&gt;

&lt;blockquote&gt;To start creating applications with Google App Engine, simply follow this link:&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;a href="https://appengine.google.com/"&gt;https://appengine.google.com/&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;Thanks!&lt;/blockquote&gt;
&lt;blockquote&gt;The Google App Engine Team&lt;/blockquote&gt;

&lt;p&gt;По моему это образец правильного саппорта. Да, есть странное требование авторизации по SMS, но если у клиента с этим проблема, проблема будет решена.&lt;/p&gt;

&lt;p&gt;За сутки, прошедшие со времени моего обращение в поддержку, я свыкся с мыслью о том, что мне надо искать нормального хостера и перенес весь код на нормальное Django. Но это другая история и мое отношение к Google как к компании стало только лучше.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;В общем, не отчаивайтесь даже если SMS не пришло сразу.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/TIkGUkmf1GA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/SMS</feedburner:origLink></entry>
 
 <entry>
   <title>Пререлиз SDK 1.3.1</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/VJE6ZMyBcR0/SDK-1-3-1" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/SDK-1-3-1</id>
   <content type="html">&lt;p&gt;Доступен новый пререлиз App Engine SDK версии 1.3.1 (напоминаю, что теперь релизы двухфазные, сначала выходит предварительная версия, а чуть позже публичная):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://groups.google.com/group/google-appengine/browse_thread/thread/ddef6d9fa4aa0ae2"&gt;Анонс&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/downloads/list"&gt;Страница для скачивания&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Поскольку не для всего еще есть описания и примеры, то подробный список оставим до момента выхода публичной версии. Тем кто следит за бета версиями достаточно будет этого анонса.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/VJE6ZMyBcR0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/SDK-1-3-1</feedburner:origLink></entry>
 
 <entry>
   <title>Python и море (вакансии)</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/e9XrHCoInF0/Python" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Python</id>
   <content type="html">&lt;p&gt;Sexy технологии должны делаться в sexy местах. Поэтому iPark Ventures открывает центр разработки в Одессе. В котором будут делаться проекты с применением одних из самых интересных на данный момент технологий:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;GWT (Java)&lt;/li&gt;
&lt;li&gt;Google App Engine&lt;/li&gt;
&lt;li&gt;Social web&lt;/li&gt;
&lt;li&gt;Высокая нагрузка&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Самые красивые девушки в Украине, а самые красивые девушки в Украине в Одессе. И самое главное, что в Одессе есть море, еще не Калифорния, но гораздо ближе к условиям проживания для настоящих профессионалов.&lt;/p&gt;

&lt;p&gt;Сейчас открыто несколько вакансий, среди них пара для программистов.&lt;/p&gt;

&lt;h3&gt;Python программист&lt;/h3&gt;

&lt;p&gt;Требования:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Знать хорошие языки программирования, например Python. Так же знать C/C++ или Java, уже начать интересоваться Erlang и OCaml.&lt;/li&gt;
&lt;li&gt;Уже знать, что базы данных — это не только MySQL. Еще есть и другие (подсказка: объектно-ориентированные, ключ-значние).&lt;/li&gt;
&lt;li&gt;Любить фреймворки настолько, чтобы понимать их недостатки и знать когда стоит отказаться от их использования, а когда проект идеально подходит. Иметь в портфолио несколько Django проектов.&lt;/li&gt;
&lt;li&gt;Рабочее окружение самурая Linux.&lt;/li&gt;
&lt;li&gt;Вы давно перевели свой репозиторий с завещанием и инструкциями на тот случай если инопланетяне захватят Землю на децентрализированную систему контроля версий.&lt;/li&gt;
&lt;li&gt;Полный стек web технологий не должны вас пугать. Что стоит на память перечислить все изменения в списке тегов между HTML4 и XHTML1.1? CSS и JavaScript надо знать в достаточном объеме чтобы пройти ACID тест на листике с бумагой, впрочем достаточно просто не вредить верстальщикам.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Java (GWT) программист&lt;/h3&gt;

&lt;p&gt;Требования:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Сохранить разум после жизни в компании которая заставляла вас писать на этом языке в течении последних пару лет. Чистый стол без стопки из десятка учебников не должен вызывать чувство беспомощности.&lt;/li&gt;
&lt;li&gt;Коллективная разработка без пяти начальников не заставляет вас кутаться в одеяло и обнимать плюшевого медведя.&lt;/li&gt;
&lt;li&gt;Уметь рассказать о GWT больше чем знаем мы. Знать, что такое Speed Tracer и уметь использовать.&lt;/li&gt;
&lt;li&gt;Продемонстрировать несколько примеров интерфейсов на GWT помимо тех которые были в туториалах.&lt;/li&gt;
&lt;li&gt;Желательно еще уметь читать код на Python. Знать не только о том, что творится внутри JVM, но и за ее пределами.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Общая информация&lt;/h3&gt;

&lt;p&gt;Офис недалеко от моря, небольшой и молодой коллектив, новые технологии, новые проекты, карьерные перспективы в связи с ростом количества проектов. Если у вас есть дар руководителя, то вы нам интересны вдвойне.&lt;/p&gt;

&lt;p&gt;Переезжающим предоставляется помощь. Зарплаты по результатам собеседования.&lt;/p&gt;

&lt;p&gt;Если кому-то это важно, то есть шанс поработать со мной в одной команде.&lt;/p&gt;

&lt;h3&gt;Контакты&lt;/h3&gt;

&lt;p&gt;Свои резюме отправляйте: [убрано, более не актуально]&lt;/p&gt;

&lt;p&gt;P.S. Девушки к вакансиям не прилагаются.
P.P.S. И конечно мы бы конечно хотели видеть и девушек в коллективе на позициях программистов, просто вас так исчезающе мало.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/e9XrHCoInF0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Python</feedburner:origLink></entry>
 
 <entry>
   <title>PyCon Украина (23-24 октября, Киев)</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/K4HjvTF3Nr4/PyCon-23-24" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/PyCon-23-24</id>
   <content type="html">&lt;p&gt;Для тех кто ещё не знает хочу сообщить радостную весть: 23-24 октября мы проводим в Киеве конференцию PyCon Ukraine посвящённую Python.&lt;/p&gt;

&lt;p&gt;Конференция международная, и в ней будут принимать участие много иностранных гостей. Ожидается много интересных людей:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://lucumr.pocoo.org/"&gt;Armin Ronacher&lt;/a&gt; (автор &lt;a href="http://jinja.pocoo.org/"&gt;Jinja&lt;/a&gt;, &lt;a href="http://werkzeug.pocoo.org/"&gt;Werkzeug&lt;/a&gt;, &lt;a href="http://dev.pocoo.org/projects/pygments/"&gt;Pygments&lt;/a&gt; и соавтор нового &lt;a href="http://www.python.org/dev/peps/pep-0444/"&gt;PEP 444&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.aeracode.org/"&gt;Andrew Godwin (автор South)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://twitter.com/jbronn"&gt;Justin Bronn&lt;/a&gt; (автор GeoDjango)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://djangoadvent.com/authors/arthur-koziel/"&gt;Arthur Koziel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.programa.pl/"&gt;Marcin Szajek&lt;/a&gt; (Programa.pl) and Maciej Dziardziel (Adwertajzing)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pyobject.ru/"&gt;Юрий Юревич&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.xen.ru/"&gt;Михаил Кашкин&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;+ многие другие&lt;/li&gt;&lt;/ul&gt;


&lt;p&gt; Стоимость участия всего 350 грн (примерно $44, или 1 367 руб.).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Регистрируйтесь на &lt;a href="http://ua.pycon.org/?utm_source=habrahabr.ru&amp;amp;utm_medium=link&amp;amp;utm_campaign=ua.pycon.org"&gt;http://ua.pycon.org/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Каждый участник получает бесплатную футболку PyCon Ukraine.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;С докладами в данный момент определяемся, на данный момент можем сказать что будет несколько известных зарубежных докладчиков, кроме того продолжаем переговоры с потенциальными докладчиками.&lt;/p&gt;

&lt;p&gt;Если вы хотите выступить с докладом &amp;mdash; после регистрации подайте Talk Proposal через &lt;a href="http://ua.pycon.org/cfpsubmit/?utm_source=habrahabr.ru&amp;amp;utm_medium=link&amp;amp;utm_campaign=ua.pycon.org"&gt;соотвествующую форму&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;По форматам докладов мы предпологаем такие варианты:&lt;ul&gt;&lt;li&gt;Talk (доклад на 30&amp;mdash;45 минут)&lt;/li&gt;
&lt;li&gt;Tutorial / Master-class (интерактивное действо на 30-45 минут)&lt;/li&gt;
&lt;li&gt;Lightning talk (пятиминутный доклад)&lt;/li&gt;
&lt;li&gt;Pecha kucha (по правилам &lt;a href="http://www.pecha-kucha.org/what"&gt;Pecha Kucha&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt; Для докладчиков участие бесплатное.
Кроме того, мы хотим проявить Open Space-активность и думаем над проведением спринта(ов) после конференции.
Основным языком докладов будет английский, но, безусловно, никто не запретит сделать интересный доклад и на русском.
Будем рады всех видеть а также открыты для предложений как сделать конференцию лучше.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import antigravity # !!!!!&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;PS: Думаю о теме для своего доклада. Кто о чём хочет услышать?&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/K4HjvTF3Nr4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/PyCon-23-24</feedburner:origLink></entry>
 
 <entry>
   <title>PyCamp в Киеве, 30 января</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/l4kXQY1MfY4/PyCamp-30" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/PyCamp-30</id>
   <content type="html">&lt;p&gt;&lt;a href="http://pycamp.org.ua/"&gt;&lt;img src="http://img.skitch.com/20100125-miq77ses27wq4jcbjaeuqhhynn.png" alt="pycamp-logo-new"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;30 января 2010 с 09:00 до 19:00 в городе Киев (Украина), ул. Мазепы 34, в учебном центре i-klass пройдет конференция PyCamp.&lt;/p&gt;

&lt;p&gt;У вас еще есть возможность зарегистрироваться, но обратите внимание, что регистрация платная (почему-то на сайте об этом не говорится, но в анонсе на &lt;a href="http://habrahabr.ru/blogs/python/81379/"&gt;Хабре указана цена&lt;/a&gt;), цена номинальная: для студентов 20 грн, остальные 50 грн.&lt;/p&gt;

&lt;p&gt;Тема моего доклада: "&lt;em&gt;Работа с хранилищем данных в Google App Engine, отличия от реляционной модели.&lt;/em&gt;" (время выступления 12:10-12:50). Расписание очень плотное, поэтому скорее всего придется уложиться в этом самое время. Что в общем-то наверное заставит меня наплевать на уровень подготовки слушателей и кратко выдать материал для подготовленных людей (то есть опять 5%-10%).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="+2"&gt;&lt;a href="http://pycamp.org.ua/"&gt;Pycamp.org.ua&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;
(расписание, темы доклада, регистрация)&lt;/p&gt;

&lt;p&gt;&lt;font color="gray"&gt;Для себя в расписании выделяю&lt;/font&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;font color="gray"&gt;Рецепты декораторов, скорее всего будет интересно. Тем более давно хотел познакомиться с Юрой.&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font color="gray"&gt;Немного возмущен тем почему с утра идет доклад о "тормознутости" python. Возможно для компании Рамблер те вещи которые описаны на слайдах являются откровением, но я бы задвинул этот доклад или выкинул вообще, тема такая тролололо. &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font color="gray"&gt;Жаль, что так поздно стоит презентация PyCharm, вот во что я априори верю, так это в способности JetBrains к созданию крутых новых продуктов.&lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/l4kXQY1MfY4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/PyCamp-30</feedburner:origLink></entry>
 
 <entry>
   <title>Prerelease SDK 1.3.8</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/5kgyDXG00pQ/Prerelease-SDK-1-3-8" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Prerelease-SDK-1-3-8</id>
   <content type="html">&lt;p&gt;Обзор изменений в новой версии &lt;a href="http://groups.google.com/group/google-appengine/browse_thread/thread/f79670c37defc6ec#"&gt;SDK 1.3.8&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Интересных вещей добавлено несколько:&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Возможность скачивать код для проектов обратно. Интересно что и для Java тоже, хотя это не имеет особого смысла, поскольку код скомпилирован. Вероятно добавят какие-то права и ограничения в будущем, чтобы регулировать кто может, а кто нет. Особенно это актуально для тех кто продает готовые сайты клиентам без доступа к коду.&lt;/li&gt;
&lt;li&gt;Пре компиляция python-кода теперь становится по умолчанию, но появилась опция для отключения. &lt;/li&gt;
&lt;li&gt;Возможность чтения данных из &lt;a href="http://code.google.com/appengine/docs/python/blobstore/blobreaderclass.html"&gt;Blob как файлов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Убраны ограничения для merge-join запросов которые используют zigzag поиск по индексам. Если честно то мы пока это не тестировали, но один из наиболее интересных пунктов для изучения.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Менее интересные:&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt; Кнопка &amp;ldquo;Удалить все&amp;rdquo; в админке, правда пока не нашел как ее включить, впрочем и необходимости не было :)&lt;/li&gt;
&lt;li&gt; Возможность управления качеством JPEG картинок которые отдаются через Image API.&lt;/li&gt;
&lt;li&gt; Дальнейшее прикручивание новых учетных записей Google, которые я в общем-то считаю внутренней кухней&lt;/li&gt;&lt;/ul&gt;


&lt;p&gt; &lt;/p&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/5kgyDXG00pQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Prerelease-SDK-1-3-8</feedburner:origLink></entry>
 
 <entry>
   <title>Из вопросов и ответов о Microsoft Azure</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/84WUPKVLNIQ/Microsoft-Azure" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Microsoft-Azure</id>
   <content type="html">&lt;p&gt;Готовлюсь к конференции по облачным вычислениям и решил ознакомиться с другими решениями.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Вопрос:&lt;/strong&gt; Чем стратегия облачных вычислений Microsoft отличается от IBM, Google или Amazon? Какие преимущества вы предлагаете по сравнению с конкурентами?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ответ:&lt;/strong&gt; Главное преимущество облачных вычислений заключается в широком выборе, и Microsoft занимает наилучшее положение для того, чтобы предлагать компаниям и разработчикам широчайший выбор при использовании облачных служб. Microsoft фундаментально отличается от Amazon, Google и всех других конкурентов тем, что позволяет заказчикам использовать локальные технологии, облачные технологии или оба типа в рамках стратегии Microsoft «ПО+службы» (S+S). Microsoft имеет все необходимое, чтобы обеспечивать самый полный набор служб, охватывающий частных клиентов и компании, и предоставлять разработчикам самый функциональный инструмент для доступа к облачным вычислениям.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;У меня в свою очередь вопрос, вы увидели хоть бит информации в ответе?&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/84WUPKVLNIQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Microsoft-Azure</feedburner:origLink></entry>
 
 <entry>
   <title>Анонс теста Matcher API</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/70dDQLE8GAQ/Matcher-API" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Matcher-API</id>
   <content type="html">&lt;p&gt;По ссылке презентация нового API которое будет доступно в следующих версиях SDK. Суть этого сервиса в том, что он позволяет создать большое количество сохраненных запросов и новые модели будут сравниваться с этими запросами, при выполнении условий отправляться на дальнейшую обработку.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://groups.google.com/group/google-appengine/browse_thread/thread/5462e14c31f44bef"&gt;записаться&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/70dDQLE8GAQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Matcher-API</feedburner:origLink></entry>
 
 <entry>
   <title>Kyiv GTUG - Михаил Кашкин, 'Обход ограничений Google App Engine'</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/1YpKuNdp3jk/Kyiv-GTUG---Google-App-Engine" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Kyiv-GTUG---Google-App-Engine</id>
   <content type="html">Kyiv GTUG - Михаил Кашкин, "Обход ограничений Google App Engine"&lt;br /&gt;

Фичи доклада:
&lt;ul&gt;&lt;li&gt;более 9000 раз сказал слово "вот" :) &lt;em&gt;(нужно больше практики публичных выступлений)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Есть Lolcatz и грузовик с пивом&lt;/li&gt;
&lt;li&gt;Общий объем 1 час 12 минут&lt;/li&gt;&lt;/ul&gt;

&lt;iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/1CCUGHxZJt8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/1YpKuNdp3jk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Kyiv-GTUG---Google-App-Engine</feedburner:origLink></entry>
 
 <entry>
   <title>Серверная часть на... Javascript</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/MUR3jA0r910/Javascript" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Javascript</id>
   <content type="html">&lt;p&gt;К тому, что в браузере нет выхода и приходится программировать только на одном языке уже можно привыкнуть. Некоторые обходят это ограничение путем использования Adobe Flash. Но недавно начался обратный процесс. Программисты начали говорить, что JavaScript является полноценным языком не только для выполнения в браузере. Конечно, основой для этого стала не тянущая рынок назад группа браузеров от Microsoft, а успех Mozilla Firefox и WebKit.&lt;/p&gt;

&lt;p&gt;Думаю эта новость будет приятной для тех кто видит будущее у отличного проекта &lt;a href="http://commonjs.org/"&gt;CommonJS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;George Moschovitis представил анонс проекта &lt;a href="http://www.appenginejs.org/"&gt;App Engine JavaScript SDK&lt;/a&gt;. Вы все правильно поняли, теперь достаточно знать только JavaScript для создания серверных скриптов и запуска их под Google App Engine. Конечно не прямо сейчас, а тогда когда проект достигнет более стабильного состояния.&lt;/p&gt;

&lt;p&gt;Оценить код можно по примерам. Вот пример работы с базой данных:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="js"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;google/appengine/ext/db&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StringProperty&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReferenceProperty&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;referenceClass&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;keyName&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;news&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;News&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;});&lt;/span&gt;
&lt;span class="s2"&gt;c.put();&lt;/span&gt;
&lt;span class="s2"&gt;var key = ...&lt;/span&gt;
&lt;span class="s2"&gt;var c1 = Category.get(key);&lt;/span&gt;
&lt;span class="s2"&gt;var c2 = Category.getByKeyName(&amp;quot;&lt;/span&gt;&lt;span class="nx"&gt;news&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Или работа с картинками:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="js"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;images&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;google/appengine/api/images&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;640&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Работает это все благодаря проекту &lt;a href="http://www.mozilla.org/rhino/"&gt;Rhino&lt;/a&gt;, реализации JavaScript на Java. Который запускается под виртуальной машиной.&lt;/p&gt;

&lt;p&gt;Домашняя страница проекта &lt;a href="http://www.appenginejs.org/"&gt;www.appenginejs.org&lt;/a&gt;, там же можно скачать пример проекта создающего блог и оценить готовность реализации поддержки разных API.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/MUR3jA0r910" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Javascript</feedburner:origLink></entry>
 
 <entry>
   <title>HB, GAE!</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/MDj1MOD7q3w/HB-GAE" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/HB-GAE</id>
   <content type="html">&lt;p&gt;Сегодня &lt;a href="https://appengine.google.com/"&gt;Google App Engine&lt;/a&gt; исполняется 2 года. Присоединяюсь к поздравлениям.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/MDj1MOD7q3w" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/HB-GAE</feedburner:origLink></entry>
 
 <entry>
   <title>Gum Wars на App Engine</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/xw7T8bHWKzo/Gum-Wars-App-Engine" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Gum-Wars-App-Engine</id>
   <content type="html">&lt;p&gt;На мой призыв рассказать о своем проекте откликнулись несколько человек. Один из них согласился ответить на мои вопросы.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.gumwars.com/"&gt;&lt;img src="http://img.skitch.com/20100423-prh1kbya9ah12bqy2h2ye4796j.png" alt="skitched-20100423-200157.png" border="0"/&gt;&lt;/a&gt;&lt;br /&gt;(ссылка с картинки ведет на сайт игры)&lt;/p&gt;

&lt;h2&gt;Об игре&lt;/h2&gt;


&lt;p&gt;Gum Wars — Это казуальная стратегия с возможностью играть онлайн с другими игроками. В приложении реализован comet способом polling, т.е. браузер постоянно посылает к серверу запросы на новые события. В качестве сервера используется Google App Engine.&lt;/p&gt;

&lt;p&gt;Автор проекта Григорий Темченко, персональный блог &lt;a href="http://sfoid.blogspot.com/"&gt;Soid&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Краткое интервью&lt;/h2&gt;


&lt;p&gt;&lt;strong&gt;Какие технологии используются на серверной стороне?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Я использовал Python, и выбор обусловлен, конечно, удобством для меня. Во-первых, у меня уже был некоторый опыт работы с ним. Во-вторых, пользуясь случаем, хочу поругать Java'вские IDE. Очень уж они медленные, а это для меня достаточно важно (недаром я все еще продолжаю использовать vim как редактор кода). А без IDE Java громоздка и страшна. В остальном я использую webapp фреймворк и разные части django, вроде шаблонов, форм, сериализации.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Какие сервисы предоставляемые Google задействованы?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Для отрисовки игры на клиенте я использовал Google Maps API 2-ой версии. Из App Engine сервисов используется memcache, datastore, queues, cron. Кажется, все.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Что можно кратко рассказать о технической реализации?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Профили пользователей и подобные постоянные записи хранятся в Datastore. Самое интересное - это обработка polling, организация потока сообщений в условиях, когда каждый пользователь присылает запрос раз в секунду. Для этого частично использован memcache, частично Datastore (для важных данных). Есть в планах кешировать в памяти App Cache, но от memcache это пока не избавит.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Сколько времени заняла реализация проекта?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;В течение трех месяцев я старался выкрадывать время на выходных, праздниках и иногда по вечерам, чтобы довести проект до приемлемого состояния. Хотя основная часть была сделана в Великие русские новогодние праздники, в остальное время оказалось довольно проблематично заставить себя заняться делом, работая в режиме 5/2 и тратя 2 часа в день по дороге на работу.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Были ли какие-то сложности специфические для GAE?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Конечно, любая новая технология вызывает определенные сложности. То, к чему привыкли разработчики на SQL, оказывается неправильным в идеологии GAE, во многих привычных вещах приходиться до смешного бороться за производительность. С одной стороны это сложности, но кому-то это может оказаться "по кайфу".&lt;/p&gt;

&lt;h2&gt;Вопросы&lt;/h2&gt;


&lt;p&gt;Если вы ходите задать мне или автору вопросы, то оставляйте их в комментариях к заметке.&lt;/p&gt;

&lt;p&gt;Еще раз ссылка на сайт &lt;a href="http://www.gumwars.com/"&gt;http://www.gumwars.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Если у вас есть интересный проект работающий на Google App Engine, то я бы с удовольствием рассказал о нем в своем блоге&lt;/em&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/xw7T8bHWKzo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Gum-Wars-App-Engine</feedburner:origLink></entry>
 
 <entry>
   <title>Запись на участие в тестировании Google SQL Service для #GAE</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/UMGSESEgQLg/Google-SQL-Service-GAE" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Google-SQL-Service-GAE</id>
   <content type="html">&lt;p&gt;Интересный нюанс, что из Roadmap эта задача недавно пропала, что вызвало обсуждение на Reddit. Но теперь становится понятно, что пропала по ошибке.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://spreadsheets0.google.com/a/google.com/viewform?hl=en&amp;amp;hl=en&amp;amp;formkey=dHBwRmpHV2VicFVVNi1PaFBvUGgydXc6MA&amp;amp;ndplr=1#gid=0"&gt;Заполнить форму&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/UMGSESEgQLg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Google-SQL-Service-GAE</feedburner:origLink></entry>
 
 <entry>
   <title>Google I/O 2009 - ..Scalable, Complex Apps on App Engine</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/zDor5YLrHW8/Google-I-O-2009---Scalable-Complex-Apps-on-App-Engine" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Google-I-O-2009---Scalable-Complex-Apps-on-App-Engine</id>
   <content type="html">&lt;p&gt;Создание сложных масштабируемых решений на Google App Engine.&lt;/p&gt;

&lt;p&gt;В докладе объясняется работа индексов, архитектура приложений которым в классическом случае понадобилось бы использование JOIN'ов. Примеры сложных фильтров на задаче построения социального графа.&lt;/p&gt;

&lt;iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/AgaL6NGpkB8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/zDor5YLrHW8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Google-I-O-2009---Scalable-Complex-Apps-on-App-Engine</feedburner:origLink></entry>
 
 <entry>
   <title>Google Developer Day Japan</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/e0r3OfG3ENA/Google-Developer-Day-Japan" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Google-Developer-Day-Japan</id>
   <content type="html">&lt;p&gt;Сейчас начался GDD в Японии, в &lt;a href="https://twitter.com/GoogleCode"&gt;твиттере&lt;/a&gt; обнаружилось несколько интересных постов: &lt;/p&gt;


&lt;p&gt;&lt;cite&gt;RT @GoogleCode: #appengine: 90K developers, 130K active apps and 5.5B pageviews every week #gdd2010jp&lt;br /&gt;
RT @GoogleCode: Japan is our 2nd largest App Engine market, after the U.S. #gdd2010jp&lt;/cite&gt;&lt;/p&gt;

&lt;p&gt;Сложно сказать какие цифры легли в основу статистики, я думаю 90 тысяч разработчиков — это те кто имеет статус администратора внутри активного приложения, а значит, что реальных сопричастных разработчиков больше. Например у нас в команде не все имеют доступ администратора.&lt;/p&gt;




&lt;p&gt;Что же касается второго поста, то тут понятно, экономика Японии является второй после США. Кстати в качестве интересного факта замечу, что недавно автора и активного разработчика Kay Framework приняли на работу в качестве сотрудника Google Japan. &lt;/p&gt;




&lt;p&gt;Если вы знаете японский или просто нравятся иероглифы, то можете следить за развитием событий по хештегу &lt;a href="https://twitter.com/#search?q=%23gdd2010jp"&gt;#gdd2010jp&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;P.S. Так же напоминаю, что регистрация на PyConf в Киеве и GDD в Москве продолжается.&lt;/p&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/e0r3OfG3ENA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Google-Developer-Day-Japan</feedburner:origLink></entry>
 
 <entry>
   <title>Слайды презентации доклада 'Квоты Google App Engine и способы их обхода'</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/7h_IA4PLAoI/Google-App-Engine" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Google-App-Engine</id>
   <content type="html">&lt;p&gt;Вот слайды презентации моего доклада который был в прошлую субботу (19 декабря) в Киеве.&lt;/p&gt;

&lt;p&gt;Очень рассчитываю на видео которое записывали организаторы.&lt;/p&gt;

&lt;iframe src="http://docs.google.com/present/embed?id=dhm9qp7w_139c9zt26fg&amp;size=l" frameborder="0" width="700" height="559"&gt;&lt;/iframe&gt;


&lt;p&gt;(или &lt;a href="http://docs.google.com/present/view?id=dhm9qp7w_139c9zt26fg"&gt;просмотрите по ссылке&lt;/a&gt;).&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/7h_IA4PLAoI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Google-App-Engine</feedburner:origLink></entry>
 
 <entry>
   <title>Очередная GTUG встреча в Киеве</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/CSIfBGli7LQ/GTUG" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/GTUG</id>
   <content type="html">&lt;p&gt;За то время пока в блоге была тишина мы в iPark Ventures успели спроектировать и погрузиться в работу над большим проектом который работает на Google App Engine. Сергей с которым мы пол года назад провели первый GTUG в Киеве опять пригласил меня и Криса для очередных лекций.&lt;/p&gt;

&lt;p&gt;Вот текст приглашения который должен был прийти всем участникам прошлой встречи и участникам рассылки киевской группы.&lt;/p&gt;

&lt;pre&gt;
Цього тижня, у суботу відбудеться зустріч Kyiv GTUG,
київської групи користувачів технологій Google. На цей раз до нас
знову завітає Кріс Шабо, який працює над соціальними сервісами у офісі
Google у Маунтін-В'ю, і розкаже про Buzz API, який було представлено
на конференції Google I/O в травні. Будь ласка, ознайомтеся з його
виступом на цій конференції:
http://code.google.com/events/io/2010/sessions/google-buzz-apis.html

Також Михайло Кашкін продовжить цикл лекцій про Google App Engine.
Також раджу подивитися його попередні виступи:
http://www.youtube.com/results?search_query=%D0%BA%D0%B0%D1%88%D0%BA%D0%B8%D0%BD+gtug&amp;aq=f

Отже, запрошую вас у галерею «Худграф» за адресою бульвар Тараса
Шевченка, 33, другий поверх (карта: http://goo.gl/2Hux) у суботу, 17
липня о 13:00.

Для участі необхідно зареєструватися: http://kyiv.gtugs.org/register

Якщо вас цікавлять технології Google, прошу також приєднуватися до
нашої групи - http://groups.google.com/group/kyiv-gtug/subscribe
Якщо ж ви не хочете надалі отримувати подібні повідомлення, будь
ласка, відішліть пусте повідомлення у відповідь на цей лист.

До зустрічі!

З повагою,
Сергій Каук

Організатор Kyiv GTUG
&lt;/pre&gt;


&lt;p&gt;P.S. Так же 15 июля приму участие в панельной секции конференции "Маркетинг в цифровые времена", Одесса, которая проводится Яндексом (&lt;a href="http://advertising.yandex.ru/advertiser/education/odessa.xml"&gt;Подробнее&lt;/a&gt;)&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/CSIfBGli7LQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/GTUG</feedburner:origLink></entry>
 
 <entry>
   <title>Электронная книга 'GAEJ Experiments'</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/hfwPebkE6ZQ/GAEJ-Experiments" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/GAEJ-Experiments</id>
   <content type="html">&lt;p&gt;Блог Google App Engine Java Experiments собрал свои посты и объединил в электронную книгу. В книге 16 глав посвященных работе с Java. Размер файла 5.7 Мб.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gaejexperiments.wordpress.com/gaej-experiments-ebook/"&gt;Книга&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/hfwPebkE6ZQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/GAEJ-Experiments</feedburner:origLink></entry>
 
 <entry>
   <title>Синтетическое сравнение GAE и Amazon EC2 по ценам</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/lha8Bda2M8E/GAE-Amazon-EC2" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/GAE-Amazon-EC2</id>
   <content type="html">&lt;p&gt;Дам ссылку на мой старый мартовский пост сравнивающий цены на этих двух популярных платформах. Без учета цены администратора, а только по прайс-листам обоих сервисов. Обращайте внимание, что у сравниваемых разные технологические возможности.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://xenru.livejournal.com/138948.html"&gt;Сравнение цен&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/lha8Bda2M8E" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/GAE-Amazon-EC2</feedburner:origLink></entry>
 
 <entry>
   <title>Архитектура высоконагруженных проектов работающих на GAE</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/1ARQ83lvkDc/GAE-2" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/GAE-2</id>
   <content type="html">&lt;p&gt;Видео доклада "Архитектура высоконагруженных проектов работающих на GAE". Это мое очередное выступление в Киеве на PyConf'е.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.scribd.com/doc/39999753/"&gt;Слайды доклада&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;embed src="http://blip.tv/play/hsBego3RfQI%2Em4v" type="application/x-shockwave-flash" width="480" height="345" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/1ARQ83lvkDc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/GAE-2</feedburner:origLink></entry>
 
 <entry>
   <title>Доклад: Архитектура высокопроизводительных проектов / GAE</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/-WX8eps_It0/GAE-1" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/GAE-1</id>
   <content type="html">&lt;p&gt;Мой доклад/мастер-класс на &lt;a href="http://ua.pycon.org/"&gt;PyConf в Киеве &lt;/a&gt; будет посвящен архитектуре проектов.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Краткий анонс:&lt;/strong&gt; Опыт построения социальных сайтов под Google App Engine созданых с расчетом на высокую нагрузку&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Описание:&lt;/strong&gt; Облачный хостинг — это одна из наиболее активно развивающихся концепций современного хостинга приложений. Google App Engine является одной из наиболее привлекательных по своим возможностям, цене и технологиям. Но с другой стороны, для непосвященного разработчика, GAE  становится "прокрустовым ложем", средой со множеством ограничений и условностей.
Доклад посвящен практике создания масштабируемых социальных проектов в этих условиях.&lt;/p&gt;

&lt;p&gt;Если есть какие-то вопросы, то готов их получить сейчас чтобы расширить содержание доклада.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/-WX8eps_It0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/GAE-1</feedburner:origLink></entry>
 
 <entry>
   <title>Заблужения о GAE</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/cI_zdld3HPg/GAE" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/GAE</id>
   <content type="html">&lt;p&gt;Я человек эмоциональный и меня иногда начинает колотить от ереси с которой приходится сталкиваться во многих аспектах жизнедеятельности. Поскольку занимаюсь разработкой под Google App Engine, то часть кхм... жизнедеятельности того места в котором у приличных людей находится мозг приходится отфильтровывать.&lt;/p&gt;

&lt;p&gt;Пройдусь по некоторым пунктам включая старые.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;В GAE нету базы данных&lt;/b&gt;. Неправда, в GAE нету базы данных которая выполняет привычный &lt;em&gt;некоторым&lt;/em&gt; диалект SQL который используется в СУБД MySQL. Но понятие базы данных шире чем одна реализация. Если вы находитесь на этапе развития когда вам все еще интересно с одной технологией, то возможно вам стоит сосредоточиться на ней, а искать и обсуждать новые тогда когда появится интерес.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;GAE бесплатный хостинг&lt;/b&gt;. У Google App Engine есть понятие квоты, в пределах этой квоты вы можете размещать свое приложение. Если вы выходите за пределы бесплатной квоты, то можете включить режим биллинга и ваши квоты будут увеличены, но при превышении их уже придется платить. Если ваш сайт с небольшой посещаемостью, то он может уместиться в начальные квоты и вы не будете платить за его хостинг деньги.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Google гребет деньги за все подряд&lt;/b&gt;. &lt;font color="gray"&gt;Воистину буйных много&lt;/font&gt; Нет Google не берет деньги за каждый ваш чих. Если вы знакомы с устройством современного хостинга, то вы сами за минуту сможете угадать все за что берет деньги облачный сервис. Пожалуй только одно ограничение похоже на попытку брать деньги за воздух — квота на количество отправляемых сообщений по электронной почте. Но по сути это защита компанией от того чтобы его платформу не превратили в спам ферму. Помимо этого квотируется: трафик, процессорное время и хранение данных. Но для удобства владельца сайта можно распределять бюджет между этими ресурсами более мелкими порциями. Например, можно разрешить больший трафик, но меньшее место на диске. И вообще посмотрите на &lt;a href="http://code.google.com/appengine/docs/quotas.html#Resources"&gt;страницу квот&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Как только вы выйдете за пределы квоты вас заблокируют&lt;/b&gt;. Видимо еще остались люди которые никогда в жизни не были на рынке. Если покупателю нахамит продавец, что он сделает? Правильно, пойдет к другому продавцу. Возможно внутри самой компании есть недоброжелатели, но не уверен что они способны занимать посты которые позволят принять такое решение. Как только вы выйдете за пределы квот сайт перестанет отвечать на запросы пользователей, это общая политика любой хостинг компании. Но только Google предлагает суточную квоту. Владелец сайта мог забыть оплатить хостинг или выставить правильно квоты, но сайт будет пытаться раздавать данные пользователям пока у него опять есть ресурс для этого. Неприятным фактом может быть то, что часть посетителей действительно не смогут посмотреть на сайт, но это говорит, что корень зла не в самой компании, а в разгильдяйстве владельца сайта.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Если мой сайт задосят, то мне придется платить тысячи долларов&lt;/b&gt;. Ситуация DDoS'а хоть и распространена, но не является типичной. Сейчас специалисты компании готовят механизм который позволит блокировать доступ к сайту в случае направленной атаки. За все время моей работы я сталкивался буквально несколько раз с ситуацией когда нас пытались вывести из строя. И положа руку на сердце могу сказать, что сайтов для которых эта ситуация критична доли процента. Если же такое произойдет, то законный способ — это обратиться в службу поддержки и вам компенсируют.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Все программы придется переделывать заново&lt;/b&gt;. Вот тут скорее бы поддержал эту мысль, GAE как платформа дает прекрасный шанс подумать над архитектурой сайтов с учетом того колоссального опыта построения масштабируемых решений который есть у Google. Но много заработает даром. Не сильно изменилась работа фронтенда Django сайтов. Хотя не будет работать административный интерфейс самого Django. Давайте честно я ни разу не видел рекламу на которой было бы написано "Добро пожаловать на Django хостинг". Если вы используете специфические вызовы для работы с конкретной версией базы данных, то безусловно не получится безболезненно сменить одно хранилище данных на другое.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Google сворует твои данные&lt;/b&gt;. Одна из популярных фраз Энрю Груова который руководил Intel "Выживают только параноики" звучит так что в ней можно найти глубокий смысл, но указанное заблуждение по сути не более чем &lt;a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt"&gt;FUD&lt;/a&gt;. Красноглазые системные администраторы с копеечной зарплатой которые любят давить на вопросы безопасности свято верят что у них есть что красть и есть что скрывать. Если вы находитесь за пределами разрешенного (о чем указано в договоре), то не размещайтесь на Appspot'е. Прежде чем что-то интеллектуальное защищать его надо создать. Суровая статистика показывает, что доля наших стартапов в общем числе равна статистической погрешности. Американцы не стесняются и размещают свои проекты у Google. Я начал использовать GAE потому, что понял что не могу в долгосрочной перспективе доверять любому хостингу в пределах границ бывшего Советского Союза. В этих странах нет понятия качества обслуживания и выполнения своих обязательств. Счастье в том, что как раз такие красноглазые советчики и не нужны чтобы выложить свой проект на GAE. Аллилуйя, для создания портала которым смогут пользоваться миллионы людей больше не нужны системные администраторы. Нужна только идея и руки чтобы ее реализовать.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Google пока делает бесплатно, а потом резко подымит цены&lt;/b&gt;. Еще один голос с печи, от кого-то кто не читал новости технологий последние 150 лет. Единственное на что мы можем рассчитывать в долгосрочной перспективе — это на падение цен. Мощности растут, технологии развиваются, цены падают. Есть случаи когда создается операционно убыточный сервис с расчетом на большие прибыли в будущем, но хостинг — это уже сформировавшаяся сфера услуг. Если бы у компании были бесконечные залежи денег, то возможно они бы устроили борьбу как монополист. Но Google никогда не станет единственным хостинг провайдером. Скорее всего постепенно массовый хостинг переместится внутрь организаций или даже домой. GAE прекрасно подходит для хостинга стартапов, а для "корпоративных" сайтов используйте http://sites.google.com/. Вопрос зачем им терять деньги сейчас и не получать прибыль от массовой службы?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Вы будете навсегда привязаны к Google&lt;/b&gt;. &lt;em&gt;Мир такой большой, но если вы встретите одного единственного человека который будет мил и люб сердцу, то это огромный риск. Как же так вокруг столько мужчин и женщин, а вы живете с любимым?&lt;/em&gt; Нет, конечно, Google выбирают не из-за любви. Возможно есть такие фанатики, но по моему — это попытка самоограничения. GAE подходит не для всех сайтов, но есть те для которых он подходит идеально. Если вам по какой-то причине не подходят стандартные условия, то можно развернуть самостоятельно &lt;a href="http://code.google.com/p/typhoonae/"&gt;AE окружение&lt;/a&gt; в котором запускать такие сайты. Конечно это придется делать самостоятельно. Если же ваш проект насколько критичен, то проспонсируйте его перевод из beta состояния в stable или закройте рот.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Глупость человеческая бесконечна, поэтому к сожалению продолжение следует....&lt;/em&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/cI_zdld3HPg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/GAE</feedburner:origLink></entry>
 
 <entry>
   <title>FAQ: Как мне определить где запускается код</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/sA4KeaflRXY/FAQ-1" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/FAQ-1</id>
   <content type="html">&lt;p&gt;Возможно очень простой вопрос, но тем не менее. Как можно определить что код запускается именно локально в SDK, а не на боевом сервере.&lt;/p&gt;

&lt;p&gt;Вот пример который поможет:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;SERVER_SOFTWARE&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;Development&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;



&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/sA4KeaflRXY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/FAQ-1</feedburner:origLink></entry>
 
 <entry>
   <title>FAQ: Голый домен</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/n73-sTtwp2k/FAQ" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/FAQ</id>
   <content type="html">&lt;p&gt;Один из самых часто задаваемых вопросов в рассылках это "Как мне настроить хостинг моего сайта на GAE без www (или голом домене/naked domain)".&lt;/p&gt;

&lt;p&gt;Постараюсь полностью ответить на этот вопрос для того чтобы было понимание почему это невозможно.&lt;/p&gt;

&lt;h2&gt;DNS&lt;/h2&gt;

&lt;p&gt;Для начала придется немного разобраться как работает система доменных имен в интернете.&lt;/p&gt;

&lt;p&gt;Когда мы набираем адрес страницы в браузере у нас происходит несколько событий. На первом этапе адрес разбивается на составляющие из которого выделяется доменное имя. И с помощью системной утилиты "ресолвится" в IP адрес, к которому уже потом идет запрос.&lt;/p&gt;

&lt;p&gt;DNS это по сути децентрализованная база данных расположенная на множестве серверов. Для сайта с именем &lt;code&gt;seoautomator.mediavirus.ru&lt;/code&gt; происходит процедура взаимодействия с DNS серверами. Прежде чем обратиться к самому серверу. Адрес разбивается на составные части, для удобства запишем их в обратном порядке &lt;code&gt;. ru mediavirus seoautomator&lt;/code&gt;,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.&lt;/code&gt; — точка, это нулевой уровень, DNS клиент обращается к корневому домену который состоит из . (точка), и запрашивает у него список DNS серверов которые отвечают за зону первого уровня.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ru&lt;/code&gt; — это домен первого уровня за него отвечает регистратор этого домена, когда клиент обращается к нему, то производится поиск в базе данных и выдается список NS серверов. Это те сервера которые мы указывали при регистрации.&lt;/li&gt;
&lt;li&gt;NS сервера домена &lt;code&gt;mediavirus&lt;/code&gt; уже наши и на запрос о том где seoautomator отвечают... пока для простоты скажем что отдает IP адрес.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Для полноты понимания мира можно прочитать &lt;a href="http://ru.wikipedia.org/wiki/DNS#.D0.A0.D0.B5.D0.BA.D1.83.D1.80.D1.81.D0.B8.D1.8F"&gt;статью о рекурсивном DNS запросе&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Датацентры&lt;/h2&gt;

&lt;p&gt;Что нам известно о Google с точки зрения их физического расположения? Несколько вещей:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;У Google много датацентров&lt;/li&gt;
&lt;li&gt;Они расположены в разных частях света&lt;/li&gt;
&lt;li&gt;Часто нам отвечает тот который ближе или тот который работает&lt;/li&gt;
&lt;li&gt;Вероятно Google сами бы хотели решать какой датацентр будет обслуживать какой сервис, в том числе и GAE&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Теперь перейдем к тому как устроен &lt;abbr title="Google App Engine"&gt;GAE&lt;/abbr&gt;-хостинг. Никто не рассказывает как он работает внутри, но кое-что известно. Во-первых мы знаем, о том, что это облачный сервис, во-вторых о том, что на самом деле физически сайт находится более чем на одной машине, и что многие сервисы обслуживаются через свои собственные каналы. Поэтому часто следующий запрос приходит не на ту же самую машину, правда в тот же датацентр.&lt;/p&gt;

&lt;blockquote&gt;Домашнее задание: попробуйте попинговать google.com и www.google.com и сравните разницу времени ответа. Задание со звездочкой посмотреть марштут traceroute.&lt;/blockquote&gt;


&lt;h2&gt;Добавление своего домена&lt;/h2&gt;

&lt;p&gt;Когда мы добавляем свой домен, то не можем добавить прямой IP адрес к конкретному серверу, как это происходит у многих других хостингов. Для случаев когда часть ветки DNS базы надо делегировать какому-то другому DNS серверу существует специальный тип записи CNAME. Поэтому мы добавляем следующую запись:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;seoautomator.mediavirus.ru.    CNAME   ghs.google.com.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;И вот тут начинается то ради чего был весь этот пост. Почему мы не можем добавить запись CNAME для голого домена?&lt;/p&gt;

&lt;p&gt;А теперь то чего вы меньше всего ожидали — глупого ответа без объяснения причин. По стандарту (&lt;a href="http://tools.ietf.org/html/rfc1912"&gt;RFC 1912, пункт 2.4&lt;/a&gt;, или более &lt;a href="http://en.wikipedia.org/wiki/CNAME_record#Restrictions"&gt;простым языком&lt;/a&gt;) запись CNAME для указанного хоста должена (MUST) быть единственной.&lt;/p&gt;

&lt;p&gt;Впрочем объяснение есть и очень простое, это просто правило безопасности, можно сравнить CNAME с символической ссылкой в файловой системе. Было бы странно если бы ссылка имела свое собственное представление о владельце файла или его размере, точно так же и тут. Перенаправляем клиента к другому серверу полностью.&lt;/p&gt;

&lt;h2&gt;Что делать с голыми доменами&lt;/h2&gt;

&lt;p&gt;Хотя одна из самых популярных заявок &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=777"&gt;#777&lt;/a&gt; посвящена как раз именно этой проблеме думаю не стоит ждать решения, а придумать его самостоятельно.&lt;/p&gt;

&lt;p&gt;Наиболее быстрый, но далеко не самый чистый способ это использовать редиректы &lt;a href="http://www.tumblr.com/"&gt;Tumblr&lt;/a&gt;'а &lt;a href="http://blog.umonkey.net/2009/11/google-app-engine-naked-domains.html"&gt;предложенные Urban Monkey&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Для коммерческих проектов конечно же лучше всего купить хостинг за несколько долларов в год и не зависеть от проблем проекта который любезно согласился приютить вас.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/n73-sTtwp2k" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/FAQ</feedburner:origLink></entry>
 
 <entry>
   <title>Открытие Experika.com</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/-9sc7OlMDgo/Experika-com" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Experika-com</id>
   <content type="html">&lt;p&gt;Если вы обратили внимание, то в последнее время интенсивность публикаций в блоге сильно упала. Этому есть несколько причин и одна из них в том, что те теоретические и практические знaния, которые я накапливал в течении последних пары лет, стали частью проекта, который мы только что запустили.&lt;/p&gt;

&lt;p&gt;Разрабатывая какие-то вещи практически с нуля, очень важно получить подтверждения того, что они вообще могут жить. Для разработчика таким доказательством является реальный и запущенный проект. Пока его еще нет, не знаешь действительно ли это будет работать, остаются какие-то сомнения. Кажется, что каждый может спросить "Вот ты так самоуверенно говоришь о каких-то вещах, а где это можно увидеть?"&lt;/p&gt;

&lt;p&gt;Теперь у меня есть все основания, чтобы говорить "да, работает и можно посмотреть", потому что iPark Ventures запустил в раннюю открытую бету проект &lt;a href="http://www.experika.com/"&gt;Experika.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.experika.com/" title="Welcome to Experika  by Vurter, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5259/5456921719_bbea890b03_z.jpg" width="640" height="437" alt="Welcome to Experika " /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;О чем этот проект&lt;/h3&gt;

&lt;p&gt;В текущий момент Experika.com можно назвать сайтом для поиска работы. Это не совсем правда, но это ближе всего к правде. К сожалению, я не буду раскрывать детали того, как сайт будет развиваться и что на нем будет появляться. Скажу одно - мы планируем продолжать улучшать те части, которые уже видны, а так же добавлять много новых.&lt;/p&gt;

&lt;p&gt;Сайт состоит из трех больших частей:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Поиск работы и сотрудников — мы потратили много времени для того, чтобы сделать поиск и работу с найденными резюме и вакансиями такими, какими они будут в ближайшем будущем.&lt;/li&gt;
&lt;li&gt;Управление персональными профайлами — то, ради чего стоит &lt;a href="http://www.experika.com/user/register"&gt;регистрироваться&lt;/a&gt; на сайте прямо сейчас. Поскольку вы получаете адрес вида &lt;a href="http://www.experika.com/mkashkin/"&gt;http://www.experika.com/%username%/&lt;/a&gt; и постепенно ваш профайл начнет играть роль в поиске работодателями вас по вашим навыкам. Как минимум такую же роль как и профайл на Моем Круге или LinkedIn'е, с той разницей, что вы сразу можете сделать профайл на тех языках, которые знаете&lt;/li&gt;
&lt;li&gt;Элементы социальной сети — возможность добавлять интересных людей в список контактов и переписываться с ними через сайт, а так же получать уведомления о предложениях, о работе или приглашения добавить в список контактов&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Помимо этих частей проект является мультиязычным, поэтому на нем будут пользователи и работодатели из разных стран.&lt;/p&gt;

&lt;h3&gt;Технологии&lt;/h3&gt;

&lt;p&gt;Достаточно просто разделить сайт на две большие части: клиентскую и серверную. Проект изначально проектировался как приложение, которое запускается внутри браузера и взаимодействует с сервером через специальный API (который постепенно будет публично анонсирован и документирован).&lt;/p&gt;

&lt;h4&gt;Серверная часть&lt;/h4&gt;

&lt;p&gt;Для построения серверной части был выбран легковесный фреймворк &lt;a href="http://www.tipfy.org/"&gt;tipfy&lt;/a&gt; написанный на Python. Он дает достаточно простые соглашения о конфигурировании и размещении кода внутри проекта. И имеет очень маленькое время старта по сравнению с другими, что является решающим. Кроме того, изначально он ориентирован на использование языка шаблонов &lt;a href="http://jinja.pocoo.org/"&gt;Jinja2&lt;/a&gt;, которые имеют возможность компиляции в python код, который в свою очередь может быть закеширован на инстанциях.&lt;/p&gt;

&lt;p&gt;Много времени и труда съела часть с i18n. Многие разработчики не сталкиваются с ней, поскольку делают проекты на одном языке (имеется ввиду русский или английский). Эта задача всегда съест больше времени, чем вы на нее планируете. &lt;a href="http://www.experika.com/"&gt;Experika&lt;/a&gt; планировался и есть мультиязычный проект, он уже на двух языках и будет больше.&lt;/p&gt;

&lt;p&gt;Если не вдаваться в детали, то python код отвечает за несколько страниц, которые отдают plain html и API методы.&lt;/p&gt;

&lt;h4&gt;Клиентская часть&lt;/h4&gt;

&lt;p&gt;Это полностью Google Web Toolkit (сокращенно GWT, авторы настаивают на прочтении [гвит]). Наши ребята сделали потрясающую работу и смогли воплотить в HTML достаточно сложные идеи, которые мы придумывали, когда создавали концепцию пользовательского интерфейса.&lt;/p&gt;

&lt;p&gt;Вспомогательную функцию играет Closure, на котором проще делать некоторые независимые элементы, например, визуальный редактор или анимацию тура.&lt;/p&gt;

&lt;h4&gt;Управление кодом&lt;/h4&gt;

&lt;p&gt;Поскольку клиентский и серверный код особо не пересекаются, то &lt;a href="http://www.buildout.org/"&gt;buildout&lt;/a&gt; и &lt;a href="http://ant.apache.org/"&gt;ant&lt;/a&gt; прекрасно уживаются рядом. Хоть и пришлось повозиться в начале со скриптами сборки, но невозможно переоценить помощь в работе с проектом.&lt;/p&gt;

&lt;p&gt;Сейчас, для того, чтобы развернуть проект для работы, требуется установить python нужной версии (2.5.x), доставить к нему PIL, который лучше брать из портов или бинарную сборку, JDK для клиентской части. После этого окружение разворачивается за минуты.&lt;/p&gt;

&lt;p&gt;По поводу скриптов для deploy распространяться не буду, у нас нетривиальная процедура, поэтому пришлось написать дополнительные. Некоторые конфигурационные файлы должны вести себя по разному, поэтому перед отправлением они проходят дополнительные преобразования (о ужас!) sed'ом.&lt;/p&gt;

&lt;h3&gt;Что дальше&lt;/h3&gt;

&lt;p&gt;Дальше я буду публиковать статьи о разных аспектах работы с GAE уже основываясь на достигнутом опыте. Как обычно, ваши вопросы и комментарии могут повлиять на выбор следующей темы. Так что не стесняйтесь.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/-9sc7OlMDgo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Experika-com</feedburner:origLink></entry>
 
 <entry>
   <title>Плагины для Eclipse и NetBeans</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/GSGR-dBlfEQ/Eclipse-NetBeans" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Eclipse-NetBeans</id>
   <content type="html">&lt;p&gt;Этот пост касается только Java программистов. Код быстрее разрабатывать используя специальные инструменты. Когда-то это были простые редакторы, постепенно они обросли возможностями и превратились в многосильные платформы разработки.&lt;/p&gt;

&lt;p&gt;Если вы пользуетесь Eclipse или NetBeans, то для ваших сред разработки есть два удобный плагина которые позволяют существенно оптимизировать некоторые задачи:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Генерирование шаблона проекта.&lt;/li&gt;
&lt;li&gt;Включение необходимых библиотек для запуска приложений.&lt;/li&gt;
&lt;li&gt;Инструменты для запуска и отладки проекта в локальном окружении.&lt;/li&gt;
&lt;li&gt;Заливка на сервер готового кода.&lt;/li&gt;
&lt;li&gt;Проверка кода в процессе его написания на предмет использования запрещенный библиотек.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Eclipse&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ktxpygkynf1qz4e2n.png" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;Расширение для Eclipse поддерживается Google. Для его установки придется выполнить две операции:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Скачать и установить дополнение для Eclipse с http://code.google.com/eclipse/&lt;/li&gt;
&lt;li&gt;Скачать и установить Google App Engine Java SDK с http://code.google.com/appengine/downloads.html&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Во время создания нового проекта при наличии галочки Use Google App Engine расширение спросит о местоположении SDK.&lt;/p&gt;

&lt;p&gt;В комплекте идет поддержка GWT (читается [гвит]), а если точнее то в GWT плагине идет поддржка GAE &lt;font color="gray"&gt;(но мы-то знаем, что важнее)&lt;/font&gt;.&lt;/p&gt;

&lt;h3&gt;NetBeans&lt;/h3&gt;

&lt;p&gt;Расширение поддерживает только то, что нужно для разработки Java приложений для GAE.&lt;/p&gt;

&lt;p&gt;Пакет не был найден в последней версии каталога расширений в интерфейсе NetBeans, поэтому устанавливать придется вручную &lt;a href="http://kenai.com/projects/nbappengine/pages/NBInstall"&gt;по инструкции&lt;/a&gt;. Поддерживаются версии 6.7.x и 6.8.x.&lt;/p&gt;

&lt;p&gt;Главная страница расширения &lt;a href="http://kenai.com/projects/nbappengine/pages/Home"&gt;NetBeans support for Google App Engine&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/GSGR-dBlfEQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Eclipse-NetBeans</feedburner:origLink></entry>
 
 <entry>
   <title>Apptrace — средство анализа использования памяти</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/4MB7RoVNdxg/Apptrace" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/Apptrace</id>
   <content type="html">&lt;p&gt;Статья будет интересна для тех кто использует тяжелые фреймворки или не уверен эффективности использования памяти. Если вы обнаружили в логах запись &amp;ldquo;Exceeded soft memory limit with 201.52 MB after servicing 415 requests total.&amp;rdquo;, то Apptrace — первая помощь для анализа мест где возникают проблемы.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/p/apptrace/wiki/UsingApptrace"&gt;Документация&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/4MB7RoVNdxg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/Apptrace</feedburner:origLink></entry>
 
 <entry>
   <title>AppEnginePeople</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/Fenf_dBYdIU/AppEnginePeople" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/AppEnginePeople</id>
   <content type="html">&lt;p&gt;Небольшой сайт на котором можно опубликовать свой профайл как App Engine разработчика. &lt;/p

Например [мой профайл](http://www.appenginepeople.net/users/xen/)

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/Fenf_dBYdIU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/AppEnginePeople</feedburner:origLink></entry>
 
 <entry>
   <title>Запись на тестирование новых API: Google Storage, Prediction Api, BigQuery</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/HwWzHjwngyc/API-Google-Storage-Prediction-Api-BigQuery" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/API-Google-Storage-Prediction-Api-BigQuery</id>
   <content type="html">&lt;p&gt;Итак, Google перешел на новый способ ввода новых GAE API, теперь почти все новые и вкусные вещи становятся сначала доступны для ограниченного списка доверенных разработчиков (trusted testers).&lt;/p&gt;




&lt;p&gt;Конечно может показаться, что попасть в их список почетно, но на самом деле наш опыт участия показывает, что это не всегда комфортно. Channels API несколько раз переставал работать и мы вынуждены были выключить его поддержку в текущем билде &lt;a href="http://www.bloop.ru/"&gt;www.bloop.ru&lt;/a&gt;, потому что пользователи просто жаловались на неработающие страницы.&lt;/p&gt;




&lt;p&gt;Так что использование API как trusted tester скорее для изучения, а не для использования на тестовых или живых сайтах. &lt;/p&gt;




&lt;p&gt;Если вы хотите начать тестировать &lt;a href="http://code.google.com/apis/storage/"&gt;Google Storage&lt;/a&gt;, &lt;a href="http://code.google.com/apis/predict/docs/getting-started.html"&gt;Prediction API&lt;/a&gt;, &lt;a href="http://code.google.com/apis/bigquery/"&gt;BigQuery&lt;/a&gt;, то можете заполнить &lt;a href="https://spreadsheets5.google.com/a/google.com/viewform?hl=en&amp;amp;formkey=dGpqMFpOaEpjckhHaTNyMnctSlZsM0E6MQ"&gt;форму&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Подробнее о возможностях API можно посмотреть на видео &lt;a href="http://www.youtube.com/watch?v=dbkwv1wjs3A"&gt;Google I/O 2010 &amp;ndash; BigQuery and Prediction APIs.&lt;/a&gt;&lt;/p&gt;

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/HwWzHjwngyc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/API-Google-Storage-Prediction-Api-BigQuery</feedburner:origLink></entry>
 
 <entry>
   <title>Киевская встреча 19 декабря, последний шанс зарегистрироваться</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/-SRkNPJ2jVM/19-1" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/19-1</id>
   <content type="html">&lt;p&gt;Если вы все же хотите попасть на событие завтра, то сейчас последняя возможность зарегистрироваться.&lt;/p&gt;

&lt;p&gt;В данный момент форму заполнило уже около 140 человек.&lt;/p&gt;

&lt;p&gt;http://bit.ly/Kyiv-GTUG-Register&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/-SRkNPJ2jVM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/19-1</feedburner:origLink></entry>
 
 <entry>
   <title>Киевская встреча в субботу 19 декабря</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/v3wbUFqeggA/19" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/19</id>
   <content type="html">&lt;p&gt;Копирую текст анонса:&lt;/p&gt;

&lt;p&gt;19 декабря 2009 года в 13:00 в кафе «&lt;a href="http://hudgraf.com.ua/"&gt;Худграф&lt;/a&gt;» по адресу бульвар Тараса Шевченко, 33 состоится первая встреча киевской группы пользователей технологий Google (Kyiv GTUG). С презентациями выступят два разработчика:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Крис Шабо: «Открытый и социальный интернет»&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;На этом выступлении будет рассказаны последние и самые важные тенденции Social Web, а также подробно рассмотрены возможные сценарии развития как с технической, так и с концептуальной точек зрения. На
тему концепции социальной идентичности, связей и социальных объектов, на этой сессии мы рассмотрим такие новые технологии как OpenID, OAuth, OpenSocial, ActivityStrea.ms и др.&lt;/p&gt;

&lt;p&gt;Крис Шабо занимается в Google работой с разработчиками. Его увлечения - Open Source, OpenSocial и выполнение невозможных задач. В последнее время он является вдохновителем проекта PHP Shindig - образцовым примером внедрения сервера OpenSocial, - и Partuza, популярным примером социальной сети Open Source, показывающим, как использовать OpenID, OAuth и OpenSocial, а также библиотеки PHP-клиента для OpenSocial.&lt;/p&gt;

&lt;p&gt;Персональный сайт: http://www.chabotc.com/&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Михаил Кашкин: «Причины квот App Engine и способы их обхода»&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Google App Engine не является классическим хостингом, это проект который дает свободы и накладывает ограничения. Инженерам пришлось отказаться от некоторых возможностей не по собственной прихоти, а
из-за ограничений модели. Понимание логики, которой руководствовались создатели проекта, поможет понять образ мышления, который они рассчитывали видеть у программистов, использующих продукт. Михаил рассмотрит эту тему с точки зрения максимального использования возможностей платформы.&lt;/p&gt;

&lt;p&gt;Михаил Кашкин занимается разработкой на Python c 2001 года. Он основал компанию «Ключевые решения», которая кроме коммерческой разработки на Python, Zope, Plone, Postgres, занималась популяризацией этих технологий. За свой труд по поддержке разработчиков Михаил получил 3-е
место на конкурсе среди open source программистов на сайте opennet.ru и стал членом Plone Foundation и Zope Foundation. В данный момент он увлекается разрабокой на Google App Engine и ведет блог посвященный этой теме http://app-engine.tumblr.com/.&lt;/p&gt;

&lt;p&gt;Пожалуйста, заполните анкету для участия и получиния бесплатного напитка:
http://bit.ly/Kyiv-GTUG-Register&lt;/p&gt;

&lt;p&gt;До встречи в субботу!&lt;/p&gt;

&lt;p&gt;P.S. Большая просьба перепостить анонс на Хабре если есть карма.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/v3wbUFqeggA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/19</feedburner:origLink></entry>
 
 <entry>
   <title>Релиз 1.3.3</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/G-R6ZmAkNN8/1-3-3" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/1-3-3</id>
   <content type="html">&lt;p&gt;В принципе все что нового вышло в новой версии можно описать следующей строкой:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ dev_appsever.py --use_sqlite --datastore_path=/tmp/datastore.sqlite path/to/your/app&lt;/code&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/G-R6ZmAkNN8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/1-3-3</feedburner:origLink></entry>
 
 <entry>
   <title>Релиз 1.3.0 и Blobstore</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/--vwvues4uE/1-3-0-Blobstore" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/1-3-0-Blobstore</id>
   <content type="html">&lt;p&gt;Этот &lt;a href="http://googleappengine.blogspot.com/2009/12/app-engine-sdk-130-released-including.html"&gt;релиз 1.3.0&lt;/a&gt; не является "очередным", поскольку он несет знаковые и масштабные нововведения. Добавлена экспериментальная функциональность для загрузки файлов большого размера (пока до 50 Мб).&lt;/p&gt;

&lt;p&gt;Обращаю внимание, что это не увеличение общей квоты приложения, но позволит хранить большие бинарные файлы. Напомню что до этого была только возможность сохранять объекты размером до 1 Мб поскольку таковы были ограничения Datastore.&lt;/p&gt;

&lt;p&gt;Как и предполагалось функциональность похожа на работу с Amazon S3. Через API запрос получается специальный URL для загрузки данных через форму и так же получается временный адрес для скачивания. Пока не понятно можно ли программно скачивать объекты большого размера из других источников, но еще одно ограничение снято.&lt;/p&gt;

&lt;p&gt;Подробнее о Blobstore для &lt;a href="http://googleappengine.blogspot.com/2009/12/app-engine-sdk-130-released-including.html"&gt;Python&lt;/a&gt; и &lt;a href="http://code.google.com/appengine/docs/java/blobstore/"&gt;Java&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Для Java программистов будет ценным узнать, что скорость загрузки их сайтов драматически увеличена для некоторых случаев когда используются динамические языки запускаемые в JVM.&lt;/p&gt;

&lt;p&gt;В этот раз &lt;a href="http://googleappengine.blogspot.com/2009/12/app-engine-sdk-130-released-including.html"&gt;анонс&lt;/a&gt; произошел без предварительной тестовой версии.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/--vwvues4uE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/1-3-0-Blobstore</feedburner:origLink></entry>
 
 <entry>
   <title>Изменения в системе релизов: пререлиз 1.2.8 SDK</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/N_HxbTBIi1Y/1-2-8-SDK" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/1-2-8-SDK</id>
   <content type="html">&lt;p&gt;Команда App Engine вносит изменения в порядок публикации новых релизов SDK. Теперь появилось понятие пререлизов. Об этом сообщает &lt;a href="http://groups.google.com/group/google-appengine-python/browse_thread/thread/6f251a0efacc1f62"&gt;пост в рассылке разработчиков&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Нововведения направлены на улучшение стабильности выпусков платформы. Теперь на &lt;a href="http://code.google.com/p/googleappengine/downloads/list"&gt;странице загрузки&lt;/a&gt; появились файлы с суффиксом &lt;code&gt;_prerelease&lt;/code&gt; и их можно протестировать до того как они станут официальными и возможно найти какие-то ошибки.&lt;/p&gt;

&lt;p&gt;Мне кажется скорость выпуска новых релизов в будущем должна будет нормализоваться, понимаю что SDK разработчика всего-навсего вершина айсберга и возможно это небольшой рефлексивный кусочек той работы которая кипит внутри. Но вдруг в какой-то момент мы будем видеть четные и нечетные ветки как это принято у многих Linux проектов.&lt;/p&gt;

&lt;p&gt;Немного преждевременно перечислять изменения, возможно список дополнится, но что-то уже можно сказать сейчас:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Новые методы пакетной обработки методов incr и decr для memcache, а так же новый метод offset_multi. Мне сложно сказать это они догоняют официальный API или уже добавляют что-то новое, не читал. Но факт, что функциональность memcache пока не полностью отвечает всем тем задачам которые может решать&lt;/li&gt;
&lt;li&gt;Долгожданное добавление final_url в Response объекта  Urlfetch, который содержит финальный URL после всех редиректов с кодом 302 [&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=1464"&gt;#1464&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Для тех кто уже столкнулся с выходом за пределы квот будет приятно узнать что страницы возвращаются с ошибкой 5xx, что благотворно сказывается на профиле сайта с точки зрения поисковых систем.&lt;/li&gt;
&lt;li&gt;Мой последний &lt;a href="http://app-engine.tumblr.com/post/255133229/faq"&gt;пост в рубрике FAQ&lt;/a&gt; частично потерял свою актуальность в связи с добавлением переменной окружения SERVER_SOFTWARE&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Остальные изменения мне показались менее актуальными, но вы можете ознакомиться с ними в посте или после официального выхода GAE SDK 1.2.8.&lt;/p&gt;

&lt;p&gt;P.S. Если внимательно прочитаете пост, то обратите внимание, что release notes были написаны &lt;code&gt;October 28, 2009&lt;/code&gt;. Или это какая-то ошибка или разработчики действительно дают нам пощупать новые версии через месяц после того как их релизят у себя внутри :)&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/N_HxbTBIi1Y" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/1-2-8-SDK</feedburner:origLink></entry>
 
 <entry>
   <title>Релиз 1.2.8 </title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/5LZ6Y_Kfkis/1-2-8" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/1-2-8</id>
   <content type="html">&lt;p&gt;После &lt;a href="http://www.vurt.ru/2011/03/1-2-8-SDK"&gt;тестового периода&lt;/a&gt; вышел релиз версии 1.2.8.&lt;/p&gt;

&lt;p&gt;Несколько дней в блоге будет пауза, перевожу на новый движок и новый домен.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://googleappengine.blogspot.com/2009/12/app-engine-sdk-128-released-including.html"&gt;Релиз&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/5LZ6Y_Kfkis" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/1-2-8</feedburner:origLink></entry>
 
 <entry>
   <title>Коллективные переводы</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/tOX6EGnMeCI/-7" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/-7</id>
   <content type="html">&lt;p&gt;Мы разрабатываем проект у которого будет много языков. Технически у нас следующая основа: используем для части клиентских интерфейсов GWT в котором используются .properties файлы (свой диалект), в дополнение часть шаблонов генерируется на стороне сервера где GetText (.pot/.po файлы). Нас более-менее устраивает такая конфигурация, точнее это то в какой точке мы сейчас находимся. Мы хотим чтобы пользователи не были ограничены только теми языками переводы на которые мы можем сделать внутри команды. В дополнение к этому совсем не хочется создавать с нуля вселенную и кажется что уж что, а систем для коллективного перевода было изобретено в изобилии.&lt;/p&gt;




&lt;p&gt;Вот те требования которые у нас сформировались:&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Поддержка .po/.properties файлов (с учетом диалекта GWT)&lt;/li&gt;
&lt;li&gt;Возможность свободной регистрации других людей&lt;/li&gt;
&lt;li&gt;Наличие API для пакетной загрузки/обновления&lt;/li&gt;
&lt;li&gt;Поддержка версий (можно было бы решать созданием новых версий проекта)&lt;/li&gt;
&lt;li&gt;Приемлемый пользовательский интерфейс (Google Translate очень помогает)&lt;/li&gt;
&lt;li&gt;Какая-то вменяемая цена &lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Худший вариант который мы сейчас представляем себе — это генерировать .properties файлы из .po, но в целом этот сценарий кажется не таким уж страшным. &lt;/p&gt;




&lt;p&gt;Отдавать студиям перевода plain-text (.po) мы категорически против, они не представляют контекст и им не интересны нужды пользователей. Мы лучше будем поощрять пользователей сайта, но нам нужен инструмент для совместной работы.&lt;/p&gt;




&lt;p&gt;Мы уже посмотрели некоторые:&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;launchpad.net, работает только с .po файлами и все очень страшно для среднего пользователя (Маши из Бразилии которая хочет перевести на португальский несколько интерфейсов)&lt;/li&gt;
&lt;li&gt;crowdin.net, плохой менеджмент прав (приходится назначать отдельно каждого человека для каждого языка, что в общем и заставило искать дальше), нельзя работать с версиями проекта, один проект = 1 тип файов, классный интерфейс переводчика.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Смотрели и другие, но все еще не остановились на чем-то. &lt;/p&gt;




&lt;p&gt;В общем хочется узнать мнение по этому вопросу и узнать о вашем опыте.&lt;/p

&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/tOX6EGnMeCI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/-7</feedburner:origLink></entry>
 
 <entry>
   <title>Слайдкаст Андрея Таранцова</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/hTY9p5mHTSI/-6" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/-6</id>
   <content type="html">&lt;p&gt;Слайдкаст &lt;a href="http://blog.tarantsov.com/"&gt;Андрея Таранцова&lt;/a&gt; для &lt;a href="http://rupy.ru/member/7/#paper-30"&gt;RuPy конференции&lt;/a&gt; проходившей в Омске.&lt;/p&gt;

&lt;p&gt;Хороший вводный доклад на русском языке, в некоторых местах уже немного устарел, но это детали.&lt;/p&gt;

&lt;p&gt;&lt;embed src="http://blip.tv/play/AYGH9XMC" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/hTY9p5mHTSI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/-6</feedburner:origLink></entry>
 
 <entry>
   <title>Слайды доклада</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/Ojq9DqJwluo/-5" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/-5</id>
   <content type="html">&lt;object style="width:600px;height:347px" &gt;&lt;param name="movie" value="http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf?mode=embed&amp;amp;viewMode=presentation&amp;amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Flight%2Flayout.xml&amp;amp;showFlipBtn=true&amp;amp;documentId=100130083852-fc3fd6de35c74b9a9ff8266796a9e136&amp;amp;docName=pycamp-kiyv-mkashkin-2010&amp;amp;username=pyth&amp;amp;loadingInfoText=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D1%81%20%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0%D0%BC%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%20Google%20App%20Engine%20%D0%B8%20%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%20%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8%20%D0%B1%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;amp;et=1264841583881&amp;amp;er=31" /&gt;&lt;param name="allowfullscreen" value="true"/&gt;&lt;param name="menu" value="false"/&gt;&lt;embed src="http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf" type="application/x-shockwave-flash" allowfullscreen="true" menu="false" style="width:600px;height:347px" flashvars="mode=embed&amp;amp;viewMode=presentation&amp;amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Flight%2Flayout.xml&amp;amp;showFlipBtn=true&amp;amp;documentId=100130083852-fc3fd6de35c74b9a9ff8266796a9e136&amp;amp;docName=pycamp-kiyv-mkashkin-2010&amp;amp;username=pyth&amp;amp;loadingInfoText=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D1%81%20%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0%D0%BC%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%20Google%20App%20Engine%20%D0%B8%20%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%20%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8%20%D0%B1%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;amp;et=1264841583881&amp;amp;er=31" /&gt;&lt;/object&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/Ojq9DqJwluo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/-5</feedburner:origLink></entry>
 
 <entry>
   <title>Статус облаков на одной странице</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/flF8A1ED5bg/-4" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/-4</id>
   <content type="html">&lt;p&gt;Сервис &lt;a href="http://www.cloudstatus.com/"&gt;CloudStatus&lt;/a&gt; занимается небольшим и понятным делом — отслеживает статус производительности двух публичных облачных сервиса Amazon и Google App Engine. Результаты замеров отображаются на графиках и показывают изменения скорости работы нескольких стандартных операций по работе с хранилищами данных, внутренними сервисами и внешними службами.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/flF8A1ED5bg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/-4</feedburner:origLink></entry>
 
 <entry>
   <title>Кто использует какие инструменты?</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/9BridPQan6A/-3" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/-3</id>
   <content type="html">&lt;p&gt;Всем интересно, что происходит вокруг тебя на рынке. Какие инструменты используют для разработки и какие новости по этой тематике используют.&lt;/p&gt;

&lt;p&gt;Это позволяет ощутить свое место и увидеть общий ландшафт.&lt;/p&gt;

&lt;p&gt;Предлагаю принять участие в небольшом исследовании. Заполнив анкету о себе (никаких персональных данных не требуется), вы поможете мне подготовить отчет о том, что вообще происходит в мире разработки Google App Engine.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://bit.ly/gae-market"&gt;&lt;h3&gt;Форма опроса&lt;/h3&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Результаты опубликую через пару месяцев как накопится статистика.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/9BridPQan6A" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/-3</feedburner:origLink></entry>
 
 <entry>
   <title>Опыт работы сайта под нагрузкой</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/MX2DB22QOrg/-2" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/-2</id>
   <content type="html">&lt;p&gt;Статья с анализом посещения на сайт ссылка на который появилась в ленте новостей Хабрахабра. Сайт был создан с целью анализа нагрузки и за день получил около 15 тысяч загрузок с пиком 3-4 запроса в секунду. К сожалению, сайт без графического оформления, но как экспериментальная модель подходит для анализа.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://habrahabr.ru/blogs/gae/78445/"&gt;Прочитать статью&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/MX2DB22QOrg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/-2</feedburner:origLink></entry>
 
 <entry>
   <title>Сайт политехнического ВУЗа Австралии</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/PwGyQDikdzI/-1" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/03/-1</id>
   <content type="html">&lt;p&gt;Проект примечателен тем, что работает на Zope3 (!!!)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upd.&lt;/strong&gt;: на самом деле сайт работает на repoze.bfg, который теперь стал Pyramid&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.polytechnic.wa.edu.au/"&gt;Сайт&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/PwGyQDikdzI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/-1</feedburner:origLink></entry>
 
 <entry>
   <title>Обратная связь</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/v-g8h70kVk4/" />
   <updated>2011-03-15T00:00:00-07:00</updated>
   <id>hhttp://www.vurt.ru/2011/</id>
   <content type="html">&lt;p&gt;Все же у блога появились комментарии. Не потому, что кто-то просил, а потому, что мне нужен ваш feedback. На странице каждого поста добавлен блок сервиса DISQUS.com в котором можно свободно делиться мыслями.&lt;/p&gt;

&lt;p&gt;Хотелось бы получить от вас информацию о следующих вещах:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Какие записи вы бы хотели видеть чаще. Пока практически не было публикаций с кодом или advanced вопросов, но они планируются. Хотели бы видеть код?&lt;/li&gt;
&lt;li&gt;Ваши проекты которые делаете или сделали. Или интересные, но не ваши проекты ссылкой на которые готовы поделиться.&lt;/li&gt;
&lt;li&gt;Интересные блоги или сайты документации о Google App Engine и техниках разработки.&lt;/li&gt;
&lt;li&gt;Частично готов давать ответы на проблемы с которыми вы возможно сталкивались. Сразу предупрежу, что приоритетные те которые будут полезны многим читателям.&lt;/li&gt;
&lt;li&gt;Более широкий список облачных технологий, например была ли бы интересна вводная информация в Erlang или CouchDB. Технологии high-load.&lt;/li&gt;
&lt;li&gt;Если вы опубликовали у себя в блоге интересный содержательный пост, то пришлите анонс.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Для вашей информации на сайте есть &lt;a href="http://www.vurt.ru/services"&gt;специальная страница&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/v-g8h70kVk4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2011/03/</feedburner:origLink></entry>
 
 <entry>
   <title>Torrent tracker</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/b0nBdL46Zd4/torrent-tracker" />
   <updated>2009-12-05T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2009/12/torrent-tracker</id>
   <content type="html">&lt;p&gt;Нашелся torrent tracker с открытым исходным кодом созданный специально для того чтобы запускаться на Google App Engine.   Если посмотреть в исходный код, то очень интенсивно используется memcache. Что очень сильно сокращает нагрузку и увеличивает полезность проекта.  Лицензия public domain.&lt;/p&gt; 
&lt;p&gt;&lt;a href="http://repo.cat-v.org/atrack/"&gt;Atrack&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/b0nBdL46Zd4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2009/12/torrent-tracker</feedburner:origLink></entry>
 
 <entry>
   <title>Русскоязычный список рассылки</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/4D_HFStcYSk/maillist" />
   <updated>2009-12-05T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2009/12/maillist</id>
   <content type="html">&lt;p&gt;Вы наверное обратили внимание, что настоящие программисты никогда не пользуются форумами? Форумы для домохозяек, клерков и троллей. Путь программиста другой. Участие в списке рассылки — вот истинная доблесть. По ссылке архив и возможность подписаться&lt;/p&gt;
&lt;p&gt;&lt;a href="http://groups.google.com/group/google-appengine-ru/"&gt;Рассылка Google Appengine Ru&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/4D_HFStcYSk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2009/12/maillist</feedburner:origLink></entry>
 
 <entry>
   <title>Hot handler</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/8LLbR4PW1_Q/hot-handler" />
   <updated>2009-12-05T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2009/12/hot-handler</id>
   <content type="html">&lt;p&gt;У некоторых пользователей GAE наблюдается проеблма связанная с тем что сайт при редких обращениях "засыпает", это заставляет сайт тормозить при обращении. Небольшой рецепт который позволяет решить эту проблему.&lt;/p&gt; 
&lt;p&gt;&lt;a href="http://appengine-cookbook.appspot.com/recipe/hot-handler"&gt;Hot handler&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/8LLbR4PW1_Q" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2009/12/hot-handler</feedburner:origLink></entry>
 
 <entry>
   <title>Google Wave</title>
   <link href="http://feedproxy.google.com/~r/app-engine/~3/UAhH92lgfnQ/google-wave" />
   <updated>2009-12-05T00:00:00-08:00</updated>
   <id>hhttp://www.vurt.ru/2009/12/google-wave</id>
   <content type="html">&lt;p&gt;Скринкаст с демонстрацией работы в Google Wave.&lt;/p&gt; 

&lt;div style="width:500px; padding:2px; border:solid 1px #eee; margin:25px auto 25px auto;"&gt;
&lt;object type="application/x-shockwave-flash" width="500" height="375" data="http://vimeo.com/moogaloop.swf?clip_id=7091584&amp;amp;server=vimeo.com&amp;amp;fullscreen=1&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00ADEF"&gt;&lt;param name="quality" value="best" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="scale" value="showAll" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7091584&amp;amp;server=vimeo.com&amp;amp;fullscreen=1&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00ADEF" /&gt;&lt;embed src="http://www.vimeo.com/moogaloop.swf?clip_id=7091584&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/app-engine/~4/UAhH92lgfnQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.vurt.ru/2009/12/google-wave</feedburner:origLink></entry>
 
 
</feed>

