И вот, ANSI C говорит о 96 причинах undefined behavior.
Стандарт ISO/IEC 9899:1999 (C99) говорит уже о 191 пунктах UB.
ISO/IEC 9899:2011 (C11) — о 203 (вот они во всей красе).
А стандарт С17 — и того более!
Если смотреть просто на KPI, то представляешь заголовки в духе желтой прессы о падении качества в новых стандартах. Ведь UB — один из источников уязвимостей...
Но с другой стороны, чем больше мы знаем о наших слабых сторонах, тем сильнее мы становимся. И расширение списка UB — это просто обратная сторона расширения языка.
А что вы думаете на эту тему?
#digest
Стандарт ISO/IEC 9899:1999 (C99) говорит уже о 191 пунктах UB.
ISO/IEC 9899:2011 (C11) — о 203 (вот они во всей красе).
А стандарт С17 — и того более!
Если смотреть просто на KPI, то представляешь заголовки в духе желтой прессы о падении качества в новых стандартах. Ведь UB — один из источников уязвимостей...
Но с другой стороны, чем больше мы знаем о наших слабых сторонах, тем сильнее мы становимся. И расширение списка UB — это просто обратная сторона расширения языка.
А что вы думаете на эту тему?
#digest
👍3
Минутка пятничного настроения
Александр Золотов (Night Radio) выпустил свою музыкальную композицию в виде простой программы на Cи с единственной зависимостью от libSDL2. Все синтезаторы и звуковые эффекты реализованы непосредственно в программе.
Александр известен, в частности, своим модульным синтезатором SunVox и другими хорошими программами, ориентированными на сочинение музыки и компьютерную графику.
#digest
Александр Золотов (Night Radio) выпустил свою музыкальную композицию в виде простой программы на Cи с единственной зависимостью от libSDL2. Все синтезаторы и звуковые эффекты реализованы непосредственно в программе.
Александр известен, в частности, своим модульным синтезатором SunVox и другими хорошими программами, ориентированными на сочинение музыки и компьютерную графику.
#digest
👍6
Сравнение latency различных операций в компьютерных системах
В System Design Primer попалась замечательная табличка со сравнением разного рода задержек в компьютерных системах. Например, там приводятся: время доступа к данным в L1 кеше, время обращения к ОЗУ, время чтения 4 килобайт с SSD, и так далее.
Неплохо помнить эту табличку хотя бы приблизительно, чтобы оценивать разницу между скоростью разных операций как минимум в порядках.
В System Design Primer попалась замечательная табличка со сравнением разного рода задержек в компьютерных системах. Например, там приводятся: время доступа к данным в L1 кеше, время обращения к ОЗУ, время чтения 4 килобайт с SSD, и так далее.
Неплохо помнить эту табличку хотя бы приблизительно, чтобы оценивать разницу между скоростью разных операций как минимум в порядках.
👍5
Low-tech Password Managers
Совсем недавно мы писали про pass phrases и способы запоминания паролей. Упоминали и менеджеры паролей, как наиболее безопасный способ хранения по-настоящему стойких к перебору паролей, но сложных для запоминания.
Теперь хотелось бы обратиться к факту бытия: кто-то просто записывает пароли на бумагу.
Плохо ли это, записывать пароли? Удивительно, но на этот счет есть разные мнения.
👉 Подробнее..
Совсем недавно мы писали про pass phrases и способы запоминания паролей. Упоминали и менеджеры паролей, как наиболее безопасный способ хранения по-настоящему стойких к перебору паролей, но сложных для запоминания.
Теперь хотелось бы обратиться к факту бытия: кто-то просто записывает пароли на бумагу.
Плохо ли это, записывать пароли? Удивительно, но на этот счет есть разные мнения.
👉 Подробнее..
👍9
4 хорошие бесплатные книги про алгоритмы и структуры данных
Сегодня рекомендуем полезную литературу про инструменты, без знания которых фактически невозможно создавать программы: это структуры данных и алгоритмы.
Каждая из книг приводит примеры кода на своем языке — выбирайте стек по вкусу!
👉 Подробнее..
#literature
Сегодня рекомендуем полезную литературу про инструменты, без знания которых фактически невозможно создавать программы: это структуры данных и алгоритмы.
Каждая из книг приводит примеры кода на своем языке — выбирайте стек по вкусу!
👉 Подробнее..
#literature
👍6
Пятничная минутка погружения в детство
Обнаружили новый шедевр от Morphcat Games — игру Böbl для ретро-платформы NES
Видео с игровым процессом доступно на Youtube https://www.youtube.com/watch?v=Uor-iTY-FqQ
Кстати, о самой NES мы ностальгировали совсем недавно в этом посте.
#fun
Обнаружили новый шедевр от Morphcat Games — игру Böbl для ретро-платформы NES
Видео с игровым процессом доступно на Youtube https://www.youtube.com/watch?v=Uor-iTY-FqQ
Кстати, о самой NES мы ностальгировали совсем недавно в этом посте.
#fun
itch.io
Böbl (NES) by Morphcat Games
A water-based platformer developed for the NES. Bobl ROM included
👍7
Симметричная криптография и цифровая подпись
Когда кто-либо упоминает механизм цифровой подписи, каждый из нас вспоминает про асимметричную криптографию. Есть приватный и публичный ключи, мы делимся с окружающими публичным ключом, а подписываем сообщение приватным. Имея только публичный ключ, никто не может прикинуться нами и начать подписывать документы от нашего имени. Такое свойство обеспечивается внутренней асимметрией криптосистемы и связано с вычислительной сложностью некоторых математических задач.
Но существуют ли механизмы цифровой подписи, построенные вокруг симметричной криптографии?
👉 Разберемся подробнее
#digest
Когда кто-либо упоминает механизм цифровой подписи, каждый из нас вспоминает про асимметричную криптографию. Есть приватный и публичный ключи, мы делимся с окружающими публичным ключом, а подписываем сообщение приватным. Имея только публичный ключ, никто не может прикинуться нами и начать подписывать документы от нашего имени. Такое свойство обеспечивается внутренней асимметрией криптосистемы и связано с вычислительной сложностью некоторых математических задач.
Но существуют ли механизмы цифровой подписи, построенные вокруг симметричной криптографии?
👉 Разберемся подробнее
#digest
👍11
Занятный факт о режиме probe — он «читерит»
Probe mode используется для отладки CPU Intel через JTAG. В этом режиме конвейер останавливается, и появляется возможность обозревать его полное состояние, в зависимости от уровня доступа. Грубо говоря, когда CPU полностью разлочен, в т.н. уровне «red», мы можем обозревать вообще все — знать бы только JTAG IR DR сдвиги.
Есть еще уровень «orange» для OEM, когда Intel Top Secret информация недоступна для интроспекции, но частично открыты фабрики интерконнекта, которые могут помочь интеграции IP блоков. И есть дефолтный «green», когда мы с вами, например, можем посмотреть архитектурный стейт CPU — все, что описано в Intel SDM. Это, например, удобно, если вы отлаживаете прошивки с reset вектора.
Но вот в чем подвох — JTAG очень «железный». Это значит, что манипуляции IP блоками происходят на уровне сигналов. Стало быть, если мы хотим «прошагнуть» одну макроинструкцию, мы на самом деле не можем это сделать, потому что внутри ядра целый огромный конвейер, о котором мы ничего не знаем и не должны знать. То есть JTAG может крутить самые мелкие «крутилки» в конвейере, и исполнить макроинструкцию для него — слишком сложно.
И тут врывается probe mode! Грубо говоря, при помощи него можно «попросить» конвейер полностью прокрутить одну макроинструкцию и обновить архитектурное состояние. Причем прокрутка эта происходит в «идеальных» условиях, без сторонних эффектов, которые привносили бы соседи по конвейеру. Поэтому отладка через JTAG получается не совсем «железной», а только частично, когда дело доходит до разделения микро- и макро- архитектуры. Но и волки цели, и овцы сыты.
#digest
Probe mode используется для отладки CPU Intel через JTAG. В этом режиме конвейер останавливается, и появляется возможность обозревать его полное состояние, в зависимости от уровня доступа. Грубо говоря, когда CPU полностью разлочен, в т.н. уровне «red», мы можем обозревать вообще все — знать бы только JTAG IR DR сдвиги.
Есть еще уровень «orange» для OEM, когда Intel Top Secret информация недоступна для интроспекции, но частично открыты фабрики интерконнекта, которые могут помочь интеграции IP блоков. И есть дефолтный «green», когда мы с вами, например, можем посмотреть архитектурный стейт CPU — все, что описано в Intel SDM. Это, например, удобно, если вы отлаживаете прошивки с reset вектора.
Но вот в чем подвох — JTAG очень «железный». Это значит, что манипуляции IP блоками происходят на уровне сигналов. Стало быть, если мы хотим «прошагнуть» одну макроинструкцию, мы на самом деле не можем это сделать, потому что внутри ядра целый огромный конвейер, о котором мы ничего не знаем и не должны знать. То есть JTAG может крутить самые мелкие «крутилки» в конвейере, и исполнить макроинструкцию для него — слишком сложно.
И тут врывается probe mode! Грубо говоря, при помощи него можно «попросить» конвейер полностью прокрутить одну макроинструкцию и обновить архитектурное состояние. Причем прокрутка эта происходит в «идеальных» условиях, без сторонних эффектов, которые привносили бы соседи по конвейеру. Поэтому отладка через JTAG получается не совсем «железной», а только частично, когда дело доходит до разделения микро- и макро- архитектуры. Но и волки цели, и овцы сыты.
#digest
👍13
К очередной пятнице — забавная реализация игры, похожей на T-Rex в Google Chrome, которая помещается в бутсектор.
https://github.com/franeklubi/dino
#fun
https://github.com/franeklubi/dino
#fun
GitHub
GitHub - franeklubi/dino: Chrome's t-rex based bootsector game (512 bytes) written in 16-bit x86 assembly (now with 8086 support!)
Chrome's t-rex based bootsector game (512 bytes) written in 16-bit x86 assembly (now with 8086 support!) - franeklubi/dino
👍9
Обзор статьи «Evolution of the PikeOS Microkernel»
В своей статье «Evolution of the PikeOS Microkernel» сотрудники SysGo Роберт Кайзер и Стефан Вагнер описывают, как со временем менялась архитектура микроядра PikeOS в ответ на вызовы, связанные с информационной и функциональной безопасностью.
Оказалось, что микроядро PikeOS изначально было практически полным клоном микроядра L4 версии 2.0, но со временем разработчики стали замечать в нем фатальные для их области применения архитектурные недостатки.
Среди этих недостатков авторы называют:
1. отсутствие механизмов ограничения взаимодействия;
2. отсутствие механизмов разграничения прав доступа к сервисам ядра;
3. невозможность гарантировать какой-то процент процессорного времени множеству потоков;
4. невозможность жесткого разделения ресурсов;
5. неконтролируемый рост mapping database;
6. отсутствие стандартных примитивов синхронизации в пространстве пользователя.
Поговорим про каждый из этих пунктов немного подробнее.
👉 Продолжение
#digest
В своей статье «Evolution of the PikeOS Microkernel» сотрудники SysGo Роберт Кайзер и Стефан Вагнер описывают, как со временем менялась архитектура микроядра PikeOS в ответ на вызовы, связанные с информационной и функциональной безопасностью.
Оказалось, что микроядро PikeOS изначально было практически полным клоном микроядра L4 версии 2.0, но со временем разработчики стали замечать в нем фатальные для их области применения архитектурные недостатки.
Среди этих недостатков авторы называют:
1. отсутствие механизмов ограничения взаимодействия;
2. отсутствие механизмов разграничения прав доступа к сервисам ядра;
3. невозможность гарантировать какой-то процент процессорного времени множеству потоков;
4. невозможность жесткого разделения ресурсов;
5. неконтролируемый рост mapping database;
6. отсутствие стандартных примитивов синхронизации в пространстве пользователя.
Поговорим про каждый из этих пунктов немного подробнее.
👉 Продолжение
#digest
👍9
Хорошее чтиво про компиляторы
Роберт Нистром (Robert Nystrom) написал «Crafting Interpreters» — книгу про разработку интерпретаторов (и компиляторов) с практическим уклоном.
Следуя за мыслью автора, читатель сможет реализовать быстрый интерпретатор современного языка программирования, поддерживающего классы и замыкания. Книга написана легким и понятным языком и хорошо иллюстрирована.
Автор книги не просто теоретик, он работает в Google над языком программирования Dart, а также выпустил несколько своих любительских языков. Одним из самых классных получился Wren.
#literature
Роберт Нистром (Robert Nystrom) написал «Crafting Interpreters» — книгу про разработку интерпретаторов (и компиляторов) с практическим уклоном.
Следуя за мыслью автора, читатель сможет реализовать быстрый интерпретатор современного языка программирования, поддерживающего классы и замыкания. Книга написана легким и понятным языком и хорошо иллюстрирована.
Автор книги не просто теоретик, он работает в Google над языком программирования Dart, а также выпустил несколько своих любительских языков. Одним из самых классных получился Wren.
#literature
👍11
Тайминги на Intel — плавают!
Ни для кого не секрет, что время исполнения инструкций или их последовательностей в общем случае не детерминировано на процессорах Intel. Всему виной сложный многоступенчатый конвейер, а также его начальное состояние к моменту исполнения макроинструкции (то есть инструкции из x86 ISA, которая превращается внутри ядра в набор микроинструкций для конкретной микроархитектуры).
Есть ли гипертрединг? Какая заполненность таблицы переименования регистров? Какая очередь на буфере переупорядочивания? Сколько свободных скорбордов? Все это сильно влияет на время нахождения макроинструкции на конвейере. Есть, кстати, интересные случаи, когда макроинструкция будет находиться на конвейере 0 тактов – например, когда происходит склеивание инструкции сравнения и перехода (cmp + jxx) в одну микроинструкцию.
А еще есть нюки (nukes). Это асинхронные события, которые стопорят весь конвейер. Простой пример - # PF при фетче памяти в инструкции mov. Примеры посложнее – это когда в эррате пишут «Under complex microarchitectural conditions».
Если выходить на макроуровень – у нас есть различные «режимы» работы процессора. Все, наверное, знают про ring0 и ring3. Часто при этом забывают про ортогональные режимы (или еще хуже – называют их ring -1 -2 и т.п.). Это, например, vmx (виртуализация); smm (system management mode), который до сих пор популярен в том же управлении питанием; sgx – анклавы, smx, probe mode и много-много других. Переход в эти режимы вытесняет исполнение в предыдущем: физическое ядро ведь одно и то же! И эти вытеснения в общем случае могут происходить когда угодно.
В общем, не удивляйтесь, если вы исполняетесь в наиболее привилегированном, по вашему мнению, режиме и внезапно теряете где-то тысячи тиков tsc. Это нормально, и все операционные системы давно к этому приспособились.
#digest
Ни для кого не секрет, что время исполнения инструкций или их последовательностей в общем случае не детерминировано на процессорах Intel. Всему виной сложный многоступенчатый конвейер, а также его начальное состояние к моменту исполнения макроинструкции (то есть инструкции из x86 ISA, которая превращается внутри ядра в набор микроинструкций для конкретной микроархитектуры).
Есть ли гипертрединг? Какая заполненность таблицы переименования регистров? Какая очередь на буфере переупорядочивания? Сколько свободных скорбордов? Все это сильно влияет на время нахождения макроинструкции на конвейере. Есть, кстати, интересные случаи, когда макроинструкция будет находиться на конвейере 0 тактов – например, когда происходит склеивание инструкции сравнения и перехода (cmp + jxx) в одну микроинструкцию.
А еще есть нюки (nukes). Это асинхронные события, которые стопорят весь конвейер. Простой пример - # PF при фетче памяти в инструкции mov. Примеры посложнее – это когда в эррате пишут «Under complex microarchitectural conditions».
Если выходить на макроуровень – у нас есть различные «режимы» работы процессора. Все, наверное, знают про ring0 и ring3. Часто при этом забывают про ортогональные режимы (или еще хуже – называют их ring -1 -2 и т.п.). Это, например, vmx (виртуализация); smm (system management mode), который до сих пор популярен в том же управлении питанием; sgx – анклавы, smx, probe mode и много-много других. Переход в эти режимы вытесняет исполнение в предыдущем: физическое ядро ведь одно и то же! И эти вытеснения в общем случае могут происходить когда угодно.
В общем, не удивляйтесь, если вы исполняетесь в наиболее привилегированном, по вашему мнению, режиме и внезапно теряете где-то тысячи тиков tsc. Это нормально, и все операционные системы давно к этому приспособились.
#digest
👍8
Простой для изучения компилятор C11
Наверняка многие мечтали разобраться с тем, как устроены компиляторы их любимых языков программирования. Теория трансляции — непростая тема, но сделать простой компилятор под силу каждому.
Рю Уэяма (Rui Ueyama) создал компилятор языка C, поддерживающий большинство возможностей стандарта C11, специально для обучения других непростому делу разработки компиляторов.
Репозиторий chibicc устроен необычным образом: каждый коммит в истории изменений целостно расширяет возможности более простого компилятора, полученного на предыдущем шаге.
Первый коммит соответствует примитивному компилятору, который считывает число и генерирует код, подставляющий это число в качестве кода возврата. Каждый новый шаг постепенно приближает компилятор к поддержке полноценного языка C современного стандарта. Очень увлекательное путешествие.
У Рю есть и книга, описывающая chibicc, но она написана на японском — вероятно, это не самый удобный вариант для большинства наших читателей.
До chibicc Рю уже разрабатывал компиляторы C-подобных языков, в том числе создал 9cc, простой по своему устройству компилятор с промежуточным представлением и аллокатором регистров, совсем как у «больших» компиляторов.
#digest
Наверняка многие мечтали разобраться с тем, как устроены компиляторы их любимых языков программирования. Теория трансляции — непростая тема, но сделать простой компилятор под силу каждому.
Рю Уэяма (Rui Ueyama) создал компилятор языка C, поддерживающий большинство возможностей стандарта C11, специально для обучения других непростому делу разработки компиляторов.
Репозиторий chibicc устроен необычным образом: каждый коммит в истории изменений целостно расширяет возможности более простого компилятора, полученного на предыдущем шаге.
Первый коммит соответствует примитивному компилятору, который считывает число и генерирует код, подставляющий это число в качестве кода возврата. Каждый новый шаг постепенно приближает компилятор к поддержке полноценного языка C современного стандарта. Очень увлекательное путешествие.
У Рю есть и книга, описывающая chibicc, но она написана на японском — вероятно, это не самый удобный вариант для большинства наших читателей.
До chibicc Рю уже разрабатывал компиляторы C-подобных языков, в том числе создал 9cc, простой по своему устройству компилятор с промежуточным представлением и аллокатором регистров, совсем как у «больших» компиляторов.
#digest
GitHub
GitHub - rui314/chibicc: A small C compiler
A small C compiler. Contribute to rui314/chibicc development by creating an account on GitHub.
👍15
Облака и операционные системы
Удивительно, как развитие одного сегмента индустрии расходится кругами, затрагивая все больше других сегментов. Это была подводка к тому, чтобы рассказать, как облака (cloud computing) влияют на развитие операционных систем.
Можно сформулировать три вектора.
👉 Подробнее
#digest
Удивительно, как развитие одного сегмента индустрии расходится кругами, затрагивая все больше других сегментов. Это была подводка к тому, чтобы рассказать, как облака (cloud computing) влияют на развитие операционных систем.
Можно сформулировать три вектора.
👉 Подробнее
#digest
👍4
Книги про криптографию
В свете популярности нашего недавнего поста про цифровую подпись – два полезных (и как всегда free download) труда о важной и сверхактуальной в наше время науке — криптографии.
Майк Розулек (Mike Rosulek) — «The Joy of Cryptography»
Хорошая вводная книга про теорию криптографии. Автор уделяет особое внимание доказательствам и предлагает множество упражнений. Для поверхностного чтения в транспорте не подойдет. Но написана книга достаточно легко.
Лоренс ван Хоутвен (Laurens Van Houtven) — «Crypto 101»
Короткая книга с введением в основные идеи и алгоритмы современной криптографии. Читается гораздо легче вышеупомянутого Майка Розулека и подходит для поверхностного ознакомления с предметом. Некоторые главы все еще не дописаны, но базовые основы уже хорошо изложены. Хоть книга и распространяется в PDF-формате, она неплохо подходит для e-ink читалок: в ландшафтном режиме текст оказывается достаточно крупным.
#literature
В свете популярности нашего недавнего поста про цифровую подпись – два полезных (и как всегда free download) труда о важной и сверхактуальной в наше время науке — криптографии.
Майк Розулек (Mike Rosulek) — «The Joy of Cryptography»
Хорошая вводная книга про теорию криптографии. Автор уделяет особое внимание доказательствам и предлагает множество упражнений. Для поверхностного чтения в транспорте не подойдет. Но написана книга достаточно легко.
Лоренс ван Хоутвен (Laurens Van Houtven) — «Crypto 101»
Короткая книга с введением в основные идеи и алгоритмы современной криптографии. Читается гораздо легче вышеупомянутого Майка Розулека и подходит для поверхностного ознакомления с предметом. Некоторые главы все еще не дописаны, но базовые основы уже хорошо изложены. Хоть книга и распространяется в PDF-формате, она неплохо подходит для e-ink читалок: в ландшафтном режиме текст оказывается достаточно крупным.
#literature
👍5
Алгоритмы, дети и веселая практика
«Это одна из главных причин, по которой я занялся программированием :)», — пишут в комментариях к видео Джоша Дарнита (Josh Darnit) и его детей под названием «Exact Instructions Challenge».
Забавный ролик, демонстрирующий, как важно давать точные инструкции даже для самого простого, казалось бы, задания.
#fun
«Это одна из главных причин, по которой я занялся программированием :)», — пишут в комментариях к видео Джоша Дарнита (Josh Darnit) и его детей под названием «Exact Instructions Challenge».
Забавный ролик, демонстрирующий, как важно давать точные инструкции даже для самого простого, казалось бы, задания.
#fun
YouTube
Exact Instructions Challenge - THIS is why my kids hate me. | Josh Darnit
Exact Instructions Challenge PB&J edition
Another Challenge with Johnna and Evan: https://www.youtube.com/watch?v=sLaVM6af-RE&t=121s
We asked the kids to write instructions for a simple task but left out that we were going to be following their instructions…
Another Challenge with Johnna and Evan: https://www.youtube.com/watch?v=sLaVM6af-RE&t=121s
We asked the kids to write instructions for a simple task but left out that we were going to be following their instructions…
👍4
10 лучших книг про разработку ОС
Часто приходится слышать вопрос: «Что почитать, чтобы начать писать свою ОС?»
Выяснилось, что у каждого из нас, авторов канала, есть свои любимые книги на эту тему!
👉 Те самые 10 книг
#literature
Часто приходится слышать вопрос: «Что почитать, чтобы начать писать свою ОС?»
Выяснилось, что у каждого из нас, авторов канала, есть свои любимые книги на эту тему!
👉 Те самые 10 книг
#literature
👍5
Анатомия терминала
Любая достаточно продвинутая технология неотличима от магии.
Мы постоянно пользуемся терминалом, редко задаваясь вопросом, как он работает. Как командная оболочка взаимодействует с эмулятором терминала в графической среде? Как библиотеки, подобные ncurses, могут отображать псевдографические окна и элементы управления?
Арам Древекенин (Aram Drevekenin) создал замечательную интерактивную статью «Anatomy of a Terminal Emulator», в которой он объясняет, как различные компоненты системы взаимодействуют друг с другом, создавая такой знакомый консольный интерфейс.
#digest
Любая достаточно продвинутая технология неотличима от магии.
Мы постоянно пользуемся терминалом, редко задаваясь вопросом, как он работает. Как командная оболочка взаимодействует с эмулятором терминала в графической среде? Как библиотеки, подобные ncurses, могут отображать псевдографические окна и элементы управления?
Арам Древекенин (Aram Drevekenin) создал замечательную интерактивную статью «Anatomy of a Terminal Emulator», в которой он объясняет, как различные компоненты системы взаимодействуют друг с другом, создавая такой знакомый консольный интерфейс.
#digest
👍11
Как писать на английском языке хорошо?
Небольшая книга Уильяма Странка-младшего (William Strunk, Jr.) «The Elements of Style» — нестареющая классика. Она именно о стиле, о форме, а не о содержании. Информация из некоторых глав может быть полезна не только в английских текстах, но и при подготовке материалов на любом другом языке.
Прошло больше 70 лет со дня смерти автора, так что есть подозрение, что книга находится в публичном достоянии на территории большинства стран.
#literature
Небольшая книга Уильяма Странка-младшего (William Strunk, Jr.) «The Elements of Style» — нестареющая классика. Она именно о стиле, о форме, а не о содержании. Информация из некоторых глав может быть полезна не только в английских текстах, но и при подготовке материалов на любом другом языке.
Прошло больше 70 лет со дня смерти автора, так что есть подозрение, что книга находится в публичном достоянии на территории большинства стран.
#literature
👍11
А в эту пятницу – еще одна классная игра для NES от Morph cat Games: «Spacegulls»
Трейлер доступен на YouTube
#fun
Трейлер доступен на YouTube
#fun
itch.io
Spacegulls (NES) by Morphcat Games
A cute platformer featuring birds in space developed for the NES. Spacegulls ROM included
👍4
Простой растеризатор TrueType шрифтов
Многие знают библиотеку FreeType 2: масса проектов использует ее для растеризации векторных шрифтов и вычисления метрик глифов. Эта библиотека имеет большую историю и работает с невероятным количеством разновидностей шрифтов.
Но что делать, если вы хотели бы просто разобраться в теме растеризации глифов, почитав код библиотеки? FreeType для таких целей великоват. Но есть хорошая альтернатива — stb_truetype.
stb_truetype — минималистичная библиотека на языке Cи, поставляемая в виде одного заголовочного файла. В отличие от FreeType, она не старается поддерживать большинство форматов векторных шрифтов, реализует сравнительно простой растеризатор, и вынуждена принимать целостность файлов шрифтов на веру, поскольку не проверяет некоторые инварианты. Тем не менее, реализация библиотеки достаточно полна для практического применения.
stb_truetype активно применяют в игровой индустрии, она же используется в коде текстового редактора Lite, как и во многих других open source проектах.
#digest
Многие знают библиотеку FreeType 2: масса проектов использует ее для растеризации векторных шрифтов и вычисления метрик глифов. Эта библиотека имеет большую историю и работает с невероятным количеством разновидностей шрифтов.
Но что делать, если вы хотели бы просто разобраться в теме растеризации глифов, почитав код библиотеки? FreeType для таких целей великоват. Но есть хорошая альтернатива — stb_truetype.
stb_truetype — минималистичная библиотека на языке Cи, поставляемая в виде одного заголовочного файла. В отличие от FreeType, она не старается поддерживать большинство форматов векторных шрифтов, реализует сравнительно простой растеризатор, и вынуждена принимать целостность файлов шрифтов на веру, поскольку не проверяет некоторые инварианты. Тем не менее, реализация библиотеки достаточно полна для практического применения.
stb_truetype активно применяют в игровой индустрии, она же используется в коде текстового редактора Lite, как и во многих других open source проектах.
#digest
👍7