Их разыскивает милиция
Несколько лет назад на одном рабочем созвоне коллега в шутку сказал:
— Кажется, я видел твоё фото на доске «Разыскивается полицией».
Мы посмеялись — такого точно не могло быть.
Но через несколько минут он прислал фотографию из полицейского участка в Самаре. И там действительно висело моё фото. Оказалось, местная полиция скачала мое фото с моего же сайта как пример как нужно кадрировать фото на заявление на паспорт.

В то время у меня был небольшой pet project — сервис для подготовки фотографий на документы. Он автоматически форматировал фото в соответствии с требованиями для паспортов и виз, чтобы их можно было быстро распечатать где угодно.
Проект давно перестал существовать. Но недавно мне снова понадобилось делать фотографии на документы, и я решил восстановить идею уже на современных технологиях.
И вот что меня действительно удивило.
То, что раньше требовало серьёзного backend’а, сложной обработки изображений и большого количества времени, сегодня можно собрать буквально за несколько часов.
Современный браузер теперь умеет:
- удалять фон прямо на клиенте,
- автоматически кадрировать фото,
- подгонять его под официальные требования,
- и готовить финальную версию для печати практически на любом принтере или в фотокиоске супермаркета.
Весь проект получился полностью open source и задеплоен на GitHub Pages. Privacy First - фото остается в браузере, open source - все как я люблю.
Иногда лучший способ почувствовать, насколько далеко шагнули технологии — это попробовать заново собрать собственный старый проект спустя несколько лет.
Блеск и нищета float
Какое расстояние между соседними числами в float? Что будет если к числу с плавающей точной прибавить другое чесло с плавающей точкой? Зависит от значения, результат может равняться ожидаемому но в некторых случаях разница между результатом и исходным числом может быть нулевой а в некторых отличаться на несколько сотен!
#include <stdio.h>
int main(void) {
float x = 1e10f;
printf("x = %.0f\n", x);
printf("x + 1 = %.0f\n", x + 1.0f);
printf("x + 1000 = %.0f\n", x + 1000.0f);
printf("x + 1024 = %.0f\n", x + 1024.0f);
return 0;
}
x = 10000000000
x + 1 = 10000000000
x + 1000 = 10000001024
x + 1024 = 10000001024
Из-за особенностей хранения float при малых значениях точность представления чисел сопоставима с int а на больших значениях рассторяния между числами на численной оси увеличиваются и достигают довольно больших значений. Прям очень неожиданно может получиться если это не учитывать!
Диаграммы и ztools
Выложил новую версию ztools. Добавил примеры работы с графикой - круговые и пончиковые диаграммы. Примеры почти целиком сгеренировал Codex. Из-за отсутствия прослойки вроде виртуального DOM размер библиотеки получается минимальный - ее можно включить в промт агенту целиком и агент сразу понимает как писать код с ее использованием. Получается AI Friendly Dom-First Reactivity. Прям здорово!
Опубликовал ztools
Меня давно волнует вопрос - почему javascript библиотеки такие грамоздкие? Репозиторий React занимает больше гигабайта! А точно, проблема, которую решает реакт может должна решаться набором программ с кодовой базой размером в 10 инсталлятора Windows NT?
Оживил, вернее переписал с нуля ztools.org.
Ztools - это небольшая библиотека размером всего в несколько сотен строчек кода на JavaScript, которые добавляют реактивность, конcтруирование dom элементов, веб-компоненты, SSR и многое другое...
Конечно это вайбкодинг, посмотрим что из этого получится...

