Abnormal programming
Typography
JavaScript
Comments 69
+3

Первые слова текста "THE LORD OF THE RINGS PART ONE THE FELLOWSHIP OF THE RING J.R.R. TOLKIEN". Что-то мне подсказывает, что это таки не Библия короля Якова.

0
Скачал счас ВК в txt, получилось порядка 2.8 Мб. Стало быть 2.8М символов (с учетом пробелов, пунктуации и переносов строк). Там в конце куча аппендиксов, в начале содержание, номера страниц и глав, т.ч. если всё это сократить, то можно допустить, что основной объем текста будет в р-не 2+ М.

По данным интернетов, в трилогии порядка 500к слов, что косвенно подтверждает оценку в 2М или даже 2,5М символов (при средней длине слова в английском в р-не 4 символов). По крайней мере расхождение результата с фактом при такой оценке вряд ли будет в разы.

Приведённый файл, если обрезать ~20пикс. поля, имеет разрешение 3460х3460 пикселов, при размере символа (5+1)*(1+1)=12 кв. пикс. выходит чуть меньше миллиона символов, что в 2 раза меньше ожидаемой цифры.

Что не так?
0

Там не вся трилогия, а только первый том. А разница в размере у вас получилась не втрое, а вдвое, скорее всего потому что картинка использует четырёх- или пятисимвольные пробелы в качестве переноса строки.

+2
Которая, если очень внимательно вглядываться в монитор, выглядит вот так:

Я бы сказал, что для этого нужно смотреть в монитор под лупой.

+3

У меня получалось разобрать отдельные глифы невооружённым взглядом. Зависит от разрешения монитора, наверное.

+2

Ага. Попытался — вообще без шансов. Монитор 4K, 140 ppi. Невооружённым глазом субпиксели вообще не видно — потому всем так ненавистный ClearType работает просто замечательно. Только при макросъёмке при примерно с 10 попытки получилось сделать чёткий кадр.

+2
На экране с высоким разрешением (телефон HD, настольный монитор 4k, Retina) или мониторе с матовым покрытием невооруженным глазом такое прочитать, практически, невозможно.
+4
Так вот что там разглядывал Бастрыкин! А мы-то, дураки, зря потешались над ним…
+15
Самые мелкие шрифты, с которыми я сталкивался в реале (помимо условий кредитов =)) — это шрифты из J2ME приложений для мобильников середины 2000-х годов. У меня, например, был Siemens C65, с экранчиком 130*130 пикселей, и вот такие шрифты были на нём вполне читабельными (хотя и считались «мелкими»):


Эти картинки и есть шрифт, я их сейчас вытащил из тех самых .jar файлов, которые запускал на своём сименсе в 2005-м.
Такой шрифт можно было установить в ридере для книг, или добавить в конструкторе для Jimm ICQ.
0
С 36 используемыми символами получается ровно 36х5 пикселей. Если считать, что каждый пиксель занимает 3 байта, то нам нужно 36*5*3 = 540 байт на то, чтобы хранить весь рисуонк
Ну и зачем это? Если можно сделать нормальный шрифт 8×5, в котором каждый символ будет занимать 5 байтов.
Имхо, идея интересна лишь тем, как впихнуть на экран низкого разрешения как можно больше символов.
+1

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

0
Например, если делать в стиле «ностальгии»/«ретро». Есть же сейчас мода на «пиксельные игры», где под капотом нормальные SDL или 3D сидят.
Взять такой шрифт, порендерить квадратами, занести результат на экране модели условно древней мобилки — и готов элемент окружения «а-ля нулевые» для какой-нибудь игры, причём вполне допускающий осмысленную сюжетную интерактивность(кто сказал «Steins;Gate»?).
0
Это неплохой шрифт для стеганографии, при вертикальной записи, простая линия на сайте превращается в текст при внимательном рассмотрении.
+4
Смысл стеганографии в том, чтобы она и при внимательном рассмотрении была необнаружима.
+1
А я такие шрифты тогда рисовал. Особенно весело было с китайскими.
+1
Ох, такую ностальгию вызвали! Помню, была софтина, позволявшая много-много текста запихнуть в приложение и потом его довольно комфортно просматривать. Я так шпоры делал.

+4
Англоговорящим-то хорошо, у них буквы компактные. А вот в русском есть такие монстры, как например Ы, Щ, Ж, Ю, Д, которые ещё попробуй вмести даже в 4x8, чтоб оно не сливалось в бесформенную кляксу.
+1
В данном шрифте больше всего места займёт Ё (2х7, или 14 кв. пикс.), что больше, чем Щ (по-минимуму, 6 кв. пикс.).
+8
В шрифте 3х5 с «Ж» и «Ю» извратились — набок положили
image
0
Пожалуй лучше всего то, что это совершенно бес проблем читается в контексте. Можно даже не заметить, что они боком повёрнуты.
0

Тсект буедт лгкео чиаттсья даже елси перамешеть все бвукы втнури свлоа, крмое пвоерй и подесленй :)

+1
94НН03 С006Щ3НN3 П0К4ЗЫ8437, К4КN3 У9N8N73ЛЬНЫ3 83ЩN М0Ж37 93Л47Ь Н4Ш Р4ЗУМ! 8П3Ч47ЛЯЮЩN3 83ЩN! СН4Ч4Л4 Э70 6ЫЛ0 7РУ9Н0, Н0 С3ЙЧ4С Н4 Э70Й С7Р0К3 84Ш Р4ЗУМ ЧN7437 Э70 4870М47NЧ3СКN, Н3 З49УМЫ84ЯСЬ 06 Э70М.
+8
". Мы этого делать не будем, потому что арифметическое кодирование — сложная штука, а 68 байт — это и так немного."

Если уж начали делать минимализм(который никому не нужен), то делайте его полноценным.
+1

Это правда. Мне тоже в статье не хватило выжимания ещё десятка байт каким-нибудь хитрым сжатием.

0
«На самом деле файл можно сделать ещё меньше, используя кодирование палиндромов, интервальное кодирование и другие методики сжатия. Как и арифметическое кодирование, эти методики мы отложим до следующей статьи.»

А есть это статья?
0

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

0

Получается что в таком шрифте 5 позиций для кодирования. Это мне напомнило азбуку Морзе. Если записать те же буквы вертикальными столбцами в азбуке Морзе, то читать будет даже проще.

+3
Вы ничего не поняли. Вопрос не в том, чтобы закодировать азбуку, а в том, чтобы создать шрифт.
+19

Вы сейчас открыли новые возможности для написания неудобных пунктов договоров мелким шрифтом

+3
Это не мелкий текст, а просто подложка документа…
Подписывайте быстрее.
+6
Элегантно! Напомнило как делали в старину дополнительные цвета.
Наглядно


+3
Вот только эта техника была продемонстрирована в 2015, а не в старину.
0
В детстве баловался шрифтами типа 3х6 для Спектрума, и они были намного читаемее чем вот это вот.
+4
Сфотографировал телефоном с монитора. Не ожидал, что будет так отлично видно.
image
0
То, что в статье приводится как «программно увеличенное» нечитаемо вообще, даже если знаешь, что там написано.
А вот в оригинальном размере читаемо только под лупой. Действительно разборчиво. Но под лупой, которую надо подносить к монитору.
+9

Так оно и не должно быть читаемо, по сути «программно увеличенное» изображение показывает как именно (каким цветом) закодирован символ. Каждый цветной пиксель разбивается дисплеем на 3 составляющие, в виду технических особенностей, и получается «магия». Собственно в статье об этом и рассказывается.

-1
1) Насколько маленьким может быть читаемый шрифт?
Очень неопределнный вопрос. Сразу возникает уточняющий вопрос:
— на каком устройстве? Например, используя лазерный принтер, можно печатать на качественной пленке с разрешением 1200x600 dpi — это выдает по паспорту мой принтер и я его использовал для печати миры, чтобы проверить возможности фотосканера Epson Perfection Photo 4870 в проходящем свете. Если кодировать прямо в postscript, можно печатать отдельными пикселями вышеуказанного размера. «Шахматная доска» из пикселей остается разборчивой. То же самое получается на хорошей мелованной бумаге. И это получается на устройстве типа ширпотреб. Есть еще более «тонкое» устройство — степпер. Каждый жук и жаба, проектирующий чипы и заказывающий их на фабах, считает своим долгом что-нибудь написать мелкими буквами на кремнии.

2) Сколько памяти понадобится, чтобы его хранить?
Все зависит от представления. Для растрового представления достаточно широкого набора разборчиво читаемых символов хватает поля 5x7. Это 35 бит. Если сжать без потерь, будет где-то 16-19, в зависимоти от алгоритма сжатия. Если с потерями, но без потери разборчивости на латинке, можно догнать до 7 бит на символ. Если использовать словарь для фильтрации вариантов, можно догнать до 5.

3) Сколько кода понадобится, чтобы его использовать?
Смотря что понимать под кодом. ЕМНИП, программа рендеринга шахматного поля с клеткой в один пиксель на постскрипте (файл, который отправлялся на принтер командой lp), весил чуть более 300 байт.
Если просто печатать текст шрифтом по умолчанию, на устройство, в том числе и на экран, то на символ ASCII идет ровно один байт.

+8
Вспоминается БК 0010-01
image

(на черно-белом мониторе выглядело прекрасно, разумеется)
0
Ну вот мужчина выше скриншот запостил. Но вообще, понятия не имею. Мечтают ведь о том, чего нет. Мне кажется я где-то увидел цветной монитор, возможно у другого компьютера и возжелал такого же. Помню только, как я мечтал разными цветами рисовать в своей программе.
0
На скриншотах моя электронная книга с ч\б экраном тоже цветная :)
+2
Да, и поставлялись очень широко (я его неоднократно видел в разных компьютерных классах). Нашел фотографию такого, как у был меня. Кстати, я-то как раз хотел черно-белый, чтобы с узенькими символами работать.

image
+1
Подключал свою бкшку к обычному цветному телевизору. Было весело рисовать в цвете.
-1
С 36 используемыми символами получается ровно 36х5 пикселей. Если считать, что каждый пиксель занимает 3 байта, то нам нужно 3653 = 540 байт на то, чтобы хранить весь рисуонк

Сжатие

Палитра

итд

Я конечно понимаю что в итоге автор статьи пришёл к верному решению, но количество попутно совершённых при этом заведомо лишних действий удивляет.


Всё же просто: символы состоят из 3х5 точек, каждая точка либо включена либо нет (1 бит). То есть это монохромная картинка 3х5 с 1 битом на пиксель. То что её выводят на монитор в субпиксельном режиме — для кодирования дела нисколько не меняет.

+3

Банальные чёрные поля добавляют читабельности:
Если для компонентов пикселя не использовать исключительно 0x00 и 0xFF, а подбирать значения в зависимости от соседних точек и восприятия разных цветов человеком, то наверняка можно сделать ещё читабельнее.

0
Проблемы со шрифтом на компе не существует. А вот, например текст на бумаге, написанный очень мелким шрифтом, реально раздражает. Иногда приходиться фотографировать его, чтобы прочитать.
+1
По факту на один символ требуется 5 пикселей по вертикали, ещё один добавляется для междустрочного интервала- уже 6 пикселей, и плюс ещё столько же (!) для интервала между буквами. Итого 12 пикселей занимает один символ. Возмутимо много.
Можно для интервала между буквами использовать 1 субпиксель, это в 1.5 раза уменьшит занимаемое место.
нарисовал
image
0

А можно картинку в оригинальном масштабе? Подозреваю, что качество так будет хуже, потому что слова вообще будут сливаться.

+1
Оказывается, можно даже в редакторе, вот картинка:

Вы открыли во мне новые возможности.
фото с дисплея

0

Неплохо, но тогда на каждый символ нужно три глифа в зависимости от его позиции по субпикселям. Посмотрите на, например, L в слове Hello. Это либо раздует атлас втрое, либо (что логичнее) потребует хранить чёрно-белый атлас и генерировать колонки на лету.

0
хранить чёрно-белый атлас и генерировать колонки на лету.
Именно!
Насколько маленьким может быть читаемый шрифт?
Сколько памяти понадобится, чтобы его хранить?
Сколько кода понадобится, чтобы его использовать?
Если во главу угла поставить первый вопрос, то мы получили требуемое.
0

А нет ли онлайн сервиса, в котором можно сгенерировать произвольный текст таким шрифтом?

0

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

0
У меня на 4К какая-то фигня получается, видимо сабпиксели расположены не в нужной последовательности. Зелёные пиксели вообще не складываются в вертикали, имеют дырки =(

Only those users with full accounts are able to leave comments., please.