惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
Malwarebytes
Malwarebytes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
F
Future of Privacy Forum
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
A
Arctic Wolf
S
Securelist
K
Kaspersky official blog
S
Schneier on Security
T
ThreatConnect
T
Tenable Blog
Spread Privacy
Spread Privacy
T
True Tiger Recordings
AWS News Blog
AWS News Blog
F
Fox-IT International blog
量子位
T
Threatpost
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
U
Unit 42
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
小众软件
小众软件
A
About on SuperTechFans
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
美团技术团队
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog

Все публикации подряд на Хабре

Как аквариум на подоконнике превратился в full-stack платформу с AI GiftsHub — из чат-бота в полноценный backend-продукт Пиратство, копирайт и DMCA: как Napster, The Pirate Bay и YouTube изменили закон. Часть II Как найти внутренние резервы для развития предприятия Как один французский чиновник от безысходности начал платил зарплаты картами и практически изобрёл банкноты RAG в энтерпрайзе: почему демо работает, а прод нет AI-агент для финансовых процессов: как мы научили ИИ считать числа из базе данных без галлюцинаций Автопостинг на 8 платформах: архитектура waterfall, custom publisher'ы и API-ловушки Кинетика против бронзы: Почему Голиаф был обречен в дуэли с Давидом [Перевод] Масштабирование LLM: от одного чипа до ЦОДа. Глава 2. Шардинг LLM не работает за вас. Она работает с вами Чем лучше защищает минеральный SPF, тем страшнее он выглядит Стимпанк как часть жизни. История паровых двигателей и место, которое они занимали в мире в XIX-XX веках. Часть 1 Гастарбайтеры ворвались в IT и зарабатывают на рекламе: тут вам не снег лопатой кидать Новые методы и инструменты: как мы обновили курсы по тестированию в Яндекс Практикуме Java 21 в стиле «клятый энтерпрайз» на одноплатном компьютере возрастом 13 лет Ваши секреты внутри LLM. Куда уходят промпты и чего стоит опасаться? 10× труда. 10% к бонусу. Главный риск AI-эпохи — это сениор AI-инженер, который умеет считать Сапожник с сапогами Минимум, который удержит тебя на плаву в период дедлайнов Как без проблем переносить курсы между платформами? Обзор формата SCORM Когда Claude Code ошибается не по своей вине: документационный долг в соло-проектах 70% кода с AI — и ни на день быстрее qrrot — база данных со встроенным ИИ Шахматные программы V. Оценочная функция Восстание масс в обществе спектакля и отчуждение труда в царстве количества: что делать во времена всеобщего упадка? Не умеешь работать с ИИ? Тебя заменит тот, кто умеет Как интеллект становится уязвимостью под давлением Не надо так: три типичные ошибки, которые приводят ко взлому Заметки про код-стайл в C++ Забытый мультиколор (часть 1) Культура ест стратегию на завтрак: почему не работает долгосрочное планирование Советское ИИ: Забытые гении Как оплатить iCloud в России в 2026 году без смены региона Apple ID Глубокая интеграция месседжинга с бизнес процессами в фреймворке NodaLogic Контекстные менеджеры в Python за пределами with open(): пишем свои и упрощаем код Пароль против уборщицы Выяснились детали мега-IPO SpaceX, а также первый прибыльный квартал Anthropic Люди с психическими расстройствами – новая нефть? Когда нейросети перестанут галлюцинировать? И почему на «что за дичь» они несут ещё большую дичь? Мессенджер HalChat теперь в Google Play: 3 года разработки, ИИ в браузере и квест с модерацией Реверс-инжиниринг Xiaomi Smart Band 10 Когда памяти мало Среда повседневности как объект проектирования: что общего у горца, серотониновой ямы и митохондрий AGENTS.md создавали, чтобы помогать агентам. Я использую его, чтобы их вычислять Почему устанавливают join_collapse_limit = 20 Почему устанавливают join_collapse_limit = 20 Эрик Рис, автор Lean Startup: Почему хорошие компании становятся плохими после IPO Context-driven Reusable Form Pattern: Масштабируемая архитектура для Create / Edit / Create-from-Source Пузырьковая сетка, кошачья стая и не только — неожиданные источники вдохновения для QoS-алгоритмов ___, или «Заголовок намеренно оставлен пустым» ИИ-боты сканируют даже логи TLS-сертификатов. Любая информация используется для обучения LLM Нейросеть оживить фото ИИ: Как оживить фото нейросетью в 2026 году? Разбираемся в ML без воды: от базы до Attention. Часть 5: Метрики качества В поисках «кофейного Грааля». Как человечество пытается сварить идеальный кофе и какие рецепты предлагают…математики Программатик: Часть 2 — OpenRTB Интернет до бесконечных лент: каким был 2010 год Перезапуск TrueIndex: что изменилось в рейтинге языков программирования Проектный холст: как менеджеру подбирать «краски» управления под разные команды «Метафизика в формулах: математическое ядро «Веры Паломника — Исход» Java и постквантовый TLS Marcli: Markdown Терминал Кнопочный смартфон с 5G за 2800 рублей — разбираем и изучаем китайскую диковинку Где неприятности — там и жизнь Разворачивайте платформы: stackfile Мой путь в Microsoft Мобильная разработка за неделю #631 (18 — 24 мая) Что не так с Mixtape, и почему не все довольны новой игрой? Стоматология каменного века. Как неандертальцы лечили зубы 59 тысяч лет назад Почему классическое управление проектами часто не работает в IT-продуктах Строительство Саркофага. Часть 2. Бетонные реки и стальные берега РАЗРАБОТКА ПАРАМЕТРИЗИРУЕМОГО МОДУЛЯ CORDIC-АЛГОРИТМА НА SYSTEM VERILOG Вариационное исчисление как метафора свободы выбора: от градиентного спуска к онтологии пути Ekahau Sidekick и RSSI‑offset: физические ограничения метода и пять независимых причин неточности клиентской модели Колесо потока против раскола Обзор интересных особенностей переворачивающихся при умножении чисел В С неопределённое поведение повсюду MCP-агрегатор: объединяем инструменты для LLM в один сервер Дата-центры в космосе: как Google и SpaceX готовят новую инфраструктуру для ИИ Google готовит замену Chromebook: какими будут ноутбуки Googlebook Пользователь пишет issue, агент меняет сайт. Да, я это сделал Корпоративные конфликты в ИТ-секторе: механика судебной защиты активов и субсидиарных рисков Цена одной опечатки: Как три неверные буквы сорвали киберограбление на миллиард долларов Как я победил спам в своих email аккаунтах Whitepaper Сбера «AI-Disrupt PDLC»: разбор для тех, кто пишет код RustDesk Pro в России не купить. После долгих лет администрирования мы собрали своё честное решение Не пики, а бассейны: почему эволюция — это блуждание по графу жизни Как Gemini 3.5 Flash сломали ради красивых графиков (и почему она обходит 3.1 Pro только на бумаге) Вредоносная атака на Laravel-Lang meta-attention is all you need Как перестать путаться в IP-адресах серверов Сколько стоят ошибки в арбитраже: декомпозиция ценообразования на судебные услуги в Москве Разбираемся в ML без воды: от базы до Attention. Часть 4: kNN Vortex: фреймворк для тех, кого задолбала итальянская кухня в репозитории Использование тепла ЦОД в мире и РФ Часть 4. Скорость света — технические детали Не цитируй мне нейросеть Что сейчас с Project Loom? Примеры и код Рождённые в Сумерках Meta 1 мая показала как они хранят ключи от ваших бэкапов WhatsApp. Разбираю архитектуру и сравниваю
«Ща будет шрифт»: история одного русского embedded‑шрифта
Yurmach · 2026-05-25 · via Все публикации подряд на Хабре
Фото из первых тестов

Фото из первых тестов

Никогда не думал, что программированием можно увлечься, но около года назад я узнал про существование микроконтроллеров — и тут началось.

«Мне нужен шрифт, причём срочно!» — так я подумал спустя полгода. В сумбурном поиске я попробовал много вариантов, приводивших к систематическому разочарованию. Спустя ещё пару месяцев этот вопрос начал тормозить моё обучение и вводить в депрессию.

Зачем

  1. Я обычный пользователь и не могу смотреть на моноширинные шрифты — кровь из глаз

  2. То, что я находил требует значительной переработки

  3. Я не шрифтовик, нужна хорошая точка отправления

  4. Перевод вектора в растр на низком разрешении крайне плохая идея, всё будет кривое

Старый телефон — спасенье

Когда‑то у меня был Nokia 3310. Я хорошо помнил этот экран и шрифт, то, как я вглядывался в эти пиксели, пытаясь понять, почему буква «у» такая кривая, а «А» странная (я не помню, почему именно эти буквы вызывали странные чувства). Но сейчас, понимая ограничения и глядя на свой дисплей 128×64 пикселя, понимаешь, насколько это была хорошая работа.

Так выглядит собранный макет на базе ESP32-S2, справа Nokia 2100

Так выглядит собранный макет на базе ESP32-S2, справа Nokia 2100

Готовые библиотеки

NokjaOriginalSmallBold — прекрасное решение, именно его мне хотелось увидеть на дисплее, но перевести его в растр программными средствами я так и не смог. Кроме вектора, второй подвох — это только одно начертание.

nokia-3310-fonts — готовая библиотека, также была использована как точка отсчёта. Очень много осталось без изменений. Автор Přemysl Eric Janouch отрисовал 3 начертания, но, увы, все на английском языке. Ссылка.

Боже, как это редактировать

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

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

Первый блин

Помучавшись, мне удалось создать редактор на JavaScript — конечно, нейросетью, за 100 500 итераций. Я вообще не понимал, что делаю, но надо.

Самодельный редактор в браузере

Самодельный редактор в браузере

В процессе я столкнулся со сложностями: массив, в который были записаны буквы, был 8-битным и 8-строковым. Соответственно, русская буква «Щ» без доработок напильником в него не влезла, как и буквы «Й», «Ё» из‑за верхних выносных элементов. И тогда я не понимал этой проблемы. Ну а в Си изменить массив — это попахивает переписыванием проекта: заголовочный файл, сам массив, метод отрисовки. Да ладно проект, у меня снова нет редактора, и теперь было понятно, что в массиве что‑то не так.

// Часть исходного массива с буквой «Щ» (уже исправленный массив)
{  9, 10, { 
0x0000, 0x0000, 0xDB00, 0xDB00, 0xDB00, 0xDB00, 0xDB00, 0xDB00, 0xFF80, 0x0080 } },

// Таже часть в двоичном виде (c пробелами для наглядности)
{  9, 10, {                 // 9 и 10 - в десятичном виде, хранят ширину буквы и отступ
0 0 0 0 0 0 0 0 0 0000000,
0 0 0 0 0 0 0 0 0 0000000,
1 1 0 1 1 0 1 1 0 0000000,
1 1 0 1 1 0 1 1 0 0000000,
1 1 0 1 1 0 1 1 0 0000000,
1 1 0 1 1 0 1 1 0 0000000,
1 1 0 1 1 0 1 1 0 0000000,
1 1 0 1 1 0 1 1 0 0000000,
1 1 1 1 1 1 1 1 1 0000000,
0 0 0 0 0 0 0 0 1 0000000
}}, // Кто увидел букву Щ?

Первый запуск шрифта был на STM32F103, и всё шло отлично, пока я не увидел отзеркаленную «Щ» хвостом вперёд :)

Итог

Спустя какое‑то время я вернулся к идее. Расширил структуры и работал со шрифтом уже в локальном сервере на Си — чтобы проще парсить массив и отдавать в браузер для визуализации. Купил на Авито Nokia 2100 и отрисовал шрифт.

Nokia 2100 — в процессе отрисовки

Nokia 2100 — в процессе отрисовки

Сразу скажу: то, что я отрисовал, мне не понравилось. Некоторые русские буквы были сжаты по ширине, и я корректировал их, несколько искажая ритм.

Вывод в эмулятор дисплея — браузер ПК

Вывод в эмулятор дисплея — браузер ПК

Вывод на крупном дисплее, с большой плотностью пикселей (маленький шрифт уже плохо видно)

Вывод на крупном дисплее, с большой плотностью пикселей (маленький шрифт уже плохо видно)

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

Итоговый шрифт можно скачать на GitHub