Прошло некоторое время с тех пор, как я последний раз писал в этом блоге что-то про Haskell. И вот, мне стало интересно, что успело измениться в мире этого языка. Изменилось, насколько я понимаю, не так уж и много, но вот вместо Cabal для сборки своих проектов теперь все используют какой-то Stack. Давайте же попробуем разобраться, что это за Stack такой.
Ранее в заметке Делаем метрики и мониторинг для Akka при помощи Kamon мы уже познакомились с некоторыми возможностями Kamon. Правда, нельзя сказать, что возможности эти были особо впечатляющими, так как метрики можно вполне успешно писать и безо всякого Kamon. Сегодня же мы познакомимся с некоторыми другими средствами, предоставляемыми этой несколько спорной, но определенно очень мощной библиотекой.
Про DI и пользу от него сказано уже немало. Если простыми словами, то идея сводится к следующему. В ряде случаев вместо конкретной реализации того или иного компонента в коде используется только интерфейс. Конкретная же реализация передается явно через конструкторы классов, паттерн service locator, cake pattern, и так далее. Таким образом можно с легкостью мокать классы (вряд ли вы хотите слать настоящие e-mail при прогоне интеграционных тестов), или, например, при помощи файла конфигурации определять, в какой из трех поддерживаемых РСУБД хранить данные. В этой заметке мы рассмотрим, как добиться всего названного в Scala, воспользовавшись библиотекой SubCut. Также мы выясним, почему то же самое, по всей видимости, очень трудно проделать в некоторых других языках.
Задача определения города и страны по IP-адресу встречается довольно часто. Когда пользователь заходит на сайт, желательно сразу показать ему интерфейс на том языке, который пользователь с наибольшей вероятностью понимает. А зная приблизительные координаты пользователя, можно перенаправить его запросы на ближайший сервер, уменьшив тем самым время ответа. В этой небольшой заметке мы посмотрим, как эта задача может быть решена на Scala или любом другом JVM-языке.
Прямо скажем, использование Scala в качестве языка для написания скриптов — довольно сомнительная идея. Язык действительно можно использовать таким образом. Но проблема заключается в том, что скрипты довольно долго стартуют. На моей машине время запуска одного скрипта на Scala составляет около 4-5 секунд. На всяких же там ультрабуках это время еще больше.
В холиварах на тему Erlang/OTP против Scala/Akka сторонники Erlang часто используют аргумент, что дескать в Akka нет интроспекции. Имеется в виду, что нельзя получить текущее состояние актора, нет аналога etop или Observer, и вот это все. Это правда, сама по себе Akka таких инструментов не предоставляет. Но, оказывается, на практике их можно очень просто реализовать своими силами.
Thrift — это такая штука для сериализации данных. Вы описываете схему данных в специальном формате. Из этого описания генерируются классы. Эти классы легко сериализуются и десериализуются. При этом схему можно изменять (например, добавлять-удалять поля в классах) так, что данные, сериализованные по старой схеме, будут успешно десериализованы по новой. Одну и ту же схему можно использовать в проектах на разных языках, и они будут успешно друг с другом взаимодействовать. Плюс к этому еще накручена возможность объявлять исключения и генерировать код для RPC. В этой заметке мы разберемся, как работать с Thrift на языке Scala.
Akka HTTP — это такая штука для написания своих веб-сервисов и хождения по HTTP в чужие, являющаяся преемником популярного веб-фреймворка Spray. Сегодня с помощью Akka HTTP мы напишем пару простых примеров клиентского и серверного кода. Поскольку писать телефонные книги уже как-то поднадоело (раз, два), примеры эти будут работать с сервисом plivo.com. Данный сервис позволяет звонить на телефоны, слать SMS и делать прочие подобного рода вещи.
Сегодня мы рассмотрим простой пример организации pubsub поверх RabbitMQ. Как уже многократно отмечалось в предыдущих заметках, если вашим бэкендам нужно между собой как-то общаться, желательно взять готовую шину, а не писать по сути свою с нуля на каком-нибудь Akka Cluster. Если только, конечно, вы не пишите свой собственный RabbitMQ или там Spark.
Не так давно мы с вами поднимали связку из Graphite, StatsD и CollectD. Сегодня же мы посмотрим, как писать какие-нибудь метрики во все это хозяйство из программы на Scala (или Java, разницы почти никакой). Также будет рассмотрена пара несложных приемов, которые вы можете найти полезными.