Categories: ,
Posted by: buriy
Я постепенно мигрирую на git. За последнее время я избавился практически от всех своих svn репозиториев, и перевел половину bzr репозиториев на git.
Список преимуществ и недостатков git расписывать не буду, скажу только о том, что мне больше всего льстит в последнее время: это git для django.
Как известно, репозиторий django это svn. И самый большой его недостаток — невозможность добавить свои патчи в дерево django один раз, а потом пользоваться ими на разных компьютерах, и чтобы патчи при этом не теряли актуальности. При помощи git это всё легко, при этом у меня есть возможность обновить django, откатить на любую версию, вытащить любую версию. И всё это даже в оффлайне :)
Если вы хотите такое повторить у себя, воспользуйтесь git-svn (а не тем, что у django есть git репозиторий — он слишком редко обновляется).
Команды, которые вам понадобятся:
git-svn clone (создать репозиторий
git-svn fetch (обновиться)
git-svn rebase (актуализировать свои изменения)
git commit (сохранить свои изменения)
Так же рекомендую для винды добавить настройку
git config —add autocrlf false
(если вы устанавливали git под windows через msysgit, то вместо минуса команды пишутся через пробел)
Это позволит вам не получать изменения каждый раз, когда вы сохранили файл под виндой.
Поскольку в первый раз выкачка из россии происходит медленно, рекомендую сделать git-svn clone —bare на каком-нибудь вашем знакомом американском сервере, а потом оттуда обновляться через git push/git pull.

p.s. deseb я обновляю тоже в git репозитории, а изменения пока что не выливаю наружу (git-svn dcommit). готовьтесь. намного более качественная версия для 1.0 на подходе! ;)
Categories: ,
Posted by: buriy
Привет всем, давненько я не писал.
Пусть на улице снова снег, но это всё же весна, и душа требует перемен.
Поэтому я наконец-то сменил движок сайта на byteflow blog engine.
Теперь здесь есть древовидные комментарии, уведомления по почте, антиспам, пингбэки, трэкбэки, фиды по темам, openid-логины, кросспост в жж. Кажется, больше ничего нет. Кажется :)
Короче, то, что наколенный блог никогда не будет иметь.

А ещё, сегодня я думал о web-4.0. Ведь прогресс не остановишь, за вторым webом будет третий, а за ним… конечно же, четвёртый!
Самый первый вопрос, который возникает… конечно же, как он будет называться. :) А вы что подумали? версионирование веба — это “it’s all about buzzwords” — громкие слова и ничего кроме.

Итак, давайте следить.
Web 2.0-называется social web.
Web 3.0-называется semantic web.
Вывод простой. Нужно искать название, начинающееся на s.
Мне вот нравится слово smart. Значит, web 4.0 будет называться smart web.
Ну, осталось совсем чуть-чуть: придумать, какими свойствами он должен обладать.
Мда, придётся немного подумать… :)

Веб 2.0 означает, что пользователи делают всё за создателей сайта.
Веб 3.0 означает, что любой другой сайт умеет теперь эту информацию отдавать другим.
Тогда веб 4.0-сайт будет уметь эту информацию искать на других сайтах и преобразовывать в удобный пользователю вид. Конечно же, настраивать поиск и преобразования будут сами пользователи. И даже дизайн таких сайтов настраивать. Впрочем, сайты будут помнить свои дизайны и сами передавать их друг другу.

Интернет выродится. Теперь у вас остался только один сайт — ваш собственный. Ну или мой собственный, зависит от вашей точки зрения. Или моей :)
Сайтов много, но он один во многих лицах, как бог. Умеет всё, что умеют все.
Да, и он будет у вас на десктопе, конечно же. Даже в текстовом режиме. А вы как думали? :)
Categories: ,
Posted by: buriy
Принял эстафету от FX Poster’а.
Долго колебался, т.к. не люблю писать про такие вещи, но вдруг кому поможет :)

Вообще, я давно уже занимаюсь настройкой винды под себя.
Что радует, со временем её нужно настраивать всё меньше.
А не радует то, что я запарюсь сейчас перечислять все мои удобные штуки :(
И ведь каждая нужна!
Сначала Top5.
* Notepad2 — Очень удобный заменитель Nodepad для windows. Заменил Notepad.exe на него.
* Prio — дополнение для task manager, показывает сервисы и трафик: описание с картинками
* Eclipse 3.3 + PyDev commercial — использую для питоновских рефакторингов и вообще, когда могу.
* Console2 — Очень удобный заменитель консоли для windows. Полупрозрачность, прямоугольное выделение, работает Shift-Insert. Т.к. есть Far, то я из под него запускаю только ipython. Сделал для этого отдельную иконку.
* VirtuaWin — виртуальные десктопы для windows. До использования этой программы смотрел на taskbar, который у меня справа, и отвлекался. Обычно оставляю работу и окна браузеров по работе на первом десктопе, почту и новости на втором, персональные проекты на третьем.

Что касается браузеров:
* Firefox 3 + Firefox 2 + Firebug,
* IE7 + Multiple IE + IE Dev Toolbar.
Про установленные addon’ы и расширения GreaseMonkey промолчу (их много).
Далее,
* Bazaar + eclipse-bzr + Subclipse — для репозиториев.
* lighttpd для раздачи статических файлов под .
* wget для скачивания больших файлов и сайтов целиком. wget — лучший downloader!
* PostgreSQL admin и сервер PostgreSQL для sql.
* PuTTY — для ssh-соединений и ssh-туннелей. У меня больше 10 машинок в настройках.
* Punto Switcher — потрясающе удобный переключатель раскладок для клавиатуры (с) FX Poster. Особенно когда он ничего не переключает без команды, т.е. находится в “выключенном” режиме.
* FAR + WinSCP + Colorer. Этому файл менеджеру я готов петь хвалебные песни! (c) Денис. Тем не менее, он не мешает мне использовать windows explorer для путешествия по папкам с фильмами и картинками.
Кстати, знаете ли вы, что есть Colorer для Eclipse? ;)
* Adobe Audition. Отличная замена Sound Recorder, если вам нужно записывать что-либо длиннее 1 минуты. Впрочем, всякие SoundForge, я думаю, тоже прекрасно подойдут :)
* Мессенджеры: Skype, Google Talk, MSN Messenger, QIP, Psi.
* Прочее: Winamp, Nero, Daemon tools, Lingvo, Windows OneCare, Picasa.
Вот так выглядит моя не очень-то любимая Windows XP: картинка
Posted by: buriy
Вспоминаю, что когда-то я обещал писать про django.
Сегодняшняя тема — эволюция баз данных для django.
Я — один из двух создателей deseb.
deseb — это Django External Schema Evolution Branch, то есть инструмент для эволюции баз данных для django. Да, юные любители ruby on rails, это практически ваши миграции, только с более простым DSL и конструирующиеся автоматически по изменениям модели.
Ну а тем, кто с rails не знаком, расскажу поподробнее.

Основа django — модели. Обычно они находятся в файлах models.py в разных папках внутри проекта. deseb умеет сравнивать содержимое моделей и текущую схему базы данных, и вносить в эту схему изменения. Таким образом, программист django вообще может не знать sql, или же изучать sql, глядя на вывод django и deseb, но никогда не писать sql самому. Наконец-то! :)
Сообразительные, но малознакомые с django, спросят — а как же переименование?
Как deseb поймет, что столбец или таблицу нужно переименовать? Конечно, он и не поймёт, пока вы не добавите полям и таблицам для переименования дополнительный аттрибут aka=… для указания их старых имён! Вот из-за этого аттрибута и пришлось сделать deseb внешним относительно django.

Ссылки по теме:
главная страница проекта — http://deseb.googlecode.com/
подробное рассмотрение миграций для django: http://code.djangoproject.com/wiki/SchemaEvolution

Проект находится в альфа-статии. Текущие хорошо поддерживаемые базы данных — postgresql и mysql. Плохо поддерживаемый — sqlite.
Я знаю несколько имеющихся мелких проблем, однако, скорее всего, они будут пребывать в состоянии “не дошли руки”, пока вы мне не поможете.
С радостью и очень быстро, скорее всего в тот же день, приму и закоммичу багфиксы ;)
Posted by: buriy
Оказывается, svn всё-таки позволяет настраивать список игнорируемых масок файлов для проекта в целом! Правда, в документации гораздо более подробно описывается, как настроить global-ignore — т.е. ignore файлов по маске для пользователя (!) и для всех пользователей текущей машины (!!!). Описано и свойство svn:ignore для каталога с файлами.
Вот эта опция для проекта:
svn propset svn:ignore -F .ignore .
Потрясное юзабилити! Кстати, описание опции закопано глубоко в ж… эээ… в документации как “Ignore Patterns for CVS Users” и её хрен найдешь по ключевым словам. (http://svnbook.red-bean.com/en/1.4/ svn.advanced.props.special.ignore.html).
Странно, неужели только пользователям CVS такая идея приходит в голову? :)
Categories: , ,
Posted by: buriy
Если вам приходится девелопить сайты в IE, вам будет приятно узнать, что появился аналог
Firebug для IE от Microsoft. Он не умеет изменять стили на лету, но понять, из-за чего в этот раз сглючил IE, и что за элемент сейчас находится под мышкой, теперь можно запросто.
Качаем тут: здесь.
Как и все продукты Microsoft, имеет место непродуманность фич. Было реализовано не самое нужное, не самым лучшим способом — но самое простое: то, что создателю продукта показалось хоть чуть-чуть полезным. (Это я на личном опыте знаю, что бывает, когда делаешь продукты без “обратной связи” — один раз я так в продукте контрол для выбора диска (C: D:) забыл ;))) )
На момент написания этого поста, продукт находится на 62м (!!!) месте по скачиваемости на сайте Microsoft downloads.
Updates:
1) зато стили можно добавлять — через аттрибут тега style.
2) можно стили изменять, но только показываются эффективные стили, а остальные удаляются. Это значит, что обычно надо добавлять !important в элементы вида width: 500px, чтобы ваше изменение не стёрлось.
Categories: , ,
Posted by: buriy
Немного меняю формат блога.
Изначально он задумывался просто так, “чтобы был”.
Теперь буду писать раз в неделю (а может и чаще) о том, что вы хотели бы от меня услышать.
Особенно охотно буду писать статьи про Django.
Что бы вы хотели узнать от меня о Django?
О программировании на Python вообще?
О программировании вообще?
О моих других увлечениях?
О жизни/психологии/мотивации/личностном росте?

Предложения пишите в комментариях к этому посту или почтой (чтобы мне не терять список предложений).
Categories: , ,
Posted by: buriy
Задача, которая встала передо мной на этот раз — немного необычна.
Требуется: достать из таблицы БД postgresql все уникальные первые символы. Алфавитный справочник составляю.
Проблема: postgres работает в режиме sql-ascii, символы могут занимать разное число байт.
Проблема2: postgres не имеет функции конвертации символов, а substr работает с байтами.

Решение:
SELECT DISTINCT
CASE
when ascii(substr(word,1,1))<192 then substr(word,1,1)
when ascii(substr(word,1,1))<224 then substr(word,1,2)
when ascii(substr(word,1,1))<240 then substr(word,1,3)
when ascii(substr(word,1,1))<248 then substr(word,1,4)
when ascii(substr(word,1,1))<252 then substr(word,1,5)
else substr(word,1,6)
END as letter
FROM table;
Categories:
Posted by: buriy
У товарища 20 минут искали бумажку и ручку. Понимаешь ли, эра высоких технологий!
Categories: , , ,
Posted by: buriy
Цитируя Андрея Таранцова:
Сегодня будет великий день! Я начну переход с Eclipse 3.1 на Eclipse 3.3 :)
Пожелаем ему удачи в рефакторинге кода двухлетней давности.

У меня тоже сегодня великий день.
Я сегодня узнал про то, что с полями моделей в Django можно делать преинтереснейшие вещи:
class DomainInfo(Model):
  def preview(self):
    return ‘<img src=”/media/%s”/>’ % self.screenshot
  preview.allow_tags = True
  preview.short_description = ‘screenshot’

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