понедельник, 25 декабря 2006 г.

10 ловушек в Python (10 Python pitfalls)

В продолжение статьи о "бородавках" предлагаю вам перевод другой хорошей статьи на эту тему — 10 Python pitfalls автора Hans Nowak. Существует еще немало подобных статей, но эти две я бы выделил благодаря их ясности и важности адресуемых проблем.

Итак, последняя статья про ловушки, и с наступающим Новым Годом!

пятница, 8 декабря 2006 г.

Публичная бета Firebug 1.0

Вышла публичная бета Firebug 1.0. Что могу сказать. Автор Joe Hewitt жжот. Слов нет. Кто еще не знает, что такое Firebug, и при этом программирует что-то на client-side JavaScript, то очень советую посмотреть. Предыдущая версия уже произвела революцию. Новая просто взрывает мозг.

Дополнительная авторизация для Django. One-time code.

Термин one-time code (одноразовый код) известен из криптографии. Это — некий код произвольного содержания, который запускает процесс, который ожидает появления этого кода. После разглашения кода и запуска процесса, код становится бесполезен, и больше не действует. Вы наверняка слышали о таких фразах как "В Сантьяго идет дождь", "Над всей Испанией безоблачное небо", "Начинайте восхождение на гору Ниитака", которые, по сути не содержащие никаких важных сведений, оказали существенное влияние на историю XX века. Это — одноразовые коды.

Чем могут быть полезны одноразовые коды для веб-программирования? Применений может быть много. Первое, что приходит в голову — это возможность авторизовать посетителя, предоставившего одноразовый код, не требуя от него обычных логина и пароля. Например, по заходу по ссылке, которую мы посылаем ему по email, которая ведет на часть сайта, требующую авторизации, и содержащую одноразовый код. Возможны и другие сценарии, например, запуск специального механизма, устанавливающего скидку клиенту в интернет-магазине, или перенаправление клиента на некую "секретную" страницу, на которую нельзя попасть по ссылке.

среда, 29 ноября 2006 г.

“Бородавки” в Python (Python Warts)

Эта статья - перевод известной статьи Andrew KuchlingPython Warts.
Слово "wart" дословно переводится с английского как "бородавка", и именно в этом контексте используется в английском программистском сленге. Словарь Lingvo также содержит аналогичный перевод этого слова в том же контексте, уже для русского программистского сленга. В своей практике я такого термина в русском языке не встречал, но поверю словарю и не стану изобретать более "приятного" перевода :)

Python Warts — это то, что обязательно к прочтению начинающими программистами на Python, но также не будет вредно и для опытных зубров.

вторник, 28 ноября 2006 г.

Важное дополнение к статье о трансляции кодировок — HTML character entities.

В предыдущей статье я показал, как можно написать middleware для Django, которая транслирует данные запроса из "внешней" кодировки во "внутреннюю" и обратно. Обсуждение статьи в LiveJournal вскрыло серьезный недостаток первого подхода к решению данной проблемы.

вторник, 21 ноября 2006 г.

Трансляция charset в объектах request и response в Django

В одном из Django-приложений, которое я разрабатываю, возникла ситуация, когда очень хочется, чтобы сайт общался с клиентами в кодировке UTF-8.

При этом стандартной кодировкой системы (шаблоны, данные в базе данных), в которой работает это приложение, является Windows-1251. Конвертировать данные в базе и т.п. - not an option, т.к. с этими данными работает еще куча уже написанного софта, который так привык. Соответственно, во избежание глюков с кодировкой, желательно, чтобы DEFAULT_CHARSET был Windows-1251, и все внутренние операции со строками и базой были в этой кодировке.

Что делаем? Пишем middleware.

пятница, 17 ноября 2006 г.

ScientificPython, распределенные вычисления

Разработчики ScientificPython включили в новую версию модуль для распределенных вычислений (анонс). Для организации вычислений запускаются master и slave-процессы, мастер раздает задания, slave их выполняют, и master собирает результаты. В принципе, должно быть не очень сложно организовать цепочки, в которых master-процессы могут быть slave для других master-процесов. Для коммуникации используется Pyro, что позволит распределить процессы по неограниченному количеству машин. Само собой, задачи могут быть и не только "научные", а сугубо практические. К примеру, распределенные поисковые алгоритмы.

вторник, 7 ноября 2006 г.

Декораторы функций и методов в Python

Начиная с версии 2.4 в Python введена новая синтаксическая конструкция — декоратор функции/метода. С ее помощью можно "декорировать" функции — дополнять их новой функциональностью без внесения изменений в сами функции и методы. Слово "декоратор" часто используется в связи с паттеном Декоратор, описанным в знаменитой книге "Банды четырех". Это не совсем тот случай, имейте в виду, хотя некоторое сходство имеется. В этой статье я опишу механизм декораторов и рассмотрю примеры его применения.

четверг, 2 ноября 2006 г.

Дескрипторы в Python

Попробую дать определение, что такое классы-дескрипторы. Классы-дескрипторы — это классы "нового стиля" (new-style classes), которые определяют один или несколько специальных методов, перечисленных ниже. Эти методы переопределяют процедуру доступа к атрибуту класса через класс или экземпляр класса (класс тоже нового стиля) в том случае, если в качестве этого атрибута выступает экземпляр класса-дескриптора. Кто понял это с первого раза, тому пирожок.

понедельник, 9 октября 2006 г.

Межпроцессная диспетчеризация событий в web-приложениях Python, часть 2

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

среда, 27 сентября 2006 г.

Межпроцессная диспетчеризация событий в web-приложениях Python, часть 1

В своей статье о диспетчеризации событий в Python я описал использование пакета PyDispatcher, который используется в качетстве диспетчера событий в среде Django. Это — хороший способ, позволяющий различным частям приложения, которые могут быть не связаны друг с другом непосредственно, успешно взаимодействовать и реагировать на изменения. Такая схема прекрасно работает в том случае, если все приложение функционирует в рамках одного процесса в системе.

понедельник, 25 сентября 2006 г.

Диспетчеризация событий в Python

Если вы смотрели исходный код Django, вы могли заметить такие строки:

[python]
from django.dispatch import dispatcher
......
# ниже
dispatcher.send(signal=signals.pre_init, sender=self.__class__, args=args, kwargs=kwargs)
[/python]

Что они делают? Это - вызовы функций библиотеки PyDispatcher, которая с некоторых пор поставляется вместе с Django и используется для диспетчеризации событий в процессе исполнения программы на языке Python.

среда, 20 сентября 2006 г.

О Python, code style


Python требует быть дисциплинированным с отступами для блоков кода.
Про то, что это хорошо сказывается на читабельности, мы знаем. Но у этого требования есть еще и обратная сторона. Если много вложенных блоков, то это частенько требует много отступов, и из-за этого ясность кода на python страдает - читать лесенками не очень привычно, и код перестает выглядеть по-питоновски (часто просто ширины экрана не хватает).
Т.о. python просто заставляет выделять циклы и прочие куски кода определенного назначения в отдельные классы и функции. После этих процедур код становится настолько простым и понятным, что жопа, по привычке чуствующая подвох, иногда подкидывает подозрения, что получившийся код просто не может работать — слишком уж он прост и напоминает псевдокод.
Обычно, делая что-либо на python, я занимаюсь таким рефакторингом on-line машинально, и как бы по собственной воле. Недавно я осознал, что язык меня к этому просто принуждает.
И правильно делает.

понедельник, 11 сентября 2006 г.

Строители парусников


Пару дней назад терпел шоппинг, скучал. Хорошо, когда попадаются рядом магазины ненужных вещей - "мужские" магазины с рядами красивых, совершенно безобидных моделей оружия, магазинчики с глобусами, картинками и заморскими поделками, магазины с цветами в горшках ...
В одном таком стояла модель парусника. Двухмачтового. Любоваться можно очень долго. Даже не потому, что парусник просто красив. Восприятие приходит как бы слоями. Сначала смотришь на силуэт. Обычно на этом и останавливаешься, но только если нет времени заглянуть на следующий слой. Сотни мелких деталей, мачты, бушприт, все на своем месте, ничего лишнего, у каждой детали свое понятное назначение.
У меня было еще несколько минут, и я увидел то, на что раньше не обращал внимания. Веревки. Да он весь просто обмотан веревками! На небольшой модели их сотни метров наверное. Понимаешь, что вся конструкция, абсолютно вся, ну разве что за исключением корпуса, который без всего остального просто никуда не поплывет, просто не в состоянии не то что выдерживать хотя бы малейший ветерок, но даже быть устойчивой без сотен канатов, веревок и бечевки, сотен блоков и десятков лебедок, хитро развешанных и натянутых по всему судну.

После этого пришла аналогия с программированием. Корпус судна, мачты и бушприт - это архитектура. Веревки, блоки и лебедки - это реализация. Все те переменные, циклы и условные переходы, на которые и ложится вся нагрузка, без которой ничего не поплывет.
Мы строим парусники, господа.

понедельник, 21 августа 2006 г.

Начнем!

Сайт создан в-основном для того, чтобы отражать мнение автора о разных, в-основном технических, аспектах функционирования, разработки и администрирования веб-серверов.

Что получится на самом деле, увидим.

Постоянные читатели