Mercurial 1.3

Это, конечно, не полноценная статья в блог, но тем не менее довольно клëвое событие — вышел Mercurial 1.3. Событие клëвое тем, что в него добавили поддержку сабрепозиториев — аналог externals из svn. ;) Пока она еще не отполирована, поддерживает только меркуриаловые репозитории, но тем не менее — это уже отлично. Само собой, остальных изменений тоже немало.

Вообще выход крупного/популярного проекта с твоими патчами — это всегда приятно. :)

P.S. BTW, если есть желающие — меркуриал можно переводить на русский. ;-)

3 comments »

Реиспользование приложений

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

Но есть один момент, который меня немного напрягает — вот не позаботились разработчики о достаточной расширяемости приложения аутентификации, и у нас сразу куча проблем: все завязываются на это приложение (ну удобно же, почему бы и не использовать?), а при необходимости получить что-то большее в своем проекте — приходится либо перерисовывать auth один в один и править везде импорты, либо какими-то хаками его расширять — изворачиваться. Хуже всего, когда понимание того, что auth ну точно не хватает приходит посреди процесса, когда уже куча функционала написана.

И вот если представить такого себе сферического пони в вакууме без проблем обратной совместимости — каким будет лучший путь решения проблемы?

Я пока вижу только два:

  • точечный — как-то внимательно спроектировать auth так, чтоб он был таки расширяемым; при этом, если возникает проблема с другим стандартным приложением, вся история начинается сначала;
  • применить магию по типу той, что была в Джанге сначала, когда можно было импортировать приложения как django.apps.appname — тоже вроде как не зря они от нее отказались же.

Есть какие-нибудь разумные мысли?

34 comments »

Byteflow 0.7

Я решил, что нет никакого смысла ждать с моря погоды и таки выпустил релиз Byteflow — 0.7. ;-) Такой странный номер потому, что до 0.9 какого-нибудь по фичастости и стабильности еще надо поработать, а вот от 0.1 явно уже далеко по тем же параметрам.

Изменений от предыдущего релиза — никаких, потому что релизов еще не было. ;)

27 comments »

Консультации по Mercurial

Я тут поразмышлял на досуге и подумал, что пора уже свои знания использовать для служения человечеству. ;)

Так что welcome — если вам (или вашей команде) требуется тренинг, консультации по Меркуриалу (да и вообще DVCS), у меня есть и способности, и желание. ;) Оплата, естественно, по договоренности, достаточно умеренная — особенно поначалу. Могу по желанию прочитать и просто лекцию на тему того, чем же все-таки DVCS лучше Subversion (или той же VSS, смотря уж как сложились звезды ;)).

Вкратце о том, почему я себя считаю способным:

  • разные VCS использую лет 6, из них последние 2 — большей частью hg
  • последний год — активный контрибутор в Mercurial
  • я написал статьи на тему hg, которые висят достаточно высоко в топе developers.org.ua

Ну и можно вспомнить, что несколько групп разработчиков перешли на hg благодаря (в разной степени) моему участию.

Основной способ связи — email: piranha AT piranha.org.ua

10 comments »

Короткие ссылки — rev=canonical

Буквально вчера мне в читалку приехал пост Саймона Виллисона о довольно новом способе сокращать урлы.

Идея заключается в том, что сокращалки урлов на самом деле — не очень хорошая штука, особенно с точки зрения жизни этих ссылок (вопрос о том, нужно ли сокращать урлы — отдельная вещь). Что, если tinyurl.com умрет? Куча ссылок перестанет работать, даже если их цель все еще жива. В результате обсуждения родилась мысль, что можно же позволить сайтам самим указывать короткие урлы, с возможностью использования своих собственных сокращалок адресов.

Итого — сайт со спецификацией (если это можно так назвать), вкратце — надо указать в <head>...</head> документа подобный линк:

<link rev="canonical" href="здесь-короткий-урл">

И вот в посте Саймон рассказывает о том, как он реализовал это у себя — мне решение понравилось тем, что в базу ничего не сохраняется. ;) Однако то, что у него захардкожены модели — это не сильно клево, потому я сел и быстренько сделал небольшое джанго-приложение — revcanonical, которое только тем и занимается, что генерирует и редиректит такие ссылки.

Все урлы имеют вид двух строчек, объединенных точкой — это base62-кодированные1 номера типа (ContentType) и самого объекта в базе данных. Т.е. применять можно абсолютно для любого объекта без всякой настройки. Определение урла, как обычно — с помощью get_absolute_url(), ну да об этом написано и в README.

Само собой, оно уже встроено в Byteflow. ;-)


  1. Цифры, большие и маленькие латинские буквы 

11 comments »

Python переходит на Mercurial

Гвидо сегодня анонсировал, что питон переходит на меркуриал. Отлично! ;)

Вообще, читаю несколько фидов в твиттере про PyCon и так жалко, что у меня никакой возможности съездить туда не было.

13 comments »

Дедлайн

I couldn’t understand why my productivity went down when I had deliberately made more time available to write. Then I realized it was because I wasn’t flying as much. Before, I’d sit on a plane and pull out a computer and start writing a speech or whatever. And on most planes, there are no plugs, so I’d open up my computer and wrote until the battery died. Because I had this pressure of knowing the battery would die, I wrote monumental amounts in short periods of time.

Simon Sinek

Я не мог понять, почему моя продуктивность упала, когда я стал выделять больше времени на то, чтобы писать. Через время я осознал — я стал летать на самолетах значительно меньше, чем раньше. До этого я просто садился в самолет, открывал ноутбук и начинал писать речь (или что-то еще). И на большинстве самолетов не было розеток, так что писать я мог от открытия ноутбука и пока не сядет батарейка. Ощущение того, что батарейка скоро умрёт оказывало на меня такое давление, что я писал огромное количество текста за короткие промежутки времени.

Цитата просто про меня. Сижу теперь и думаю, как бы мне себе устраивать такие дедлайны получше…

18 comments »

Exception #10

Написать можно было и пораньше, конечно, но лучше так, чем никогда. ;)

def saturday():
    raise Exception(10)
0 comments »

Редактирование комментариев

Редактирование комментариев для блога (если они есть) — абсолютно необходимая вещь. Ну т.е. не так, чтоб кровь из носу, но я надеюсь, что тег этого поста дает мне немного свободы говорить такие безапеляционные вещи. ;) Написал я комментарий, отправил — смотрю, ошибка. Поправить уже нельзя. :(

В общем, вордпресс подобен маятнику: и тот, и другой следует остановить. Почти копирайт Козьмы Пруткова. ;)

5 comments »

Узкие шаблоны

Я давненько (полтора месяца прошло) уже ничего не писал — как обычно январь и февраль у меня какие-то странно безумные месяцы. Непонятно, почему в этом году так — сессии-то уже нету, может по привычке? ;) Но писать есть о чем, в основном длинные вдумчивые посты. А тут я буквально пять минут назад раскрыл себе глаза порядочно и хочу поделиться.

Есть такая проблема, что байтфлоу — не очень быстр. На самом деле ускорить можно кешированием, но я решил подождать с ним и сначала решить проблему реальную (где-то ж затык должен быть). Интересно, что отключение полное запросов в БД не сильно большое влияние оказывает — ускоряется все ну процентов на 10. И я крепко подозревал, что виноваты темплейты.

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

Requests per second:    13.43 [#/sec] (mean)

Тот же пост, просто вывод в плейн текст (repr, грубо говоря):

Requests per second:    68.42 [#/sec] (mean)

О как. Либо переходить на Jinja, либо кешировать готовые темплейты насмерть…

16 comments »