Ранее мы выяснили, как на Haskell работать с базами данных, писать REST API, генерировать и читать JSON-стримы, работать с конфигами и писать логи. Для полного счастья осталось разве что научится ходить в Graphite. После этого можно спокойно протаскивать Haskell в продакшн, пописывая на нем небольшие RESTful сервисы. Так чего же мы ждем?

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

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

Помните, мы когда-то писали телефонную книгу на Haskell и прикручивали к ней веб-интерфейс? У этой телефонной книги есть существенный недостаток. Дело в том, что соединение с базой данных устанавливается только один раз, при запуске приложения. Если во время работы программы соединение порвется, для его восстановления телефонную книгу придется перезапустить. Кроме того, наличие всего лишь одного соединения делает параллельную обработку нескольких запросов в лучшем случае невозможным, а в худшем — чреватой ошибками. Сегодня мы этот ужасный недостаток устраним!

Темы второго выпуска: отвечаем на комментарии к пилотному выпуску, что не так с нынешними интернетами, зачем программисту на Java учить Erlang или Haskell и что может предложить Idris вместо трансформаторов монад. Первый, пилотный, выпуск можно послушать здесь.

В этом выпуске: как убедить свое руководство переписать все на Haskell, пишем свою операционную систему, не пускаем на сайт пользователей, сидящих через Tor, и не только. Предыдущие выпуски: декабрь 2013, ноябрь 2013, октябрь 2013, сентябрь 2013.

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

Если вкратце, микросервисная архитектура (Micro Service Architecture, MSA), это когда ваше приложение представляет собой много-много небольших (буквально несколько сотен строк кода) сервисов, взаимодействующих между собой путем обмена сообщениями. Это могут быть сообщения Erlang‘а, Cloud Haskell‘я, Akka, или же REST API, Protobuf, Thrift, MessagePack и так далее. Давайте же попытаемся понять, в каких задачах может быть целесообразно использовать такой подход, чем он хорош, и, конечно же, чем он плох.

Представляем вашему вниманию пилотный выпуск нового подкаста EaxCast, подкаста о программировании, информационных технологиях и смежных темах. Темы выпуска: зачем было делать еще один подкаст, вебинар о внутреннем устройстве шедулера Erlang’а от ESL, mekao и нужен ли Erlang’у ORM, готовится русский перевод LYSE.

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