homo_virtualis
View:Recent Entries.
View:Archive.
View:Friends.
View:User Info.
You're looking at the latest 20 entries.
Missed some entries? Then simply jump back 20 entries

Tags:
Subject:svn branching
Time:12:43 pm

Лучше поздно, чем никогда.

Постом на который ссылался аудиослейв некоторое время назад навеяло. Расскажу про наш способ работы с svn-бранчами.

Идея заключается в том, что запоминать с какой же именно ревизии ты отпочковался - накладно. Пусть об этом помнит машина. Для этого мы используем свойство svn о том что сливание веток это всего лишь получение диффа двух поддеревьев и применение его к третьему. Значит вместо записывания ревизии почкования мы можем создать два бранча "рабочий" и "эталонный". А потом найти разницу между ними как итог работы в бранче.

"Рабочий" бранч будет называться как обычно branches/$branch, а "эталонный" branches/$branch--base. В качестве названия бранча я, как правило, использую номер задачи из багтрекера, например FOOBAR-28.

создание бранча

# "базовый" бранч
svn cp $prj/{trunk,branches/$branch--base}`

# "рабочий" бранч
svn cp $prj/branches/$branch{--base,}

# чекаут нового рабочего бранча, начинаем работу
svn co $prj/branches/$branch
cd $branch

вливание бранча в транк

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

# локальная копия транка для сливания
svn co $prj/trunk $branch--merge
cd $branch--merge

svn merge $prj/branches/$branch{--base,}

# проверяем, что все работает и коммитим
svn ci

обновление бранча из транка

Эта операция чуть более сложная, но все же доступная для понимания =)

# так как мы сольемся с транком "эталонный" бранч должен стать идентичным 
# текущему транку
svn cp $prj/{trunk,$branch--new-base}

# сливаем все изменения от старого "эталонного" до нового
cd $branch
svn merge $prj/branches/$branch--{base,new-base}

# подменяем "эталонный" бранч
svn rm $prj/branches/$branch--base
svn mv $prj/branches/$branch--{new-base,base}
comments: 4 comments or Leave a comment Add to Memories Tell a Friend

Tags:, , ,
Subject:самый большой кластер
Time:02:21 pm
Flash - замечательная технология, умеет получать информацию из интернета, отправлять ее обратно, и с развитием VM в Flash, и позиционированием ее как платформы для сложных вычислений (появился компилятор C/C++ → Flash Adobe Alchemy: "... Ideally suited for computation-intensive use cases, such as audio/video transcoding, data manipulation, XML parsing, cryptographic functions or physics simulation ...") появляется возможность организовать вычислительный кластер невероятных размеров. Все же и так знают, что от флеша ноутбук начинает греться.

То есть для того чтобы увеличить размер кластера нужно, чтобы как можно больше человек открыло браузером страничку с правильным флешом и не закрывало. Сначала я думал, не сделать ли казуалку, зума бы подошла, я думаю. А потом вспомнил про YouTube. Этим ребятам точно ничего не стоит построить суперкомпьютер (100M показов видео в сутки при средней длительности 1 минута это почти 200 машино-лет(!)) за 0 долларов, 0 центов. =) Так что, когда в следующий раз пойдете смотреть ютуб и у вас включится вентилятор ноутбука, вполне может быть, что он считает вовсе не то, что кажется =)
comments: 2 comments or Leave a comment Add to Memories Tell a Friend

Tags:,
Time:12:56 am
А я правильно понимаю, что если мы возьмем шарообразный сервис и посмотрим как давно на него заходил каждый пользователь, то график распределения этих чисел будет экспонентоциальным распределением?
comments: 3 comments or Leave a comment Add to Memories Tell a Friend

Tags:, , , , ,
Subject:Exception #08: Поиск "утечек" памяти в python-программе
Time:12:42 am

Я собрался с силами и сгенерировал текстовую версию доклада, который я делал на Exception #08. Про то, как я его писал можно будет написать отдельный пост =)

Exception #08: Поиск 'утечек' памяти в python-программе )
comments: 2 comments or Leave a comment Add to Memories Tell a Friend

Time:01:48 pm
такой вопрос: стоит ли делать текстовую версию доклада, который я рассказывал на Exception #08, про поиск лишних объектов и использование инструментария gc/pdb/pickle?

точнее, я понимаю, что стоит, но как много людей это хотят? если наберется больше 10 - сделаю =)
comments: 11 comments or Leave a comment Add to Memories Tell a Friend

Subject:a12n
Time:08:55 pm
На днях открыл для себя чудесный мир AppleScript.
Устал каждый раз приходя на работу открывать логи разрабатываемого сервиса на двух бекендах. Сделал такой скрипт:

tell application "Terminal"
	set blaze_tab to do script "ssh blaze 'tail -f /var/log/yandex/...log' | bin/colorer"
	
	set custom title of blaze_tab to "blaze"
	set number of rows of blaze_tab to 80
	set number of columns of blaze_tab to 128
	
	set vitalize_tab to do script "ssh vitalize 'tail -f /var/log/yandex/...log' | bin/colorer"
	
	set custom title of vitalize_tab to "vitalize"
	set number of rows of vitalize_tab to 80
	set number of columns of vitalize_tab to 128
end tell


С циклом заморачиваться не стал, сильно не понравилось как код выглядит.

А bin/colorer - микро-утилитка, которая расцвечивает строки если в них встречаются слова INFO, WARN, ERROR в жирно-черный, желтый и красный соответственно =)

Да, а Automator'у мое фу за то что не дает ускорять набор текста в записанных действиях.
comments: 1 comment or Leave a comment Add to Memories Tell a Friend

Tags:
Time:08:07 pm
Использовал django-evolution для изменения схемы БД Яндекс.Нано. Полет нормальный, проверка боем пройдена.
comments: 4 comments or Leave a comment Add to Memories Tell a Friend

Subject:raw: количество информации
Time:12:41 pm
цель этого поста в том, чтобы освободить голову от мысли, а не в том чтобы претендовать на истинность

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

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

(sidenote: в случае возможности удалений возможны сообщения с отрицательной информацией относительно системы!)

то есть информация в сообщении - это не абсолютная величина. для измерения информации сообщения нужна система к которой сообщение относится.

так же, возможно, имеет смысл введения понятия "работы" по вычислению конкретного утверждения из заданной аксиоматики. так, например: "4 + x = 7 при x = 3" -- работы мало, "z^n = a^n + b^n не имеет решений при n > 2" - работы очень много. при том что ни то ни другое утверждение не содержит информации.
comments: 7 comments or Leave a comment Add to Memories Tell a Friend

Time:01:33 pm
Идея в пустоту: уже существуют внешние жесткие диски с ethernet интерфейсом, почему бы в них кроме возможности шарить файлы по ftp/smb не встроить умение скачивать файлы через bittorrent из интернета? по-моему, это было бы органичным дополнением.
comments: 11 comments or Leave a comment Add to Memories Tell a Friend

Subject:Облака тегов
Time:03:45 pm
Для чего нужны облака тегов? С одной стороны я никак не могу придумать внятного обоснования для их существования, я ни разу не смог воспользоваться ими как навигацией (по-моему это их заявляемое предназначение). С другой стороны мне самому хочется добавить их к каждому проекту, который я делаю, подсознательно, без объективной причины.
comments: 6 comments or Leave a comment Add to Memories Tell a Friend

Subject:Boo
Time:03:54 pm
A Pattern Matching facility for boo

Оказывается, система макросов в boo гораздо выразительнее, чем я ожидал.
comments: Leave a comment Add to Memories Tell a Friend

Time:11:16 am
Ставлю 9 к 1, что грядущий ClientSide окажется даже менее информативным чем прошедший HighLoad.
comments: 1 comment or Leave a comment Add to Memories Tell a Friend

Tags:, ,
Subject:django templates
Time:09:29 pm

При использовании django регулярно натыкаюсь на выразительную убогость темплейтного языка.

Последнее из этой серии. Невозможно сделать следующее:

{% yausername user|nick_or_fio %}

А хотелось простого. yausername - тег который умеет приводить строку к виду elephantum, nick_or_fio фильтр, который выбирает у пользователя первый не пустой аттрибут из списка: [ник, фио, логин].

Но все оказалось не так просто. Фильтры могут применяться только в блоках подстановки переменных ({{ user|nick_or_fio }}), параметры же тегов обрабатываются as is и все ломается на невозможности найти в контексте переменную "user|nick_or_fio".

В принципе, поднатужившись, можно пропатчить джангу в этом вопросе, но стоит ли шкурка выделки?

comments: 20 comments or Leave a comment Add to Memories Tell a Friend

Tags:,
Subject:Storm
Time:01:50 pm
Storm - первый внятный ORM, который я вижу.
comments: 5 comments or Leave a comment Add to Memories Tell a Friend

Subject:icfp
Time:05:42 pm
какая жалость, я банально пропускаю ICFP 2007 из-за поездки на семинар
надеюсь у всех остальных будет возможность принять в нем участие
comments: Leave a comment Add to Memories Tell a Friend

Tags:,
Subject:писать на лиспе можно на любом языке программирования
Time:06:39 pm

как просто раскидать один список в несколько других по условию

In [1]: l = range(20)

In [2]: def cond(x):
   ...:         return x % 3
   ...: 

In [3]: (lambda r: dict((curkey, [item for (key, item) in r if key == curkey]) 
   ...:                 for curkey in dict(r).keys())
   ...:  )([(cond(i), i) for i in l])

Out[3]: 
{0: [0, 3, 6, 9, 12, 15, 18],
 1: [1, 4, 7, 10, 13, 16, 19],
 2: [2, 5, 8, 11, 14, 17]}
comments: 2 comments or Leave a comment Add to Memories Tell a Friend

Tags:,
Subject:Как прострелить себе ногу, n+1
Time:01:59 pm
>>> class History:
...     def __init__(self, data=[]):
...             self.data = data
...     def append(self, val):
...             self.data.append(val)
...     def __iter__(self):
...             return iter(self.data)
... 
>>> h1 = History()
>>> h1.append(1)
>>> list(h1)
[1]
>>> h2 = History()
>>> h2.append(2)
>>> h2.append(3)
>>> list(h2)
[1, 2, 3]
comments: 5 comments or Leave a comment Add to Memories Tell a Friend

Tags:,
Time:06:43 pm
Отличный доклад про Python: Advanced Python or Understanding Python.

Стоит своего часа времени на просмотр.
comments: 2 comments or Leave a comment Add to Memories Tell a Friend

Tags:,
Time:05:01 pm

очень меня беспокоит, что современное программирование больше походит процесс молекулярной сборки, мой идеал - конструкторы lego

disclaimer: да, я понимаю, что все упирается в сложность системы, однако мне кажется, что в массе случаев эта сложность преувеличивается

comments: 3 comments or Leave a comment Add to Memories Tell a Friend

Tags:, , ,
Time:05:29 pm

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

Самым вероятным кандидатом был web.py, однако я не могу смириться с основными концепциями этой библиотеки. Видимо, я слишком много программировал на хаскелле, это вредно. Сейчас я считаю, что у каждой функции все выходы должны быть точечными и начинаться со слова return. Предложение генерировать выходные данные последовательностью self.send_response(...), self.send_header(...), print - меня убивает. Если действительно необходимо сделать не атомарный вывод, как, например, при server-push механизме, то просто нужно возвращать генератор атомарных элементов.

comments: 4 comments or Leave a comment Add to Memories Tell a Friend

Advertisement

homo_virtualis
View:Recent Entries.
View:Archive.
View:Friends.
View:User Info.
You're looking at the latest 20 entries.
Missed some entries? Then simply jump back 20 entries