22
Oct 11

Virtualization with vagrant @ PyCon Ukraine 2011

I attended PyCon Ukraine 2011 today, and gave a brief talk about usage of VMs in development. Although presentation itself was based on my previous one made for CQG, it was significantly reworked for wide audience.

Let me know if I missed anything.



And here is screencast of demo project deployment with help of Vagrant and Fabric.


03
Oct 11

Using git to get version information

From time to time you need to get project version information and use it somewhere – in project documentation, in About box or include it in website footer.

I use git for my projects, and find it very convenient to let git to provide version info instead of hardcoding it into the source code. There are several possible ways to ask git for version information, including keyword expansion – and some of them are described in this stackoverflow post. For me, git describe works best, since it doesn’t modify sources on checkout (comparing to keyword expansion) and provides version information in format that could be used in other git commands such as git diff.

Sidenote: git describe

git describe returns information about state of working tree or any particular commit. There are several command line switches to consider, but in most cases “git describe –tags –always” will work just fine for everyone. The command finds the most recent tag that is reachable from a commit, and if the commit itself is pointed at by the tag, shows the tag. Otherwise, it suffixes the tag name with the number of additional commits and the abbreviated object name of the commit.

$ git describe --tags --always
v0.1.3-16-ge1b5922

Note on performance

Keep in mind that running git every time you need version information may not be the best idea. When source code changes are rare and performance is important (e.g. production website) it is wise to get information only once, then store it for later use. In other cases, when changes are often and performance is not critical, it may be ok to query git every time.

Example: including version information in Sphinx documentation

Sphinx is a tool that makes it easy to create intelligent and beautiful documentation, and it is often used in Python world. Project version information is stored in Sphinx configuration file and is embedded auto-generated project documentation. Since Sphinx itself is written in Python, getting version info is simple. First, add the following lines to your docs/conf.py:

from subprocess import Popen, PIPE

def get_version():
  """ Returns project version as string from 'git describe' command. """
  pipe = Popen('git describe --tags --always', stdout=PIPE, shell=True)
  version = pipe.stdout.read()

if version:
  return version
else:
  return 'X.Y'

Then, replace hardcoded version and release values:

# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = get_version().lstrip('v')
# The full version, including alpha/beta/rc tags.
release = version

15
Jul 11

Виртуализация разработки + vagrant как удобное средство для ее автоматизации

Выложил в сеть слайды своей презентации о виртуализации разработки ПО и использовании vagrant для автоматизации рутинных задач по управлению VM. Тема достаточно объемная, постараюсь более подробно описать в следующих постах.




10
Jun 11

Замена фонта консоли Windows на более подходящий

Одна из вещей, которая раздражает в Windows – ограниченность настроек консоли aka cmd.exe. В частности, выбор шрифтов сводится к Consolas, Lucida Console и невнятным Raster Fonts:

В то же время, есть большое количество других фонтов, которые хорошо подходят для задач программирования и администрирования. Неплохой список можно найти в этой статье или тут, лично я же предпочитаю использовать Inconsolanta.

Как оказалось, подключить ваш любимый фонт к консоли можно, хотя это требует некоторых действий с реестром, за наводку спасибо Скотту:

  • Откройте HKLM/Software/Microsoft/Windows NT/CurrentVersion/Console/TrueTypeFont. Вы увидите несколько значений, соответствующим Lucida и Consolas.
  • Создайте новый String Value. Название должно состоять из нолей и быть на один символ длиннее предыдущего подобного названия. Так, в моем случае имя ключа – “000″.
  • Значение ключа – название фонта. Вообще на фонты накладываются некоторые ограничения, подробнее о них вы можете прочесть в MS Knowledge Base.
  • Reboot. Без этого шрифты не подхватятся.

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

Хорошая альтернатива танцам с бубном вокруг реестра – open-source проект Console2. Как пишут авторы:

Console is a Windows console window enhancement. Console features include: multiple tabs, text editor-like text selection, different background types, alpha and color-key transparency, configurable font, different window styles.

Console2 недавно поднялся до второй версии, и выглядит довольно-таки неплохо, с успехом заменяя стандартные средства.


27
Mar 11

Использование github для хранения персональных настроек

Проблема унификации персональных настроек среды знакома каждому, кто работает на нескольких компьютерах. При работе в unix/linux/*bsd у каждого довольно быстро появляется свой любимый набор aliases, bash-functions, PS1 и переменных среды, которые облегчают работу. Не стоит забывать и о настройках других программ, таких, как vim, emacs или git.

По счастью, большая часть настроек хранится на *unix-системах в простых текстовых файлах и может быть легко скопирована на новый сервер. Однако, при росте количества серверов вы неизбежно сталкиваетесь с ограничениями такого подхода. Какую версию считать основной мастер-копией? Что, если в вашем парке несколько операционных систем и настройки разнятся от одной системы к другой? Что делать, наконец, если мастер-копию настроек возможно быстро скачать не на все сервера – скажем, она лежит на вашей основной рабочей машине в офисе компании за файрволлом?

Появление distributed version control systems, таких, как git и mercurial, вкупе с возможностью хостить свои персональные репозитории в облаках позволяет значительно уменьшить эти проблемы. Я воспользовался публичным хостингом на github, однако, если вы не хотите давать доступ к вашим настройкам – есть и другие варианты (например, unfuddle предлагает бесплатный приватный хостинг git и svn репо).

Continue reading →


18
Mar 11

Введение в git

Выложил в публичный доступ мою презентацию “Introduction to git”. В первую очередь она рассчитана на разработчиков (а на кого же еще?), речь идет не только о том, как git использовать, но и о дизайне, предпросылках для создания git, внутренней структуре репо и многом другом.




17
Mar 11

Настройка bash completion для git под Mac OS

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

Одним из преимуществ git являются дешевые бранчи. Поскольку бранч – это просто файл в .git/refs/heads, который содержит id последнего коммита в этом бранче, создание нового бранча выполняется за очень небольшое время. При таких возможностях разумно использовать бранчи, что называется, “на все деньги”, что большинство программистов и делает.

Независимо от выбранной модели использования бранчей, рано или поздно наступает момент, когда можно забыть, в каком бранче вы находитесь в данный момент и закоммитить код не туда. Хотя это некритично и ошибку можно легко исправить, но таких ситуаций по возможности хотелось бы избегать. К счастью, информацию о имени бранча и прочие сведения довольно легко добавить в bash prompt, которая постоянно перед глазами.

Continue reading →


20
Aug 10

Рассказ о марафоне #soft24, часть 1

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

Но сначала – спасибо всем, кто принимал участие. Ребята, с вами было интересно общаться и работать над идеями и кодом, я с удовольствием приму участие и в следующих “забегах”. И, конечно, отдельное большое спасибо организаторам (и в первую очередь Тимофею Евграшину).

Угнать за 80 секунд

Вкратце об идее: участники собираются вместе (в буквальном смысле, удаленная работа отпадает) и создают законченный продукт за ограниченное время. В Украине уже проходило несколько подобных мероприятий, на которых люди создавали фильмы и журналы за 24 часа. Мы же собрались под одной крышей, чтобы создать софт.

Все вышло как нельзя лучше, и в качестве бонуса мы получили массу удовольствия от самого процесса. Но обо всем по порядку.

Continue reading →


22
Apr 10

Pin font и svn-клиенты под Mac OS

Pinfont

На досуге немного поигрался с django + python, вспомнил молодость. Получился своего рода полный цикл разработки веб-приложения, со скетчами, с несколькими итерациями кода, системой контроля версий (svn) и, в финале, выкатка рабочей версии на “production” хостинг.

pins

pinfont text generator v0.1images by garnenka.

Далее о выборе svn-клиента, Mac OS и удобстве пользователя.

Continue reading →


11
Apr 10

Bit counting, обзор методов

Одна из классических задач в программировании (по крайней мере, о способах ее решения упоминает Дональд Кнут в своем классическом труде) – подсчет выставленных в “1″ бит в числе.

Зачем?

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

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

Методы подсчета можно условно разделить на три области – shifting, algebraic logic и table lookup.

Continue reading →