Книга: Code the Classics, Vol. 1 (2020)

nil

На Рождественских выходых выдались свободные часы и я прочитал приятную книжечку: Code the Classics, Vol.1, в которой описываются 4 упрощенных клона классических игр (Pong, Centipede, Frogger, Sensible Soccer). К книге прилагается все необходимое для запуска клонов: код, звуки, музыка и картинки. Сами игры написаны на Pygame Zero, предельно упрощенном фреймворке для любительской разработки игр.

Книга оформлена необычно дорого: на толстых цветных страницах показаны скриншоты из оригинальных игр, фото разработчиков, моменты из клонированных игр, даже сам код. Книга несколько неожиданно включает в себя не только код, но даже все картинки для игр. Странное решение! Тем более что все материалы выложены на Github.

Реального текста в книге совсем немного, буквально по нескольку страниц на оригинальную игру плюс пояснения к коду клонов. Интересней всего было читать историю разработки оригинальных игр, ну и разбирать код клонов.

Развлечения ради я портировал код клона Pong с Python/Pygame (300–400 строк) на чистый C/SDL (600 строк) и, надо сказать, удовольствие получил.

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

Книга: Multiplayer Game Programming: Architecting Networked Games (2015)

nil

Перед новым годом я неожиданно для себя самого закончил все личные микропроектики и дочитал последнюю из запланированных на уходящий год книг, и руки дошли до Multiplayer Game Programming за авторством Джошуа Глейзера и Санджая Мархава (англ. Joshua Glazer и Sanjay Madhav).

Заходят авторы издалека, начиная с устройства сетей в целом, потом — стека TCP/IP, в результате представляя код оберток вокруг интерфейсов TCP- и UDP-сокетов.

После сетей объясняются центральные задачи движков многопользовательских игр: синхронизация состояния игрового мира, и следующие из нее топология сетей (p2p или клиент-серверная архитектура) сериализация объектов, преодоление задержек и так далее. По ходу дела разрабатываемая библиотека начинает использоваться в коде демонстрационных игр.

Сам для себя из книги я вынес два основных архитектурных решения для синхронизации состояния мира: распространение команд и распространение положения игровых сущностей.

  1. В распространении команд состояние синхронизируется передачей на все машины команд игроков, после чего каждая машина проигрывает результаты выполнения команд у себя. Подход этот используется обычно в стратегиях в реальном времени (real-time strategies), когда юнитов слишком много, чтобы можно было синхронизировать все их перемещения.
  2. Если юнитов немного, и каждому соответствует единственный игрок, то проще состояние распространять в сети для каждого из активных юнитов-игроков. Подход популяризован играми компании idSoftware и до сих считается стандартом для шутеров от первого лица.

Баланс теории и практики, как мне кажется, соблюдается; пускай финальные главы, обсуждающие большие фреймворки, играют роль наполнителя.

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

Впрочем, лично мне было скучновато в очередной раз читать про сокеты и сети, тем более что по-настоящему тема здесь не раскрывается; но любопытно было ознакомиться с типовыми подходами в играх.

Книга: Fractal Programming in C (1989)

Несколько месяцев назад я прочитал знаменитую The Go Programming Language, в которой отдельные возможности языка Go демонстрировались на примере вычисления фракталов. В отличие от (в хорошем смысле) скучноватого Go тема фракталов меня зацепила. В результате нашлась на Амазоне случайная книгу о программировании фракталов на языке C (Fractal Programming in C) 1989-го года и прочиталась за 2–3 недели.

Книга оказалась строго прикладной, автор не вдается в математику и делает акцент именно на предельно быстром получении классических фракталоподобных структур: множество Мандельброта, треугольника Серпинского, кривых Пеано…

Код в книге старомодный и не без ошибок, но все пределах разумного: модернизация каждого из примеров заняла не больше 30–60 минут, плюс написал простенькую библиотечку для формирования файлов Netpbm.

Результаты экспериментов выложил на Github, если будет время и желание — еще чего туда из фракталов добавлю.

Статья: The Rules for Data Processing Pipeline Builders

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

Книга: Effective C: An Introduction to Professional C Programming

nil

Сменилось уже несколько поколений языков, стремившихся заменить собой C: появился, завоевал популярность и стал ее терять C++; корпоративная разработка ушла на сторону Java и C#; Go захватил умы поколения микросервисов; D, Rust, Zig и прочие прицелились на низкоуровневую разработку.

Тем не менее, C жив. И в последнюю пару лет случился своего рода Ренессанс, когда одна за другой вышли интересные книги продвинутого уровня от известных специалистов.

В частности, я особенно ждал выхода книги Effective C за авторством Роберта Сикорда (англ. Robert C. Seacord), активного участника языкового Комитета, автора стандарта по безопасному программированию на C/С++ (CERT C Coding Standard) и пользователя Emacs.

И книга не подвела!

Быстро бросается в глаза, насколько автор бережно обращается с терминологией. Например, никогда не путаются неопределенное (undefined), неуказанное (unspecified) и специфичное для реализаций (implementation-specific) или локалей (locale-specific) поведения. Для всех фундаментальных определений приводятся ссылки на стандарт или разъясняющие статьи.

Обсуждаются сложные, неочевидные или новые особенности языка:

  • выравнивание по памяти (ключевое слово _Alignas),
  • повышение целочисленных значений (integer promotion),
  • явные и неявные преобразования,
  • порядок вычисления выражений,
  • гибкие члены массивов (flexible array members),
  • массивы изменяемой длины (variable-length arrays),
  • катастрофа с кодированием Unicode (особенно wchart),
  • популярные приемы работы с макросами,
  • и т. д., и т. п.

По каждой из тем автор приводит практичные примеры и упоминает типичные программистские ошибки. Язык изложения и точный, и читаемый, что редко не встречается в текстах языковых бюрократов (прости, Комитет).

Кому-то может не понравиться, что в книги почти нет упражнений. Лично мне они и не были нужны, все же большую часть вопросы уже разбирал, кому-то практики будет не хватать.

В любом случае это лучшая на данный момент вторая/третья книга для работающих с языком специалистов, которая поможет, например, в чтении Стандарта.

Сентябрь-ноябрь 2020 в ретроспективе

После и без того неспокойного года осень показала, что 2020-ый приберег всем нам еще пару сюрпризов. Бесконечные карантины, организационные и технические революции на работе…

Читать далее…

Электронная читалка мечты

Onyx Boox Note 2

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

У меня уже был похожий агрегат — Amazon Paperwhite. Но в свое время быстро выяснилось, что на семи дюймах крайне неудобно читать техническую литературу и научные публикации, да и работа с неродными форматами у амазоновского аппарата, прямо скажем, ограниченная.

И вот год-два назад стали появляться альтернативные читалки на электронных чернилах с большой диагональю экрана: Sony, Remarkable, разные модели от Onyx Boox и других китайских производителей. Помимо, собственно, отображения документов они позволяют оставлять стилусом на документах заметки.

Последнее поколение читалок от Onyx так вообще включает в себя модели с диагональю до 13 дюймов, то есть размером с лист формата А4. Посомневавшись и поломавшись немного я все же купил недешевый Onyx Boox Note 2.

И не разочаровался! Писать на документах действительно можно, читать их же на большом экране удобно, батарея живет неделями, глаза не устают. Нирвана!

Книга: The Go Programming Language

Закончил, наконец, чтение и решение заданий из книги The Go Programming Language и, соответственно, с языком программирования Go.

Название и один из авторов — тот самый Брайан Керниган — очевидным образом отсылают к главной книге по языку С (The C Programming Language).

Первая глава быстро знакомит с Go; последущие 9 глав излагают все аспекты языка уже подробно; финальные же несколько глав показывают, как пользоваться сопутствующими инструментами. Узнается фирменный стиль Кернигана — лаконичный и точный; примеры кода немного синтетические, но суть языка отражают точно.

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

Что же до самого Golang… скучный, простой и предсказуемый. Его создатели много думали над тем, что не включать в язык. И список тех вещей, что добавлены не были, определенно не может устроить всех. Но лично мне простота Go симпатична. Да и горутины — штука очень и очень удобная, ни в какое сравнение не идущая с кашей, с которой приходится работать во множестве других языков.

На первый взгляд Go хорошо подходит для сетевого программирования, создания распределенных приложений и околосистемной разработки. Скажем, на роль Java в каком-нибудь Hadoop, или Python при написании небольших серверов, или Php, или…