Выбор веб-фреймворка не в .NET стеке для нового проекта достаточно нетривиальная задача. Их много - больших, маленьких, хороших и не очень, горячих и зелёных. Так как при работе с Python больше сталкивался с Django, то для себя, т.е. очень IMHO, сделал несколько правил.

Использовать Django нужно когда: 

  • нужно получить опыт с Django;
  • нужно сделать быстро сайт с админской частью (блог, CMS и т.д.);
  • есть хорошее готовое приложение/модуль для Django и его нужно сомсем немного доточить напильником;
  • нет необходимости заморачиватья с DAL (data access layer) и стандартного ORM вполне достаточно;
  • какие-то из модулей Django уж ооочень хорошо подходят для текущей задачи;
  • нужно сделать что-то очень быстро и нет опыта с другими фреймворками.
Итого получилось 6 пунктов. Если не выполняются хотя бы 3, то нужно задуматься о целесобразности использования Django. IMHO.

Как сказал один из авторов Django в своей книге: "Django - это всего-лишь приложение на Python".

 


То, о чём писал в твиттере, но не мог написать в блоге раньше. 

Была небольшая и, на первый взгляд, достаточно простая задача - показать на странице таблицу, с возможностью сортировки и автообновления. Ну ещё и поиск по ней. После некоторого времени, потраченного на поиск и попытки исправления существующих решений стало понятно, что написать с нуля будет быстрее и дешевле (тут имеется в виду также дальнейшая поддержка всего этого). Готовые реализации javasctipt-библиотек и плагинов к jQuery были или слишком уж навороченный для данной задачи или, мягко говоря, очень плохо справлялись с обновлением таблицы и последующей сортировкой. Результатом этого всего стало написание плагина для jQuery c нуля.

Коротко о плагине:

 

  • позволяет автоматически обновлять и сортировать таблицы;
  • построен на базе jQuery Template (в будущем планируется версия без этого);
  • сортировка работает исходя из данных что пришли от сервера в JSON, и не зависит от html-разметки;
  • маленький размер и минимум функциональности.

Более подробно с примерами и какой-то документацией о плагине можно почитать на http://ajaxtable.e0ne.info/. Также страница в официальном репозитории пакетов http://plugins.jquery.com/project/jQueryAjaxTable и исходники на GitHub: https://github.com/e0ne/jQuery-AjaxTable.

Комментарии, пожелания и замечания очень приветствуются.

 


Давно не писал обзоры приложений и библиотек, но эта мне так понравилась, что не удержался.

Работа с потоками всегда была не самым лёгким занятием для программистов. А если брать особенность работы с потоками в Python ветки 2.x и 3.x (не считая версий 3.2 и 2.7), то кроме потоков нам на голову падали ещё проблемы в GIL (Global Interpreter Lock). Но прогресс не стоит на месте и многопоточность используется уже практически везде. Проблема с cuncerrency встречается всё чаще и решать её приходится так же часто. 

При необходимости реализации такой задачи мне под руку попалась библиотеке eventlet (http://eventlet.net/), которая уже использовалась у нас на проекте и мне очень понравилась. Основная задача этой библиотеки - дать возможность реализации высокомашстабируемых не блокирующих I/O задач (highly scalable nonblocking I/O).

Описывать подробно все достоинства и недостатки данной библиотеки не буду, т.к. таких пока было обнаружено не слишком уж много. Больше всего, что мне не понравилось - это, на мой взгляд, не очень хорошая документация (http://eventlet.net/doc/), но открытые исходники с подробными комментариями и кучей примеров эту проблему решили.

В рамках моей задачи, мне понадобилось сделать какое-то подобие COMET-сервера с помощью long polling - один из способов сделать push-уведомления (http://en.wikipedia.org/wiki/Push_technology) для веб-приложений. Основная особенность - клиент делает один за другим (ajax)запросы на сервер, а сервер, в свою очередь отвечает клиенту только тогда, когда у него появились необходимые данные.

Простой пример такого приложения на Django доступен на гитхабе: https://github.com/e0ne/BlogSamples/tree/master/djangolp


На последнем IT Talk в Харькове один из докладчиков поднял интересную тему. Он сказал что документация в проектах, которые разрабатываются по методологии Agile всё-таки нужна. Тема интересная и достойна отдельного неблоьшого холливара. Ведь все вокруг говорят, что один из достоинств Agile - это отсутствие документации на проекте. Но так ли это на самом деле? По моему мнению, врядли существует хоть один проект сложнее чем “hello world”, в котором полностью отсутствует документация.

Да, по сравнению с, например, каскадной моделью разработки, в Agile, можно сказать, документации нет. Но чаще всего, под этой фразой скрывается отсутствие спецификации и нежелание команды хоть что-то документировать. А веть документация по проекту может быть разная. Это может быть ТЗ, выполненное по какому-то стандарту ISO, какие-то технические особенности приложения (например, список поддерживаемых браузеров для сайта) или что-то ещё.

Давайте вспомним, сколько раз вы внутри проекта устраивали email переписку на счёт какой-то фичи, а потом, в случае чего, ссылались на один из email’ов? Особенно это актуально для географически распределённых команд.

Банально, но комментарии в коде - это тоже своеобразная документация. У кого-то она есть, у кого-то её нет. Иногда, лучше бы её не было :).

Часто, команда обменивается знаниями в какой-то внутренней wiki. Там описывается что это за проект в общем, как его устанавливать и запускать и так далее.  Часто встречается практика, что такой вики нету написанием нужные статей в неё занимается ново-пришедший в команду человек. Это тоже, в своём роде, документация к проекту.

Ну и не могу не сказать про всевозможные skype-, jabber и другие IM-чаты. Часто в их истории остаётся очень много важных для проекта “документов”.

Подводя итог вышесказанного - документация в Agile есть, просто она немного трансформировалась, стала менее формальной, местами приобрела многий либимый в agile fun - ведь прикольно же в рабочем чате среди обсуждения очередной фичи/бага прочитать/написать несколько свежих шуток и/или ссылок. Отсутствие документации и её необходимости - это самообман. Главное, выбрать правильных формат и тогда это уже будет не так напряжно, да и актуальность будет значительно выше.