Блогомашина

September 13, 2016

Как говаривал Будда есть две сложные вещи: начать что-то делать и продолжить это делать регулярно. Так и с блогом, мне нравится его писать, нравится результат, но как сделать так чтобы не забросить?

Расскажу как мотивирую себя писать дальше. Вообще я решил писать блог ровно год, по посту каждый будний день, а потом подумать, что делать дальше (делаем ставки, продержусь или нет :smile:). У меня нет силы воли в смысле "буду вставать в шесть утра, обливаться холодной водой, кросс, потом два поста в блог". Нет. Скорее накануне такой здоровой новой жизни я приму пивка, будет повод обязательно какой-нибудь хороший, и проснусь часиков в одиннадцать. Вместо силы воли - я стараюсь создать правильные условия, которые помогают двигаться в желаемом направлении.

Каждый день, после работы, делаю несколько простых вещей:

  • смотрю комментарии и отвечаю если есть
  • вычитываю посты в очереди
  • пишу два новых поста

В тудуисте у меня есть проект с идеями для блога, который я постоянно пополняю. Потом спец-скриптом беру случайную идею и либо пишу пост по ней, либо выкидываю из списка. Так как идеи - штуки ценные, то стараюсь все-таки писать. Каждый новый пост генерируется с параметром read = 3, что означает, что его нужно вычитать минимум три раза. При каждой вычитке я уменьшаю цифру на единицу, пока она не станет равной 0. Раз в неделю для всех постов в очереди отрисовываю картинки, сканирую их и раскрашиваю. Все. То есть такой самый настоящий конвейер.

Генри Форд - красавчик! Кстати умные люди в интернете говорят, что "Форд не изобретал конвейер, а впервые организовал поточное производство". Не совсем понимаю в чем разница :smile:, но eсли бы не блог - стал бы я это вообще гуглить?

Виму преданности пост

September 12, 2016

Я серьезно работал всего в двух редакторах: Visual Studio и Vim, причем последние лет 6 - только вим, так как C++ уже давно не занимаюсь. К виму у меня особое отношение, нельзя сказать, что я его люблю или нет, просто по другому уже не могу. Слишком привыкли пальцы к командам, давно уже отлажены конфигурационные файлы и собран набор необходимых плагинов.

https://github.com/avakhov/dotvim - работа с любым новым компьютером начинается с запуска инсталяционного скрипта из ридми-файла, несколько томительных секунд, и я готов к работе (ок-ок, я работаю не только в виме, еще есть криптованный архив с файлом install.sh, копирующим все необходимые дот-файлы и ключи).

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

Вот он мой родной, любимый :heart::

Не очень программист

September 9, 2016

Когда я уходил из системной С++-разработки в веб-разработку на руби, настроение было очень паршивое. Было ощущение будто бы сорвали разом две лычки. К тому времени я прочитал все ключевые книги Страуструпа, Александреску, Мейерса и других уважаемых товарищей, разбирался в шаблонах, умных указателях, паттернах и прочих сложных вещах. Язык руби казался слишком примитивном - на этом же может писать любой школьник!

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

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

Волшебная палочка

September 8, 2016

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

puts "[#{Time.now}] processed: #{count}" if (count += 1) % 100 == 0

где вместо 100 подбираю параметр, при котором строка печатается раз в несколько секунд. Если известно общее количество записей, которые нужно обработать, еще нагляднее будет вывести "#{count} of #{total}".

Соколиный глаз

September 7, 2016

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

Раньше я был суровым серверным разработчиком, с соответствующими представлениями о прекрасном. Первый культурный шок вызвал наш генеральный директор четыре года назад. Он между делом сказал: "о, у скайпа иконка поменялась, была выпуклая, а стала плоская". Я у него спросил: "ты это специально высматриваешь?" Он ответил, что просто в глаза бросилось. "Что за неведомая магия" - подумал я тогда. А теперь сам вижу.

А вы замечаете когда у хрома закладки с прямоугольничков меняются на клинышек? Или кнопка закрытия вкладки была жирненькая, а стала тоненькая? Или шрифт в iOS поменялся?

Любви к руби пост

September 6, 2016

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

Как-то раз парсил страничку нашей внутренней вики и в цикле сделал так:

repos += line.split("|")[8].scan(%r{https://github.com\S*})

Подобные конструкции и гораздо более длинные пишу по несколько штук в день. Божественно.

Мифическая серебряная пуля

September 5, 2016

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

Серебряной пули нет написана в 1986 году, когда мне было 2 года. Мифический человеко-месяц - 1975! Паттерны проектирования разрабатывались с семидисятых годов, хотя изданы только в 1994 (свежачок).

Прожорливый JSON

September 2, 2016

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

Однажды, считая большой отчет, наткнулся на необычайную прожорливость JSON.load на сравнительно небольших данных.

Промоделируем ситуацию (размер занимаемой памяти на вашем компьютере может отличаться, но я проверил на маке и на линуксе). Сгенерируем json-файл:

# => 11 MB
a = {key: [{k: 1, value: "strng"}]*2_000_000}
# => 26 MB
t = JSON.dump(a)
# => 54 MB
File.write("big.json", t)

Теперь его прочитаем:

# => 11 MB
t = File.read("big.json")
# => 57 MB
x = JSON.load(t)
# => 1600 MB

:scream_cat: :scream_cat: :scream_cat: массив, который в руби занимает 15 мегабайт, после восстановления раздувается в 100 раз (при использовании библиотеки oj в 50 раз). Самое противное в этой ситуации, что json на 1 гигабайт сохранить вы сможете, а прочитать уже нет - памяти не хватит. Особенно неприятно об этом узнать после нескольких часов вычислений.

Чтобы обойти эту проблему можно использовать пару Marshal.dump/load, которая работает гораздо быстрее и не занимает лишней памяти. Однако marshal-файл не получится посмотреть глазами, нормально хранить в системе контроля версии или погрепать. Поэтому универсального решения не существует, все зависит от задачи. Просто помните, когда сохраняете большой JSON-файл, а хватит ли вам духа и оперативной памяти, чтобы его прочитать?

Архитектура проводов

September 1, 2016

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

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

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

Такой подход я встречал в больших и страшных C++-приложениях. Такой прием за четыре года разработки Учи.ру мы использовали один раз, но со всей душой. Метод принимает 48 параметров (в виде ключей хэша, но все-таки).

Главное, при использовании архитектуры проводов, важно помнить, что в один прекрасный день придется срезать все провода и проложить их заново (кстати в случае нашего метода-рекордсмена мы как раз этим занимаемся).

Троешники рулят

August 31, 2016

В школе я был многие годы, пожалуй, отличником. К счатью без красного диплома, но все таки в основном были пятерки. В институте в зачетке уже было 90% четверок. И только во взрослой жизни я наконец скатился на тройки.

Для меня троешник - это человек, который специализируется в одном-двух направлениях, а на остальные кладет :nut_and_bolt: :nut_and_bolt: :nut_and_bolt:. Поэтому, в школьных аналогиях, у него за год выходит 2-3 пятерки по его любимым предметам, а остальные тройки. Такой ребенок образцово переходит из класса в класс, как-то там сдает русский язык с биологией и большую часть времени занимается тем, что ему нравится.

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

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

Так жить гораздо приятнее - концентрироваться на интересном и спихивать все остальное, лишь бы отстали. Троешники рулят. Когда я стал троешником, я стал по настоящему счастлив.