Публикации о языке Python   страница 370

Мысли по мотивам PyCamp Kyiv

Первое впечатление

Сразу вспомнился анекдот:

— Чем отличается программист-интраверт от программиста-экстраверта?
— Во время разговора программист-интраверт смотрит на свои ботинки, а программист-экстраверт смотрит на ботинки собеседника.

Видел Капитана Очевидность

Длинный первый доклад «Почему Python - тормоз и как заставить его меньше тормозить» был о том, что добавление уровней абстракции снижает производительность, а отказ от деструктивного присваивания сильно упрощает жизнь компилятору, интерпретатору и разработчику.

Докладчик не читал "Coders at Work". Иначе воспользовался бы шуткой про "5 = 6".

О взаимоотношениях

Привлек внимание доклад Дмитрия Кожевина «"Программирование на нервах" - короткий разговор об управлении проектом».

Мой коллега (Юра Сафроненко) является тренером НЛП и (совершенно бесплатно) ставит над нами опыты и делится своими тайными знаниями.

В своем докладе Дмитрий Кожевин то




Google App Engine. Обработка запросов с ошибками в webapp фреймворке


Идея переработать блог летала вокруг уже давно, назрело так сказать. Разделив работу на этапы, для начала решил перенести все ресурсы на CDN. Но как всегда захотелось халявы :).

Вспомнил о своем аккаунте на Google App Engine, промелькнула мысль "Можно же построить свой CDN, практически без затрат денег и управлять им так, как душа пожелает". Реализации, которые есть на текущий момент меня немного не устроили и работа закипела.

В качестве ос



Python debug-progressbar

Поддержу тему прогресс-баров начатую на Хабре. Описанный там бар можно назвать "продакшн-баром". В свою очередь, поделюсь давно и удачно написанным "дебаг-баром". Основные его отличия в:

  • возможности вывода дополнительной дебаг-инфы
  • выводе времени обработки каждого шага
  • поддержке стандартного питоньего logging-а

Используется он так:

from random import randint
from debugbar import cnt

data = range(10)  # некоторые данные для обработки

cnt = Cnt(len(data), 2)  # указываем размер данных и шаг счётчика
for d in data:
    cnt.put('дополнительная инфа %s' % d)  # выводим бар
    time.sleep(randint(1, 3))

В результате получится что-то типа:

 2 / 10 |  1.00 s. | дополнительная инфа 1
 4 / 10 |  5.00 s. | дополнительная инфа 3
 6 / 10 |  4.00 s. | дополнительная инфа 5
 8 / 10 |  3.00 s. | дополнительная инфа 7
10 / 10 |  4.00 s. | дополнительная 



Разворачиваем проект при помощи virtualenv и pip

Наверное, нет смысла подробно останавливаться на том, что такое virtualenv или pip, про эти трендовые понятия питоньего мира написана уже не одна статья. Так что сегодня, я просто поделюсь способом разворачивания проекта основуясь на этих технологиях.

Итак, на самом деле все просто. Для начала надо создать новое виртуальное окружение, а затем установить туда все зависимости. Также было бы неплохо получить Makefile со всеми необходимыми целями, которые будут облегчать работу с проектом.

Конечно, все это можно делать и руками для каждого следующего проекта. Благо запоминать там немного:

$ virtualenv ENV

да:

$ pip install -E ENV -r REQUIREMENTS.pip

где REQUIREMENTS.pip - файл со всеми необходимыми зависимостями для проекта. Ну а потом прописать прямо в Makefile или в Makefile.def




Говорящий python

Разговорить змия по русски оказалось совсем несложно.

1. Ставим festival:

sudo aptitude install festival festvox-ru

2. Учим его болтать со включенной музыкой. Добавляем в конфиг ~/.festivalrc

;use ALSA
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")

3. Ну и, собственно, модуль pystival состоящий из единственной функции:

import subprocess

def pysti(text):
    p = subprocess.Popen(
        ['festival', "--tts", "--language", "russian"], 
        stdin=subprocess.PIPE, stdout=subprocess.PIPE,
        stderr=subprocess.PIPE, close_fds=True)
    stdout, stderr = p.communicate(text.encode('utf-8'))     


if __name__ == "__main__":
    # тестим
    pysti(u'Шар шипящий, шар говнящий за моим грустил окном. ' +
        u'Я открыл окно тихонько и пустил бедняжку в дом.')



django-couchdb не взлетел

django-couchdb это ДБ бекэнд для Джанги с поддержкой CouchDB, разработанный командой 42cc.

Начиная новый проект, я очень рассчитывал на это решение, но увы оно совсем не оправдало надежд. Основная цель была, используя CouchDB не отказываться от стандартной джанговской админки и попробовать её заставить работать при помощи это бекэнда. Любовь к админке обусловлена тем, что она уже написана и её не надо изобретать с квадратными колесами нам самим, то что наши контент-менеджеры уже отчасти привыкли к ней и не хочется сбивать им workflow.

Авторы django-couchdb не скрывают что эта их реализация больше академическая и какого-то реального юзкейса у них не было. Что и проявилось в итоге.

Сразу надо сказать, что на данный момент основная гитхабовская ветка не работает с текущей Джангой и свежим CouchDB. Это связано с тем, что в Джанге в последнее время серьезно переработали внутренний API бекэндов баз дынных, а новый




Спасибо русским программистам!

Предыдущая война с mod_wsgi закончилась в итоге тем, что Apache был "спрятан" за проксирующий nginx, что решило проблему с "залипающими" запросами. Заодно и статике теперь должна оптимальней отдаваться.
Думал было использовать ещё Nginx upload module, написал даже нужный код (т.к. данные в итоге приходят немного иначе). Однако, по запарке забыл код обновить, а в результате обнаружилось, что оно и без этого замечательно работает. Поэтому оставил пока тот вариант "на всякий пожарный". Хотя толком не помешало бы тесты сделать, чтоб понять, даст ли оно какую-либо разницу.
В любом случае nginx рулит, спасибо Игорю Сысоеву.




app-engine-patch

Старт и выявление различий



Требования



Пожалуйста загрузите и установите Python 2.5 и App Engine SDK.



Пользователи Windows и MacOS X могут только следовать за стандартной инсталляционной
процедурой. Пользователи Linux могут поместить SDK в "/usr/local/google_appengine".
Если это невозможно, Вы можете также поместить SDK в любую папку, которая
находится в переменной среды PATH
системы, если она будет вызываться как "google_appengine" (работает в
любой OS).



Если Вы хотите протестировать новый выпуск SDK, Вы можете
временно переместить его в "common/.google_appengine".



Если Вы используете интернационализацию (параметры
настройки: USE_I18N = True,
Вы также нуждаетесь в gettext (см. здесь, если Вы используете Windows).
Отметьте, что эта особенность активизирована в типовом проекте, так, если Вы
видите ошибки о msgfmt или gett




Статья про использование портов в Erlang и новая версия erlport

Написал новую статью про использование портов Erlang. Кроме этого выпустил версию 0.4 erlport - библиотеки для Python упрощающей взаимодействие между Erlang и Python с использованием портов Erlang.




Статья про использование портов в Erlang и новая версия erlport

Написал новую статью про использование портов Erlang. Кроме этого выпустил версию 0.4 erlport - библиотеки для Python упрощающей взаимодействие между Erlang и Python с использованием портов Erlang.