Спешу поделиться рецензиями на очередные десять прочитанных мною книг. На сей раз многие книги оказались посвящены внутреннему устройству *nix систем, почему-то главным образом — FreeBSD. Также некоторые книги были об алгоритмах (сжатия, lock free), базах данных, и на другие темы. Предыдущие рецензии: четырнадцатый десяток , тринадцатый десяток , двенадцатый десяток , одиннадцатый десяток .
Advanced Programming in the UNIX Environment, 3rd Edition
W. Richard Stevens, Stephen A. Rago
Когда-то давно читал второе издание в русском переводе. Тогда прочитал на одном дыхании. Решил вот перечитать книгу в оригинале, тем более что это уже третье издание.
Вспомнил много интересного. Например, что не все процедуры можно вызывать из обработчика сигнала, зачем нужны группы процессов и сессии, как работают pthreads при вызове fork или приходе сигнала, а также что через UNIX domain sockets процессы могут обмениваться файловыми дескрипторами. В последних двух главах пишется своя небольшая база данных (дисковый бэкенд) на основе хэш-таблиц , а также описывается протокол IPP и как написать свою маленькую замену CUPS.
Книга отличная. Не перестаю удивляться, как можно написать техническую книгу на тысячу страниц, которую будет так легко и приятно читать.
The Art of Multiprocessor Programming
Maurice Herlihy, Nir Shavit
Захотелось разобраться в lock free алгоритмах и структурах данных, а везде вроде как эту книгу рекомендуют.
Книгу нельзя назвать легким чтивом. В начале книги много математических формализмов и доказательств теорем, притом в контексте задач, явно имеющих посредственное отношение к практике. Эта часть довольно сложна для восприятия. Но потом начинается практика и там все довольно хорошо и понятно, с примерами совершенно реального кода на Java SE. И тут уже от чтения просто не оторваться.
К своему удивлению обнаружил интересную связь lock free и распределенных алгоритмов. И там и там используется ведение логов, возникает проблема консенсуса, и вот это все. Также оказалось, что многие lock free алгоритмы нуждаются в автоматической сборке мусора или ее подобии, что внезапно делает JVM очень приятной средой для использования этих алгоритмов. Не менее кстати приходится строго определенная и одинаковая на всех платформах memory model.
Сжатие данных, изображений и звука
Дэвид Сэломон
Решил освежить свои знания алгоритмов сжатия. Эта книга есть у меня в бумажном виде, когда-то давно читал ее выборочно. Решил вот перечитать от начала до конца.
Это перевод книги «Data Compression Methods» известного специалиста по алгоритмам сжатия David Salomon . В отличие от его более объемных книг «Data Compression: The Complete Reference» и «Handbook of Data Compression» (кстати, кто-нибудь знает, зачем нужды две почти одинаковые судя по оглавлению и объему книги одного автора?) данная книга скорее обзорная, не содержит упражнений, и так далее, а глава про сжатие видео так и вовсе всего лишь на пару страниц.
В целом, хорошая, годная книга. Печалит только, что бумажное издание на русском языке имеет очень маленький формат и текст, соответственно, мелковат. Зато бумага и переплет довольно неплохие — после фактических двух прочтений книга не начала разваливаться. Удивительно, но спустя 12 лет после издания книга все еще продается и стоит 1/3 от цены маленького капучино в Старбаксе.
Readings in Database Systems, Fifth Edition
Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker
Это такая небольшая бесплатная книга , в сущности представляющая собой обзор интересных пейперов, посвященных СУБД. Эдакий линкоблог в формате PDF.
Помимо самого списка пейперов из книги можно почерпнуть немало интересного об истории развития СУБД, узнать, чем так интересны колоночные базы данных, в каком направлении по мнению авторов будет двигаться развитие СУБД и систем вроде Spark, их наблюдения об имевшем место быть хайпе вокруг MapReduce, который в настоящее время уже эффективно загнулся, о проблемах понимания и правильного использования уровней изоляциии, и к чему они привели в случае с Flexcoin , и подобного рода вещах.
Книга просто великолепная, пять из пяти. Теперь осталось всего лишь прочитать все перечисленные в ней пейперы.
Profiling and Debugging the FreeBSD Kernel
Ray Kinsella
Небольшой пейпер [PDF] одного из сотрудников Intel. Пейпер рассказывает ровно о том, что написано в названии — как профилировать и отлаживать ядро FreeBSD.
Из этого пейпера вы узнаете, как собрать ядро FreeBSD со своими флагами, как подцепиться к нему отладчиком , а также как пользоваться такими инструментами, как Kernel Trace, Kgmon и pmcstat . Также в пейпере много интересных ссылок. Например, я с удовольствием прочитал статью Writing a kernel module for FreeBSD .
Отличное чтиво, рекомендую!
FreeBSD Developers’ Handbook
Бесплатная книга, доступная на freebsd.org . В Chromium открываем в виде «вся книга одной HTML-страницой», жмем «распечатать в PDF», полученный PDF заливаем в планшет.
Начало посвящено в основном тому, чем компилируемые языки отличаются от интерпретируемых, как настроить Emacs, как пользоваться make, что такое сокеты, ну и подобным вещам. Мне лично было не очень интересно это читать. Зато очень понравилась часть III, про ядро FreeBSD и его отладку. Также в книге внезапно нашлась информация о программировании на ассемблере с использованием nasm.
В целом эту книгу я скорее одобряю, чем осуждаю.
FreeBSD Device Drivers: A Guide for the Intrepid
Joseph Kong
Книга о том, как писать драйверы для FreeBSD. С самых первых страниц все строго по делу, никакой воды. Все написано очень простым и понятным языком. Из книги вы узнаете, как создавать свои блочные устройства, как работать с USB и сетевым стеком, какие в ядре есть примитивы синхронизации, и много других интересных вещей.
Книга огонь. Всячески рекомендую ее даже тем, кто не очень-то хочет писать драйверы, но интересуется, как это хотя бы примерно делается в мире *nix систем.
PostgreSQL Server Programming
Hannu Krosing, Kirk Roybal, Jim Mlodgenski
Очень советовал @postgresmen в подкасте SDCast #33 , вот я и решил ознакомиться. Правда, потом я узнал, что уже есть второе издание книги, но было поздно. Впрочем, первое издание вполне себе актуально, так что второе, по-видимому, не должно сильно от него отличаться.
Из книги я узнал, например, что для PL/pgSQL есть прямо настоящий отладчик. Еще вспомнил про HOT . Когда-то давно про него знал, но уже успел забыть. Кроме того, в книге объясняется PL/Python и что он не только выглядит не как COBOL, но и позволяет прямо из PostgreSQL ходить по сети, писать в файлы, и так далее. Также рассматривается горизонтальное масштабирование с использованием PL/Proxy .
Плюс к этому рассматривается написание расширений для PostgreSQL , написание хранимых процедур на языке С и использование PGXN (местный аналог CPAN ). Объясняется выполнение SQL-запросов из расширений при помощи SPI. Хуки, к сожалению, не объясняются.
Книга читается легко и интересно. Также подходит для использования в качестве настольного справочника. В общем, книжка шикарная, категорически рекомендую.
Proxmox Cookbook
Wasim Ahmed
Proxmox VE — это система для создания собственного IaaS на основе Debian Linux, KVM и LXC (до версии 4.0 вместо LXC использовался OpenVZ ). Почти как Parallels Virtual Automation , только бесплатная (при желании можно заплатить за техподдержку) и open source (AGPL).
В книге помимо прочего описывается настройка bonding, InfiniBand, IPS / IDS Suricata, мониторинг Proxmox при помощи Zabbix и другие интересные темы. Увы, существенная часть книги состоит из описания веб-интерфейса Proxmox и инструкций в стиле «кликните сюда, затем нажмите Далее, в появившимся окошке нажмите ОК».
В общем и целом книга, бесспорно, классная. Просто она является скорее настольным справочником, чем книгой для чтения. В крайнем случае можно прочитать книгу по-диагонали за один вечер, просто чтобы составить общие впечатления о возможностях Proxmox. Но вдумчиво читать ее от корки до корки особого смысла не имеет.
OpenCL Programming by Example
Ravishekhar Banger, Koushik Bhattacharyya
Прямо неплохая книжка по OpenCL. Напоминаю, что это такой кроссплатформенный API для программирования на GPU. API этот, как оказалось, сравнительно простой и приятный.
Благодаря этой книге я стал лучше понимать, как вообще внутри устроены GPU. Особенно было интересно посмотреть на местный диалект языка C, имеющий, помимо прочего, поддержку векторных операций. А также на то, как в OpenCL при помощи эвентов производиться синхронизация потоков. Узнал, что для всего этого хозяйства даже существуют отладчики и профайлеры (но только для Windows — открытые технологии такие открытые!) и что Khronos Group предусмотрела возможность взаимодействия OpenCL с OpenGL .
Еще я понял, что вычисления на GPU — это очень-очень специфичная штука. Устройство GPU очень сильно отличается от устройства CPU. Что намного хуже, GPU разных производителей сильно различаются между собой. Оптимизируя программу под один GPU, вы просаживаете производительность на другом. Плюс к этому не всякая программа вот так просто может быть ускорена в 100 раз за счет переноса вычислений на GPU. Как минимум, из-за накладных расходов на передачу данных на/c GPU и компиляцию выполняемого на GPU ядра. А также закона Амдала и того факта, что ускоряемая программа, возможно, и не в CPU вовсе упирается, а, скажем, в память или диск. В общем и целом, это может быть интересно, к примеру, в задачах из области ИИ, где многие расчеты превосходно распараллеливаются , но вряд ли очень применимо в повседневной жизни.
Сама книга мне понравилась. Все просто и по делу, без воды.
Также хочется упомянуть книги, которые у меня не пошли:
- ARM Assembly Language: Fundamentals and Techniques, Second Edition . Дочитал до 79-ой страницы. Понял, что про ассемблер до сих пор ничего не узнал. Закрыл. Слишком много воды;
- Optimizing Software In C++ . Прочитал до 37-ой страницы и забил. Какая-то капитанская фигня на тему что складывать числа и ходить в регистры — дешево, а делить лонги и ходить через указатели в кучу — это дорого;
- Secure Coding in C and C++, 2nd edition . Дочитал до 65-ой страницы, дальше не смог. Тоже какие-то капитанские вещи на тему как не выйти за границу массива. Хотя для студентов, быть может, самое то;
А что интересного вы недавно прочитали или, быть может, планируете скоро прочитать?
Дополнение: Рецензии на прочитанные книги: шестнадцатый десяток