среда, 29 июня 2011 г.

Склероз

Уже не первый раз попадаюсь в одну и ту же яму. Вот есть какая-то задача, работаешь над ней. Потом возникают другие, более актуальные задачи, и работа над ней останавливается.

А потом, через полгода-год старая задача снова становится актуальной. Но я уже почти все о ней забыл. Остались какие-то смутные воспоминания и рабочие записи, в которых теперь ничего не понятно. И снова все начинается заново – читаешь доки, наступаешь на те же грабли. Что-то конечно вспоминается, но далеко не все.

Надо делать подробные записи, пока ты в теме. Но пока ты в теме, все и так понятно, не охота тратить время на ненужную писанину…

Видимо надо завести правило – если работа над задачей остановилась больше чем на неделю, то надо потратить день-два и подробно (очень подробно) все записать по горячим следам.

Кстати, рекомендую http://trac.edgewall.org/ – хорошая система учета доки, багов, записей и заодно просмотр коммитов в системе контроля версий. Без проблем ставится под виндоуз, причем в простейшем варианте не требуется веб-сервер.

пятница, 3 июня 2011 г.

Scons tools

Уже давно использую SCons для build-скриптов. Однако недавно, просматривая зачем-то его руководство, обратил внимание на такую удобную штуку как создание собственных тулзов.

SCons скрипты часто используют какие-то общие части. Раньше я такие части выносил в отдельные питоновские модули и подключал их через import в билд-скрипт. Однако так как эти модули лежали не рядом со скриптом, и не в PYTHONPATH, возникал ужас вида

 
1 import os
2 import sys
3 from os import path
4
5 sys.path.append(path.normpath(path.join(os.getcwd(), "..", "common", "build")))
6
7 from myModule import SomeFunc

Так вот, тулз – это просто модуль питона, который содержит две функции – generate(env, **kw) и exists(env, **kw).


Первая функция вызывается при подключении тулза к окружению и позволяет добавить к окружению произвольные методы, переменные и т.д.


Теперь все становится очень просто:



1 e = Environment(tools=('MyTool', ), toolpath=('../common/build',))
2 e.SomeFunc(...)


Ну и сам тулз выглядит вот так:



1 def generate(env):
2 env.AddMethod(SomeFunc)
3
4 def exists(env):
5 return 1
6
7 def SomeFunc(env):
8 pass


Полезно читать доку Улыбка