В этот раз я сосредоточил свое внимание на книгах, посвященных Cassandra и Couchbase, так как мне это сейчас нужно по работе. Но также не обошлось без книг и на другие интересные темы. Предыдущие мои рецензии на прочитанные книги вы найдете здесь: одиннадцатый десяток , десятый десяток , девятый десяток , восьмой десяток .
ScalaCheck: The Definitive Guide
Rickard Nilsson
Книга за авторством Rickard Nilsson, самого создателя ScalaCheck . Книга небольшая, относительно свежая. Представляет собой своего рода быстрое введение в ScalaCheck. Рассказывается, как писать свои генераторы, свои shrink’и, а также, пожалуй, самое главное — как вообще начать работать с property-based тестами, при условии, что не всегда понятно, где в приложении есть какие-то property. Также в книге вы найдете описание всех-всех-всех комбинаторов в ScalaCheck, типа exists, classify и всех остальных, а также всех генераторов типа posNum, alphaChar и подобных.
Книга очень хорошая, на твердую четверку.
Pro Couchbase Server
David Ostrovsky, Yaniv Rodenski
Начал было читать Couchbase Server 3.0 Documentation , но осилил только первые 80 страниц из 400, суховата дока. И я заглянул вперед, там еще полное описание REST API и подобные вещи, скучно. Вот книга пошла куда лучше.
Если «Getting Started with Couchbase Server», о которой я писал в одиннадцатом десятке , представляет собой такое лайтовое введение, типа о чем вообще речь, то «Pro Couchbase Server» — это подробнейшая (и более свежая) книга про Couchbase , описывающая репликацию между ДЦ (XDCR), Couchbase Lite (для мобильных устройств), интеграцию Couchbase с ElasticSearch и многие другие интереснейшие моменты. Все это на примере написания собственной анти-социальной сети RantR. Расстроило, что CAP-теорема в книге объясняется неправильно. Вообще, правильного объяснения в книгах я пока ни разу не видел. Думаю, это уже какая-то традиция.
Также книга описывает некоторые тонкости поведения системы в ряде граничных случаев. Например, что будет, если записать данные по ключу, и сервер упадет, не успев среплицировать данные. Очень подробно описана работа вьюх и почему использовать их нужно с крайней осторожностью. Описывается язык запросов N1QL (произносится «никель»), своего рода SQL для Couchbase. Они тут даже объясняют, как сделать распределенные транзакции! Из других интересных тем хочется отметить мониторинг, оптимизацию, резервное копирование с помощью утилиты cbbackup и восстановление из бэкапа с помощью cbrestore, а также поднятие кластера в Amazon и Microsoft Azure.
Книга огонь, пять из пяти.
Beginning Apache Cassandra Development
Vivek Mishra
Относительно свежая книжка про Cassandra , 2014 год. CAP-теорема, как всегда, объясняется неправильно 🙁
Рассматривается внутреннее устройство Cassandra, поднятие кластера в AWS, прикручивание Hadoop, Hive, Pig, Sqoop и Titan.
Изложение показалось немного сумбурным, если честно. Например, в книге говорится, что при использовании в запросе вторичных индексов всегда будут посланы сообщения всем нодам кластера. Но при этом, если я использую вторичные индексы, а также укажу в запросе partition key, вроде как нет необходимости слать запросы всем нодам. Но этот случай в книге не описан. Говорится про memtable и sstable, но непонятно, если я постоянно читаю какие-то «горячие» данные, будут ли они кэшироваться в памяти или в memtable что-то попадает только при записи? Удивило, что половина книги внезапно посвящена MapReduce и графовым базам данных. И почему автор отмечает, что работа с Cassandra по Thrift депрекейтед, но сам продолжает активно пользоваться cassandra-cli?
Я немного разочарован, так как книга оказалась как бы больше вширь. Типа, смотрите как много всего классного можно сделать с Cassandra. А хотелось бы больше вглубь. Если вам тоже, то официальная документация хоть и посуше будет, но намного информативнее.
В целом книга нормальная, на твердую четверку. Но могло бы быть пять, если бы название отражало содержание, а повествование было бы менее скомканным.
Data Structures and Algorithms in Java, 6th Edition
Michael Goodrich, Roberto Tamassia, Michael Goldwasser
Хотелось освежить свои знания алгоритмов и структур данных. Книга Алгоритмы: построение и анализ как-то не пошла, тяжеловата она. Но зато «Data Structures and Algorithms in Java» пошла просто отлично. Примерно 100 из 700 страниц книги посвящено быстрому введению в язык Java и ООП. Есть простое и понятное объяснение нотаций «о большое», «омега большое», «тета большое». «О малое» и «омега малые» не рассматриваются. Также книга описывает способы доказательства теорем — от противного, методом математической индукции, и подобные. Все это простым и понятным языком, с наглядными картинками . В конце каждой главы множество упражнений, а также интересные исторические и прочие справки. Читается на одном дыхании.
По сути, тут с нуля пишется часть стандартной библиотеки языка, отвечающая за коллекции. Списки, очереди, стеки, итераторы, хэш-таблицы , splay trees — вот это все. Получается довольно просто и красиво. B-деревья, к моему глубокому разочарованию, как-то совсем поверхностно рассматриваются. Немного не в тему описывается сжатие по Хаффману, других алгоритмов сжатия в книге нет. Еще нет алгоритмов шифрования, работы с большими числами , алгоритмов ИИ . Хотя, казалось бы, при таком объеме книги могли бы уместить. Можно было без кода на Java, только псевдокод. Мне кажется, книга была бы лучше.
В целом книга очень годная, на твердую пятерку. То, что нужно, если хочется вспомнить, например, что такое куча и как она помогает получить priority queue. Также имеется аналогичная книга с кодом на C++.
Scala Cookbook: Recipes for Object-Oriented and Functional Programming
Alvin Alexander
Книга вышла в августе 2013, содержит более 700 страниц. Весь код на Scala 2.10. Несмотря на все это, какой-то дико устаревшей информации в книге замечено не было.
Книга читается очень легко. Больше всего пользы от нее будет тем, кто начал работать со Scala недавно. Но если вы уже давно пишете код на Scala, то тоже имеете шанс почерпнуть для себя что-то новое или что-то, что успело забыться. Лично я уже напрочь забыл, что в Scala есть не только интерполятор строк s, но и интерполяторы raw и f. Например, последний делает то же самое, что и s, только с форматированием: f "temp = ${1.0 / 7}%.4f"
. Еще я не знал или уже забыл, что в Scala есть break и continue , притом реализованные в виде пакета, а не как часть языка. Еще узнал про scala-arm и как написать метод using . Также в книге объясняются футуры, Akka, работа с JSON, Play Framework и базами данных, в том числе есть про Slick и MongoDB.
Книга отличная, ставлю ей пять из пяти.
Learning Spark: Lightning-Fast Big Data Analysis
Holden Karau, Andy Konwinski, Patrick Wendell, Matei Zaharia
Много слышал от @sbozhko про Storm и Spark, но вот сесть и самому нормально разобраться возможности не предоставлялось. Решил понять хотя бы, есть ли у нас в проекте задачи, для которых Spark в принципе может потребоваться. На Storm смотреть не стал, так как ребята из Twitter говорят, что он чем-то там плох и новый Heron прямо вообще всем лучше .
В двух словах идея такая: «почти как MapReduce, только преимущественно в памяти, без постоянного сохранения на диск, как в Hadoop». У вас есть какой-то абстрактный источник данных — файл на диске, база данных, и так далее. Вы берете один или несколько источников, и делаете с ними map, flatMap, filter, union, distinct и другие операции. Результаты выполнения этих операций (RDD, Resilient Distributed Dataset) также можно комбинировать. Потом вы берете и сливаете выходной поток в какой-то абстрактный консьюмер. Все это лениво, то есть, будет выполнено только то, что нужно для получения результата на выходе. Заливаете Java-класс с такими инструкциями в Spark-кластер, и он сам параллельно все считает.
Поверх этого еще накручен Spark SQL, позволяющий писать запросы на обычном SQL, а также Spark Streaming, который позволяет писать приложения, которые постоянно крутятся и что-то там считают, без заливки каких-либо классов. Кроме того, в Spark есть куча готовых алгоритмов машинного обучения, например, support vector machines, decision trees и прочие. Вам нужны только примеры данных и функция, которая преобразует их в какие-то вектора. Потом вы говорите «обучить» и получаете, скажем, классификатор, который говорит, является ли письмо спамом или купит ли посеитель определенный товар. Очень круто!
Мне книга очень понравилась, пять из пяти.
RabbitMQ Essentials
David Dossot
Книга хорошая. Есть про установку и настройку RabbitMQ , все о деталях работы с ним, много почти боевого кода на Java. Для тех, кто раньше про RabbitMQ только что-то там слышал, книга будет просто огонь. Если же вы уже читали «RabbitMQ Cookbook», то «RabbitMQ Essentials», скорее всего, покажется скучноватой. А вот если до этого вы читали только негодную книгу «RabbitMQ in Action», то прочитать «RabbitMQ Essentials» будет полезно.
Cassandra Data Modeling and Analysis
C.Y. Kan
У меня есть очень серьезные подозрения, что ребята из Apress и Packt Publishing каким-то образом умудрились перепутать названия у книг «Cassandra Data Modeling and Analysis» и «Beginning Apache Cassandra Development». Потому что «Cassandra Data Modeling and Analysis» содержит отличное введение в Cassandra, а «Beginning Apache Cassandra Development» почему-то рассказывает про моделирование и анализ данных.
Так вот, книга — пожалуй, лучшее введение в Cassandra, которое я видел. Книга очень структурированная, все просто и строго по делу. Много почти настоящего, боевого кода на Python. То, что нужно, чтобы быстро въехать. Очень жаль, что она мне сразу не попалась. При чем тут анализ я так и не смог понять.
Couchbase Essentials
John Zablocki
Свежая (2015 год) книжка по Couchbase. Помимо прочего, содержит подробное объяснение индексов/вьюх и N1QL. Все это на примере написания TODO-приложения. В качестве языка программирования почему-то был выбран C#. Если честно, я первый раз вижу такое в книгах, нацеленных на бэкенд разработчиков. Тем не менее, код вполне понятен и читаем. Возможно, даже более читаем, чем если бы он был на Java. Нормальная книжка, на твердую четверку.
SBT in Action: The simple Scala build tool
Josh Suereth, Matthew Farwell
В этой книге преимущественно описываются базовые вещи — структура проекта, зависимости, запуск тестов, multi project, вот это все. Также нас учат добавлять свои tasks и settings в SBT. Притом так, чтобы у команд в консоли был автокомплит при нажатии Tab, и не просто какой-то автокомплит, а еще и осмысленный. Потом объяснятся, как все это хозяйство завернуть в плагин, которым потом смогут воспользоваться другие люди. Я лично еще открыл для себя просмотр отчетов в target/resolution-cache/reports через Firefox. Однако не уверен, насколько это пригодится.
Книга, бесспорно, на пятерку. Но я бы сказал, что читать ее нужно только тем, кто полон решимости начать писать плагины для SBT. Остальным она не пригодится, так как все, что им нужно знать об использовании SBT, отлично гуглится. Либо еще хуже — книга пригодится, и в результате будет получен код, который в команде сможет поддерживать только один человек.
Еще из интересного чтива могу посоветовать документацию по языку Nim . Но ее я читал выборочно, поэтому в этот обзор она не попала как отдельная сущность.
А что интересного вы читали в последнее время?
Дополнение: Тринадцатый десяток прочитанных книг и журналов