Не уверен, рассказывал я об этом, или нет, но вот эти любимые некоторыми товарищами строгое доказательство корректности программ/алгоритмов, Agda, зависимые типы и так далее видится мне довольно бесполезной затеей. А также я давно перестал внимать рассуждениям таких же товарищей в стиле «MongoDB плохая база данных, потому что читай Афира» или «Ай-яй-яй, в Cassandra таймстэмпы вместо CRDT». Далее я постараюсь объяснить, почему так. А вы, как обычно, прочитаете по диагонали, выдерите слова из контекста и напишет в комментариях, что я ничего не понимаю :)
В этой заметке я опишу реализацию простого REST API для телефонной книги, созданной в прошлый раз. Должен сразу оговориться, что интерфейс к базе данных был изменен. Во-первых, прошлая реализация была направлена скорее на демонстрацию возможностей пакета database/sql, чем на решение задачи, а во-вторых, она была подвержена SQL-инъекциям.
Находки в сети за май 2015
1 июня 2015
В этом выпуске: как написать веб-чатик с использованием самых молодежных технологий, бесплатные облачные хостинги, много ссылок про OpenGL и игрушки, а также лучшая в мире MMO. Предыдущие выпуски: апрель 2015, март 2015, февраль 2015, январь 2015.
Фреймворки бывают разные. Если, например, мы рассмотрим веб-фреймворки, то можно легко заметить их разделение на две большие группы — легковесные фреймворки (например, Scotty, Cowboy, Finagle) и тяжеловесные (Yesod, Play, Catalyst). Первые по сути предлагают собой встраиваемые веб-серверы, возможно, с поддержкой вебсокетов. Во вторых поверх всего этого еще накручена валидация форм, конфиги, i18n, ORM, и так далее. Оборачиваясь назад, я понимаю, что тяжеловесные фреймворки меня всегда чем-то беспокоили, но я не мог четко сформулировать, чем именно. Так было до недавнего времени.
Ранее мы уже выясняли, что C++ никогда не умрет, и знать низкоуровневые вещи приходится, даже если фултайм пишешь на Scala. Поэтому я решил уделять некоторое время пописыванию небольших программок на C/C++. Тем более, что с тех пор, когда я активно этим делом увлекался, прошло уже лет семь-восемь и многое сильно изменилось. Так, например, в стандартной библиотеке C++ появились регулярные выражения, пример работы с которыми и приводится в этом посте.
Одиннадцатый десяток прочитанных книг и журналов
20 мая 2015
Успешно ассимилировал очередную пачку литературы. В этот раз мой выбор пал на подозрительно большое количество книг о всяких там Cassandra, Kafka и прочих Couchbase’ах, а также парочку книг о современном С++. Другие мои рецензии на прочитанные книги вы найдете здесь: десятый десяток, девятый десяток, восьмой десяток, седьмой десяток.
Простейший REST-cервис на Scala и Finagle
18 мая 2015
Согласно официальному описанию, Finagle — это расширяемая RPC система для JVM, используемая для построения «сильно многопоточных» (high-concurrent, что бы это ни значило) сервисов. Finagle изначально был создан ребятами из Twitter, но сейчас успешно применяется и в Foursquare, Pinterest, SoundCloud, Tumblr, а также ряде других компаний. В этой заметке мы познакомимся с основами использования Finagle, создав с его помощью очень простой REST-сервис.
Почему сложно сделать правильное кэширование
13 мая 2015
Вы, наверняка, знаете, как это бывает. Ой, у нас тут такие тяжелые вычисления / так долго тянутся данные из базы. А давайте просто прикрутим кэшик. Что может пойти не так? Так вот, опыт показывает, что пойти не так может очень и очень многое.
Пожалуй, основной областью применения Go на сегодня является написание серверных приложений. А их трудно представить в отрыве от какой-нибудь базы данных. В этой заметке я опишу создание простой телефонной книги с интерфейсом командной строки и PostgeSQL в качестве хранилища.
Клиенты нередко приходят в наш сервер сайд или вебчик через какие-то прокси, Nginx, HAProxy, Elastic Load Balancer и другие. Прокси эти очень полезны, так как обеспечивают сжатие и шифрование трафика, балансировку нагрузки и так далее. Проблема однако заключается в том, что прокси скрывают настоящий IP пользователя, из-за чего становится невозможно определить, например, из какой страны он пришел, и соответственно, интерфейс на каком языке ему отобразить. В случае с HTTP эта проблема давно решена путем проставления заголовков с IP пользователя. Но что делать при использовании других протоколов, вебсокетов там или просто чего-то самописного поверх TCP? Вот для решения именно этой проблемы разработчиками HAProxy и был придуман proxy protocol.