Технические заметки одного Евтуховича

Рассказ о серых трудовых буднях инженера программных систем

О поездке на HappyDev'2014 в Омск

| Комментарии

6–7 декабря 2014 на базе отдыха им. Стрельникова под Омском состоялась очередная конференция HappyDev. Я давно не попадал на такую интересную и яркую конференцию.

Во-первых, место проведения. На базе под омском с общей столовой на второй день всех знаешь в лицо. После бани с открытым бассейном многих знаешь по именам. И такой формат снимает некоторую зажатость, которая традиционно бывает у русских айтишников. Опять же, именно это позволило докладам и бар-кэмпам проходить в дружеской и непринужденной атмосфере. По возвращении в Москву, я рассказал коллегам, что никогда подобной атмосферы нигде не наблюдал, на что мне резонно порекомендовали Улькэмп. Судя по всему, надо ехать.

Но вернемся к HappyDev. Анна Тарасенко, главный организатор конференции, решила сместить фокус с технологий на людей. И первый день прошел в рассказах о том, как люди запускали свой бизнес в IT. Собственно, это был мой первый нетехнический доклад на технической конференции, я тоже рассказал о нашем опыте.

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

Кратко резюмирую, всем очень рекомендую посетить следующий HappyDev!

PS Еще на турбазе живет просто обалденный кот: толстый и красивый.

Могущественная скорлупа

| Комментарии

Могущественная скорлупа — это, конечно же, шуточный перевод PowerShell. Обратиться к этой теме старого любителя Linux заставило не праздное любопытство, а насущная производственная необходимость. Конечно же, в мире Linux принято весело хохотать и поливать грязью все, что относится к Windows. Но, надо сказать, что многое изменилось в мире Windows, за последнее время.

Во-первых, появился аналог ssh. По протоколу WinRM с помощью PowerShell можно ходить по другим машинкам не хуже, чем по ssh.

PS C:\> Enter-PSSession dc
[dc]: PS C:\Users\Administrator\Documents>

Во-вторых, появилась возможность управлять почти всеми кишками винды с помощью могущественной скорлупы, тьфу, powershell. Например, вот так выглядит аналог ps aux | grep snmp.

Get-Process | ? { $_.Name -like 'snmp' }

Конечно, выглядит достаточно многословно, но для большинства команд есть короткие алиасы, посмотреть которые можно с помощью Get-Alias. Вы будете удивлены, но многие алиасы пришли из мира Linux, например, тот же Get-Process сокращается до привычного ps.

Более того, в PowerShell есть привычная концепция пайпов (pipe), только вместо текстовых строк по пайпам бегают реальные объекты. Мне лично кажется, что это шаг вперед. Не надо воротить команды с awk и cut, и всегда можно посмотреть метаданные того, что пришло тебе через пайп.

ps | Get-Member


   TypeName: System.Diagnostics.Process

Name                       MemberType     Definition
----                       ----------     ----------
Handles                    AliasProperty  Handles = Handlecount
Name                       AliasProperty  Name = ProcessName
NPM                        AliasProperty  NPM = NonpagedSystemMemorySize
PM                         AliasProperty  PM = PagedMemorySize
VM                         AliasProperty  VM = VirtualMemorySize
WS                         AliasProperty  WS = WorkingSet
Disposed                   Event          System.EventHandler Disposed(System.Object, System.EventArgs)
...

Плюс к тому, если ничего не помогает, можно всегда создать .Net класс прямо из PowerShell и воротить, вообще, что угодно. Например, преобразовывать xml файлы.

$Xml = New-Object System.Xml.XmlDocument
$Xml.Load($XmlFile)
$Xml.SelectSingleNode("/my/xpath").InnerXml = "<justforfun />"
$Xml.Save($XmlFile)

С появлением в Windows headless режима, эта ОС все меньше похожа на игрушку, где надо тыкать мышкой по кнопочкам.

Я, конечно, считаю, что PowerShell уступает в изяществе Ruby, но могущественность его от этого нисколько не страдает.

Лекции и обучение

| Комментарии

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

И там я рассказал слушателям свое наблюдение. Я читал курс по PostgreSQL в рамках своей профессиональной деятельности разным командам, с некоторыми из них после этого мне приходилось совместно работать. Так вот почти всегда я натыкался в работе с ними на то, что слушатели делали ровно то, о чем я неделю назад говорил на курсе, что так делать не надо. И, поскольку это был не единичный случай, то я пришел к достаточно очевидному выводу, что прослушивание чужого опыта, не приводит к появлению новых знаний. О чем я теперь всех своих слушателей предупреждаю в обязательном порядке.

Лекции и доклады практически по любому вопросу можно найти сейчас на Youtube. Но толку от этого не так и много. Я до сих пор не знаю, как сделать, чтобы материал из лекций привязался к практическому опыту.

И еще меня крайне расстраивает, обучение всегда происходит очень медленно. Даже на собственном примере я понимаю, что научиться чему-то занимает очень много времени, и как научиться учиться быстрее, я не знаю.

По моему опыту, самое лучшее обучение — это работать над реальным проектом подмастерьем у матерого профессионала. Либо в команде матерых профессионалов.

Конечно, есть уникумы, которые могут все быстро изучить самостоятельно. К несчастью, я к ним не отношусь.

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

Версионирование и Word

| Комментарии

В последнее время по работе мне приходится редактировать документы Microsoft Word. К несчастью этот формат является стандартом de facto в бизнесе. Помимо того, что в Word плохо почти все, начиная от разбегающейся нумерации заголовков, которая лечится совсем уж совсем нетрадиционным способом, и заканчивая вечно куда-то сбегающими рисунками, в Word все безобразно с версионированием.

Конечно, есть режим рецензирования, который позволяет хоть как-то править документ вдвоем, но только по очереди. Частично эта проблема решается в google docs, который позволяет достаточно удобно совместно работать с документами, но тормозит (это сугубо личное впечатление). После того, как поработал с любым кодом и системой контроля версий, все, что есть для совместной работы надо документами, включая до безобразия убогий SharePoint, кажется каменным веком.

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

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

И я искренне страдаю от того, что мир так несовершенен.

Tsung — цунами ручного приготовления

| Комментарии

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

Хороший обзор таких инструментов (httperf, siege, ab, pronk) есть у Льва Валкина. Но у нас была задача чуть посложнее, хотелось проверить, как поведет себя система под «реальной» нагрузкой. И если вам нужны сложные сценарии нагрузки, то тут не обойтись без tsung. Хочется сразу предупредить, что документация, хоть и содержит ответы на многие вопросы, но не блещет особой понятностью и полнотой. Тем не менее, аналогов этому инструменту я не знаю.

Сейчас мы будем нагрузочно тестировать мой блог (давайте на секунду вообразим, что он стал мегапопулярным). Оставайтесь с нами, но бойтесь, впереди много xml!

Соло на ноже

| Комментарии

Очень часто для небольших проектов нет необходимости усложнять инфраструктуру с использованием chef-server. Существует мнение, что chef server, вообще, не нужен, и многие аргументы в пользу этой идеи кажутся мне вполне убедительными.

Для людей, которым нравится DSL chef и не нужен chef server, есть chef-solo. Чтобы готовить с его помощью, нужен специальный нож — knife-solo. Это инструмент, который значительно упрощает использование chef-solo.

Для начала поставить knife-solo

gem install knife-solo

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

knife solo init .

Далее вы подготавливаете ноду (сервер) для работы с knife-solo

knife solo prepare ubuntu@myhostname --bootstrap-version 11.10.04

Последний параметр нужен из-за досадного бага в chef 11.10.0 (а именно он ставится по умолчанию при выполнении команды prepare), из-за которого chef-solo толком не работал, а я потратил 2 часа своей жизни.

После выполнения этой команды в папке nodes появится файл myhostname.json со следующим содержанием:

{
  "run_list": [
  ]
}

Давайте поправим этот файл, добавив ноде какие-нибудь роли или рецепты.

{
  "run_list": [
    "role[base]"
  ]
}

После этого можно запустить команду cook. Она синхронизирует текущую папку на удаленную ноду, после чего запустит на удаленной ноде chef-solo.

$ knife solo cook myhostname
WARNING: No knife configuration file found
Running Chef on myhostname...
Checking Chef version...
Installing Librarian cookbooks...
Uploading the kitchen...
Generating solo config...
Running Chef...
Starting Chef Client, version 11.10.4
Compiling Cookbooks...
[2014-03-28T08:08:28+00:00] WARN: ssh_known_hosts requires Chef search - Chef Solo does not support search!
Recipe: base::default
  * chef_gem[pony] action install (up to date)
[2014-03-28T08:08:28+00:00] WARN: Cloning resource attributes for package[sudo] from prior resource (CHEF-3694)
[2014-03-28T08:08:28+00:00] WARN: Previous package[sudo]: /home/brun/chef-solo/cookbooks-2/base/recipes/default.rb:69:in `block in from_file'
[2014-03-28T08:08:28+00:00] WARN: Current  package[sudo]: /home/brun/chef-solo/cookbooks-2/sudo/recipes/default.rb:20:in `from_file'
[2014-03-28T08:08:28+00:00] WARN: Cloning resource attributes for package[git-core] from prior resource (CHEF-3694)
[2014-03-28T08:08:28+00:00] WARN: Previous package[git-core]: /home/brun/chef-solo/cookbooks-2/ruby/recipes/ruby_build.rb:35:in `block in from_file'
[2014-03-28T08:08:28+00:00] WARN: Current  package[git-core]: /home/brun/chef-solo/cookbooks-2/ruby/recipes/chruby.rb:35:in `block in from_file'
Converging 108 resources
...

Очень здорово, что knife-solo интегрирован с librarian/berkshelf, и для того, чтобы вносить изменения, вам надо просто поправить рецепт и еще раз вызвать knife solo cook myhostname. Стоит отметить, что первый раз синхронизация может выполняться достаточно долго, но потом переносятся только изменения, что происходит очень быстро.

Если вы хотите быстро начать пользоваться шефом, не вникая во всю сложную кухню работы с chef-server, авторизации на нем и всяком таком, то я рекомендую попробовать knife-solo.

Кстати, для тех, кто не в курсе (то есть для всех), у нашей компании «Экспресс 42» есть технический блог. Там будут периодически публиковаться статься, посвященные управлению конфигурацией и DevOps, так что подписывайтесь, если вы интересуетесь этой темой.

Блог про жизнь

| Комментарии

Когда-то давно я достаточно активно вел блог в ЖЖ. Потом я завязал по разным причинам вести блог «про жизнь», а вот теперь, пару лет спустя, решил вернуться к его ведению. Он находиться будет на этом же домене, только по другому адресу: http://evtuhovich.ru/life/. Конечно же, у него будет и свой собственный RSS. Я также буду транслировать его в свой старый ЖЖ.

Этот блог по прежнему будет исключительно техническим. Но иногда хочется написать еще о чем-то, что не относится к моей работе, и писать это сюда я посчитал неправильным.

Не знаю, стоит ли вам подписываться на мой новый блог. Я там буду писать о всяком разном, что меня интересует: музыка, религия, книги, кино, айкидо и других вещах. Буду рад, если вы будете заглядывать ко мне на огонек, и я буду для вас не только человеком, который пишет про Chef и PostgreSQL.

Атрибуты в шефе и DeepMerge

| Комментарии

Многие знают, что в шефе есть большое количество типов атрибутов, необходимые, чтобы гибко управлять инфраструктурой. Для того, чтобы эти атрибуты работали вместе, есть разные правила их объединения. О них мы сегодня и поговорим.

Прощай, Октопресс, здравствуй, Middleman

| Комментарии

Долгие годы этот блог велся на Octopress — платформе для ведения технических блогов. Он был первым и восхищал меня долгое время, я даже хотел написать о нем отдельный пост, но руки так и не дошли. Но были у октопресса и откровенные недостатки, как то:

  • медлительность — он реально подтупливает на генерации страниц;
  • асинхронность — от внесения правки, до появления ее в браузере проходило значительное время, а это сильно раздражало;
  • сложность — поменять что-то внутри не представляется возможным;
  • отсутствие поддержки — с 2011 года официальный сайт не обновлялся;
  • он, вообще, сломался с ruby 2.0.

Волею судеб я поддерживаю сейчас 3 блога: на сайте нашей компании, на сайте подкаста Девопс Дефлопе и этот, а до этого я поддерживал еще сайт подкаста rubynoname. И везде, кроме этого блога, я использовал Middleman. Я видел, как он развивается, как просто к нему что-то дописать, как постоянно появляются классные сторонние библиотеки. А недавно я захотел вести сразу 2 блога на одном сайте, просто по очень разной тематике. А Middleman позволяет делать и это с недавних пор.

Перевести блог с Octopress было не так-то просто. Вначале я попытался адаптировать верстку отткуда, но превратить ликвид (или какой там у них язык шаблонов) в haml оказалось делом сложным. Поэтому я взял готовый html сайт и превратил его в шаблоны для middleman. Заняло это один вечер.

Этот блог теперь ведется в мидлмэне, это первая запись в “новом” блоге. Исходники можно посмотреть здесь.

Хочу акцентировать внимание на следующих гемах, расширяющих middleman:

  • middleman-blog — этот гем позволяет превратить мидлмэн в блог-платформу;
  • middleman-syntax — этот гем реализует подсветку синтаксиса для всех популярных языков.

Если вам нужен статический сайт или блог, то я настоятельно рекомендую взглянуть на Middleman.

Итоги года: подкасты, мастер-классы и митап

| Комментарии

RubyNoName подкаст нашел постоянных новых ведущих — это Кирилл Шатров и Андрей Дерябин. Они уже выпустили первый выпуск, а также обновили страницу о подкасте, на которой вы можете узнать о них немного больше.

Пока мой коллега Никита Борзых отдыхал в Париже, я записал интервью с Локомотивом DevOps Движения России Александром Титовым для нашего нового подкаста Девопс Дефлопе.

Мы организовали очередную встречу DevOps митапа в Яндексе, она будет бесплатная, пройдет 25 января в офисе Яндекса на улице Льва Толстого. Если вам интересно узнать Chef, Docker и другие инструменты, а также увидеть, как живут инженеры в Яндексе — приходите на митап.

В 2013 году в разных составах я провел 4 мастер-класса по DevOps. Два мастер-класса прошли в рамках Брейнвошинга, один в рамках конференции HighLoad, а еще один был закрытым для нашего клиента. Эта работа заставила меня переварить огромный пласт новой информации по Шефу, так что теперь у меня есть ответы на многие вопросы по этому инструменту. Следующий открытый мастер-класс мы планируем провести в апреле.

Я стал меньше писать в этом блоге по разным причинам, одна из которых — я публикую статьи на Хабре в блоге нашей компании «Экспресс 42». И дублировать их сюда не совсем корректно по отношению к Хабру. Думаю, я буду давать в этом блоге краткие анонсы на статьи оттуда.

Желаю вам в 2014 году яркой и интересной инженерной жизни!