суббота, 7 февраля 2009 г.

outofbox vs сделайсам

В последнее время развлекался двумя питоньими конструкторами. Django и Trac. Не уверен нас счет удачности заголовка, т. к. оба в какой-то степени подходят и в первую и во вторую категорию. Вот Trac - после некоторых усилий у вас появится отличный багтрекер с викой и интеграцией с репозиторием (вплоть до контроля доступа), можно прикрутить оценки и диаграмы ганта и еще кучу всяких интересных мелочей, сотворив вполне недурственный портал для своего проекта используя только трак (а не бугзилла + йумла/друпал + *бб и т.п.). У него хоть и бедно документированная, зато очень удобная система плагинов, которая позволяет довольно запросто переопределять и дополнять ключевые процессы системы. Плагины в тоже время остаются довольно самодостаточными, т. е. для установки нового плагина вам скорее всего не придется переписывать и патчить половину проекта и самого трака чтобы заставить это все работать. Но плагины очень редко работают сразу: во-первых, часть из них еще не переехала на 0.11, тогда как некоторые отваждые уже ставят 0.12dev, во-вторых. некоторые начинают работать только после определенных заклинаний (в виде определения переменных окружения для какойнить внешней программы, это не проблема, но они определяются не из админки трака и даже не в trac.ini, а в настройках сервера например). Вобщем, если требуется шаг влево, то придется с ним немного повозиться, и низкоуровневость трака тут как раз на руку, правда вместо класса User вы будете полагаться простую строчку имени пользователя, а вместо Объектной модели данных использовать SQL запросы. Откуда я столько узнал:) ? я делал поддержку нескольких проектов в одном окружении. Много проектовость - довольно серьезная беда трака. В приемлемом виде ее просто нет. Это можно пережить, если вы планируете 2-3 опенсорсных проекта, если вам нужно что-то вроде мантиса, то придется знакомиться с траком совсем близко, как я. С помощью custom fields и дописывания своей логики у меня в какой-то степени это получилось, т.е. есть разграничение по поектам в базовых сущностях и контроле доступа в рамках одной среды (Trac Env). Если будет время, силы и не будет разных противлений может и доведу до товарного вида и выложу куда-нибудь.

Параллельно с пилением трака я первоначально очень в нем отчаявшись (местами наверное и напрасно) начал делать таксменеджер на Django поглядывая в какой-то уже существующий. Тут есть для нас и пользователи, (правда забекендить это добро на passwd файл или в ldap как это можно в траке, наверное было бы намного сложнее) и приятненький ORM. Но модульность очень особенная, т.е. ее хватит, чтобы состряпать такой же монолит, но как, не отстрелив ноги, расширить один модуль другим, причем так, чтобы работало и без него (например, я хочу настраиваемый events в который модули-плагины могут контрибутить как события так и обработчики) ?

Надеюсь у этой истории будет successful upd, когда я со всем этим наиграюсь. Пока это все очередной подтверждение тому, что а) серебряных пуль нет б) нет вобщем даже приличных свинцовых или медных, т.е. идеального багтрекера нет также как нет и идеальной среды разработки/редактора, фреймворка, языка программирования.