Шрифт-мастер
- Dimus
- Feb 2
- 13 min read
"Выберите себе работу по душе, и вам не придется работать ни одного дня в жизни" - Конфуций
"Помимо математических способностей, жизненно важным качеством программиста является исключительно хорошее владение родным языком" - Edsger W. Dijkstra

Где-то на втором курсе института я вместе с другом Игорем записался в кружок программирования, который вел старшекурсник по имени Виктор. Компьютеров было два – каждый представлял собой массивный стол, на плоской поверхности которого рядами располагались небольшие прорези, а справа возвышалось нечто похожее на пишущую машинку, но без клавиш; где-то-сбоку я прочитал название «Проминь». Виктор объяснил, что каждые три прорези на столе содержат одну команду, например, чтобы сложить два числа надо было воткнуть три штырька: «СУМ», «РЕГ1», «РЕГ2», что означало прибавить содержимое 2-й ячейки памяти к 1-й. Ячейки памяти по научному назывались регистрами и было их всего десять, а исходную информацию туда можно было ввести, напечатав на машинке-терминале, у которой нашлись клавиши, когда сняли крышку.

На стене висела холщевая тряпица с кармашками, подписанными «СУМ», «ВЫЧ», РЕГ1», вроде школьной кассы «букв и слогов» для первоклассников, из которой мы вытаскивали нужные штырьки с дырочками и втыкали их в прорези в столе. Так происходил процесс кодирования алгоритма вычислений. Мне было поручено пересчитать весовые проценты в мольные для трехкомпонентной смеси, и, когда через три занятия машинка застрекотала, напечатав три числа – ответ, и Виктор, проверив, что сумма наконец-то равна единице, одобрительно покачал головой, я был несказанно счастлив, уверовав в программирование на долгие годы.

На «Проминь» мне больше программировать не пришлось, уже тогда в 1972 году они безнадежно устарели, и курсовую работу я уже делал на машине ЕС-1020, используя для ввода информации сначала телеграфные перфоленты, а к пятому курсу уже перфокарты с 80 колонками. Когда я начал работать в институте имени Карпова, моя любовь к программированию только возросла: придя домой, я за ужином просматривал распечатки, в поисках ошибки, ночью писал на бланках новый (правильный!) код, чтобы утром первым делом занести их девочкам для набивки на перфокарты и запустить в машину по новой.

Так продолжалось лет десять: каждый год я выбрасывал все свои перфокарты с программами (примерно десять тысяч строк кода на фортране) и писал всё заново, так как надо и как правильно. К сожалению, перфокарты не принимали в макулатуру в обмен на книги, а почему не принимали, я понял только сейчас: из государственных соображений - сдали бы всё подчистую и не было бы на чем таким как я программировать.
Примерно в 1984 году, в период подготовки кандидатской диссертации, я впервые увидел электронный дисплей с соответствующей возможностью вводить информацию в ЭВМ напрямую с клавиатуры, и перфокарты канули в Лету и, вероятно, встретились там с металлическими штырьками от Проминь и перфолентами, и программировать стало гораздо быстрее и удобнее. А еще через пару лет я покинул Карповский институт и переключился на работу с персональными компьютерами, возглавив Вычислительный Центр Института Эпидемиологии Минздрава СССР, где среди прочего узнал про еще одно достижения человеческого гения – устройство под названием «мышь». Здесь меня и застала Горбачевская перестройка: где-то в середине 1988 года мы с несколькими друзьями основали кооператив под названием «Моссофт». Некое созвучие с американской Микрософт было не случайным, поскольку все мы так или иначе были по работе связаны с программированием, и решили, что будем теперь на нем делать деньги, как Билл Гейтс. Сначала мне это казалось немного диким – неужели за хобби будут платить, но ко всему привыкаешь.
В те времена самым продуктивным компьютерным бизнесом была перепродажа персональных компьютеров, и многие нынешние олигархи с этого и начинали, но на первом же собрании было решено, что Моссофт этим заниматься не будет – слишком опасно, а сосредоточит свои усилия на разработке программного обеспечения. Источником опасности являлась очень высокая стоимость компьютеров, составлявшая 20–30 тысяч рублей, в то время как средняя зарплата в то время была 2-3 тысячи в год, и такой градиент создавал большое искушения изъять у владельца собственность любыми средствами.

Первые наши проекты были связаны с компьютеризацией медицины: электронные истории болезней, графическое представление результатов анализов и всевозможные базы данных. Опыт такой у меня уже имелся, поскольку по роду работы в институте мне нужно было поддерживать исследования врачей-эпидемиологов, в основном разрабатывая тематические базы данных по устойчивости бактерий к антибиотикам, для систематизации и анализа больничных инфекций, и, в особенности, по актуальной тогда регистрации инфицированных и больных СПИДом. Я не пытался провести свою работу через кооператив, хотя соблазн был, но использовал накопленный опыт при работе с другими медицинскими организациями. Чуть позднее мы занялись внедрением компьютерных сетей и передачей данных на расстояние с помощью появившихся тогда модемов -устройств, позволяющие пересылать информацию по существующим телефонным сетям, и уже в 1989 году мне удавалось из Москвы взять контроль над компьютером клиента во Владивостоке, удалить вирусы, переустановить операционную систему, загрузить наше программное обеспечение, к примеру базу данных, содержащую результаты анализов, и запустить их статистическую обработку.
Делали мы это с помощью пиратской копии, а в те времена платить за программы считалось глупостью, программы PC Anywhere, позволявшей с одного компьютера контролировать другой. Программа была очень хорошая, и некоторые наши клиенты хотели пользоваться ей самостоятельно, но интерфейс был, естественно, на английском языке, что затрудняло общение. Наши ребята из Моссофта легко нашли файл, где PC Anywhere хранила список всех сообщений и инструкций, и смогли заменить их на русские фразы-эквиваленты. Эти сообщения можно было читать на экране дисплея, но, когда мы попробовали распечатать инструкцию к программе на принтере, оказалось, что на бумаге вместо русских букв отображаются какие-то странные значки: скобки, уголки, немецкие буквы с умляутами (Ű, Ä, ô).
Проблема была в том, что кириллицы в американских персональных компьютерах не было вообще, ни на дисплеях, чтобы читать, ни в принтерах, чтобы печатать. Но для большинства дисплеев проблема решалась программно – загрузкой специальных драйверов, а вот для принтеров этого не было, точнее такая возможность была для более дорогих моделей, на мы об этом не знали. Сейчас это кажется странным: зайди в интернет и почитай, что по этому вопросу советуют умные люди, но не было тогда такого сервиса, а в имеющейся документации к вычислительной технике, купленной в обход ограничений CoCom, вопросы русификации почему-то не освещались, и до многих сейчас очевидных вещей приходилось доходить своим умом. А CoCom - это натовский комитет по контролю над экспортом передовых технологий в Советский Союз, который действовал с 1949 по 1994 год. Нарушали эти ограничения некоторые страны типа Швейцарии, и бывало новую технику я получал ночью, на складе без вывески и в российских картонных коробках с надписью «Осторожно – сантехника!»
На моей основной работе в институте также требовалась русификация: все делопроизводство велось естественно на русском языке, текстовых документов накапливалось все больше и больше и их нужно было уметь вводить к компьютер и распечатывать, да как-то руки не доходили, но тут вдруг появился заказчик, обратившийся в кооператив Моссофт с просьбой русифицировать его принтер, кажется марки Olivetti, что сейчас абсолютно неважно, и готовый заплатить за это тысячу рублей – хорошие деньги. Не помню как и почему, но сделать это было поручено мне, и так началась моя «сага со шрифтами».
Систематического образования по теории работы вычислительных машин у меня не было, и основные знания я почерпнул из книги Кларенса Джермейна "Программирование на IBM-360". Про то как русифицировать персональный компьютер там не говорилось, но я узнал, что для каждого символа, будь то буква, цифра или знак препинания, существует специальный двоичный код: последовательность из 8 нолей и единиц, то есть 8 битов информации, что, кстати, составляет 1 байт. К примеру, чтобы записать 1 миллион букв нужна память размером 1 МБ (мегабайт), а это хорошая книга в 500 страниц.
Отсюда первое следствие: всего таких символов может быть только 256, потому что 8 нулей и единиц можно расположить максимум 256 различными способами (2^8=256), например буква «Y» кодируется как 01011001, цифра "7" как 00110111. Как же используются эти коды в обычном англоговорящем персональном компьютере? - Десять уходят на десятичные цифры от 0 до 9, 26 на прописные латинские буквы и еще 26 на строчные, знаки препинания - 14 штук, ну еще несколько специальных знаков: @, $, %, &. В общем набрали 128 и это так называемые основные символы, которые всегда и во всех машинах одинаковые, и вот как выглядит «первая» половина таблицы:

- А что же с другими 128 кодами? Ведь говорил же, что их 256?
- Верно, есть и вторая половина, и находятся в ней коды вспомогательных символов: некоторые французские и немецкие буквы, которых нет в английском, греческие буквы для математиков, а также кусочки рамок, для рисования прямоугольных таблиц.

И вот эту-то вторую половину можно как раз использовать для кодирования русских, а также и других алфавитов, например арабских или вьетнамских.

Таблица кодов принтера записана в специальном чипе, называемом знакогенератор, позволяя по заданному коду символа воспроизвести этот символ графически. Поскольку принтеры в ту пору были игольчатые и каждый символ представлял собой группу точек, например буква А отображалась как представлено на рисунке, я предположил, что и в знакогенераторе они должны кодироваться в виде прямоугольных матриц, состоящих из нолей и единиц: то есть, если принтер получает сигнал "1", то соответствующая иголочка выдвигается и даёт отпечаток на бумаге. Один знакомый электронщик ( так называли в те времена специалистов по hardware - электронным приборам ) извлёк чип знакогенератор из принтера Olivetti и переписал для меня его содержимое на 5-дюймовую дискету в виде файла длиной 24 Кбайт, то есть последовательности двухсот тысяч нолей и единиц.

Поскольку структура файла мне была неизвестна, я написал программу на языке Бейсик, которая последовательно считывала информацию из этого файла, группировала биты в прямоугольники 9 на 8 и отображала результат на дисплей компьютера. - Откуда 9? – А у печатающей головки принтера было 9 иголок, как на рисунке, то есть за один «удар» печаталось 9 точек. Поначалу у меня на экране отображался абсолютный хаос: я менял начало отсчёта, размер предполагаемой матрицы и способ кодирования букв с горизонтального на вертикальный - кто знает в каком порядке активируются принтерные иголки. Неожиданно, через несколько часов борьбы со стихией, на экране неожиданно возникли фрагменты букв латинского алфавита, точнее их нижние половинки, лежащие на боку. Это был прорыв, и я до сих пор помню приятное возбуждение, похожее на чувство охотника, напавшего на след раненого зверя.

Дальше была стадия преследования, когда, модифицируя программу методом проб и ошибок, мне удалось найти точные позиции в файле всех 256 символов, включая как латинские буквы и цифры, так и символы второй половины таблицы, которые нужно было заменить на русский алфавит. Оказалось, что каждый символ отображается матрицей 14 на 8 бит(!), а в файле содержатся еще два набора символов: наклонных (italic) и жирных (bold). Дальше было дело техники: я нарисовал на бумаге в клеточку три набора букв ( 32 заглавных и 32 прописных без Ё), а потом переписал их в новый файл знакогенератора на нужные места; никаких сканнеров – все вручную: 0,1,1,1,0,0,1,1 – это один байт, а на каждый символ 14 байт, и так 192 раза. До сих пор я люблю делать такую тупую работу, ну типа переписывать числа в таблицу, или перебирать гречку.

Тот же самый электронщик за 200 рублей переписал новый файл на чип знакогенератора , мы вставили его в принтер и попробовали напечатать русский текст: вышел хаос из кусочков рамок, букв и умляутов. Оказалось, что я записал буквы не совсем в том порядке как нужно и не туда, но с третьей попытки всё, как говорится, встало на свои места.
Заказчик нашего кооператива остался доволен, а русификация принтеров стала приносить Моссофту хороший доход. Компьютеризация в СССР развивалась быстро и, несмотря на ограничения Запада, в страну попадало большое количество новой техники, а значит и принтеров всевозможных модификаций, с разными методами знакогенерации, но идея теперь была известна и со временем для каждой модели принтера у меня была готовая программа считывания и записи шрифтов. Дошло до того, что мы стали закупать программируемые чипы для знакогенераторов оптовыми партиями по несколько десятков. Между делом я русифицировал все принтеры нашего института, бесплатно, за исключением стоимости чипов и услуг перезаписи.

Как вы, наверное, догадались, вычислительный центр ЦНИИЭ был в некотором роде базой Моссофта: там мы имели возможность осваивать новые технологии, такие как модемы и локальные сети, и программные и технические средства, и часто устраивали там собрания кооператива, конечно вечерами после работы. Моя начальница, профессор Ирина Львовна Шаханина относилась к этому спокойно и никаких препятствий нам не чинила, лишь бы вычислительный центр функционировал нормально. А главной моей задачей была поддержка исследований института как головной организации Минздрава СССР по изучению происхождения и распространения СПИДа, проводившихся под руководством директора института академика В.И.Покровского. По совместительству, Валентин Иванович был ещё президентом Академии медицинских наук и обладал большими возможностями в плане финансирования как института, так и Центра СПИД в особенности, которым руководил его сын Вадим, но и вычислительному центру тоже кое-что перепадало.
Как только я приступил к своим обязанностям, в ЦНИИЭ пришли первые четыре персональных компьютера COMPAQ с процессором 8086, памятью 640 КБ и восхитительными монохромными дисплеями с янтарными буквами. А у

же через полгода к ним прибавилось ещё десять, и было решено заняться компьютеризацией института в целом, а не только ВЦ: компьютеры были размещены по лабораториям на всех четырех этажах здания. Каким-то образом мне стало известно про локальные сети: я заказал сетевые карты DLink и соединил все ПК проволочками, для чего потребовалось кое-где просверлить стены и перекрытия. Но дело того стоило и результат был поразительный: из своего кабинета по сети я устанавливал на удаленных машинах программное обеспечение, лечил вирусы и проводил лекции для новых пользователей. Особенно полезной была программа, позволяющая мониторить любой компьютер сети, то есть видеть у себя изображение на экране пользователя и даже брать на себя управление. Как-то в обеденный перерыв я произвел такую проверку и с удивлением обнаружил, что на девяти из четырнадцати сетевых компьютеров играют в DIGGER. Были в то время и другие игры, но эта была самой популярной. Кто не знает, маленький крот бегает по лабиринту под музыку Popcorn и кушает мешки с золотом, а когда получаешь бонус, то играет увертюра из Вильгельма Телля Россини. За диггером охотятся страшные монстры и когда им удается его сожрать, исполняется похоронный марш Шопена. Мой личный рекорд больше 30 тысяч очков!
Недолго думая (моя слабость), запускаю маленькую программку и на всех игровых компьютерах внезапно появляется яркое мигающее сообщение: «ВНИМАНИЕ! В ВАШ КОМПЬЮТЕР ПОПАЛА ВОДА!» и звучит сирена воздушной тревоги. Несколько человек в ужасе выключают ПК из сети (электрической), а остальные звонят: - Дмитрий Леонидович, вода попала, что делать? - Ничего страшного, - отвечаю, - нажмите клавишу D (dry). - На экране возникает вращающаяся спираль и слышится воющий звук разгоняющейся центрифуги, так знакомый нашим врачам и биологам. Ещё через десять секунд появляется надпись: «Продолжайте работу!»
Месячный бюджет нашего ВЦ составлял десять тысяч долларов, и их надо было тратить, чем мы с Ириной Львовной и занимались: заказывали новую технику и различное программное обеспечение, за которое, как было выше сказано, «нормальные советские люди, которые в булочную на машине не ездят», никогда не платили. В то время СССР в шутку называли «Страна Одной Дискеты», и в некоторых случаях, эта первая легальная дискета с программой как раз происходила из ЦНИИЭ из нашего ВЦ. Однажды мне пришла посылка, в которой было сразу несколько «Эпохальных продуктов»: текстовый редактор Word от Microsoft сразу пошел в дело, заменив Лексикон, база данных Rbase казалась настолько лучше dBase, что я сразу же перевел все имеющиеся у меня базы на новую платформу, поскольку она позволяла работу с нескольких терминалов, а у меня в центре в то время работало уже 18 девочек, в основном занимавшихся вводом данных по обследованиям населения на СПИД. Была там еще программа под названием WINDOWS от фирмы Microsoft – конкурента нашего Моссофта, но как я не бился с ней, понять как она применяется не смог – какие-то маленькие иконки на экране, но зачем они?

А вот с новым табличным процессором SuperCalc все сразу стало ясно: намного удобнее и лучше аналогичных Multiplan и Lotus123, а Excel тогда ещё не было, и я начал активно внедрять эту программу для всевозможных статистических расчетов для наших медицинских приложений, кстати сказать, в ЦНИИЭ официально я числился старшим научным по лаборатории Медицинской Статистики, а руководство ВЦ было вроде общественной нагрузки. На этом SuperCalc я, по просьбе Ирины Львовны, даже сделал Систему Расчета Заработной Платы института, но об этом читайте отдельный рассказ «Буква Б»; скажу только, что кончилось это плохо.
Программу SuperCalc разработала американская компания СА – Computer Associates, и все в ней было замечательно, за исключением графиков, отображающих данные. Точнее графики она рисовала очень хорошие и разнообразные, особенно на новых графических дисплеях типа EGA/VGA, но вот заголовки и подписи на них делала исключительно на английском языке, а нам хотелось на русском. При работе со spreadsheets загружаешь таблицу кодов с кириллицей и все работает, а вот на графиках никак ничего не отображается, даже умляутов нет. Памятуя мой успех с принтерами, я собрался с силами и взялся за русификацию SuperCalc.
Довольно быстро я обнаружил рабочий файл SCFONT.DAT, где очевидно находились закодированные символы (fonts), и загрузил его в свою Бейсик программу, которая помогла разобраться с игольчатыми принтерами. Ничего не вышло: менял параметры во всех мыслимых вариантах – никаких букв или их следов. Тогда я решил поискать в файле саму кодовую таблицу из 256 двоичных кодов символов, зная что «А» имеет номер 65, «В» - 66, «С» - 67, и так далее, и действительно обнаружил нечто похожее: таблицу пар чисел, где сначала шел номер символа, а потом некоторое число, которое вероятно показывало адрес в файле, где хранится само изображение этого символа. Как говорят, взял след, теплее…
Переходя по этим адресам я всегда попадал на число 255, и предположил, что это маркер начала хранения информации об определенном символе, позволяющей его отобразить на графике. Длина информации для каждой буквы была небольшой, 10–20 байт, но различной, что было немного странно, поскольку я предполагал, что размер матрицы должен быть фиксирован. Однако ни 14 на 8, ни 9 на 12, и никакой другой размер не подходил, и ничего похожего на буквы или цифры не проявлялось.
Несколько дней я возвращался к этим последовательностям байтов, пока не обратил внимания, что числа 68 и 78 повторяются очень часто, причем формально 68 это код буквы «D», а 78 – буквы «M». Более того, как после «D», так и после «М» всегда идет пара каких-то других чисел (два байта), а потом опять D или реже M. Может это ещё какие-то адреса или координаты. - Ещё теплее, даже горячо!

Там где предполагалось, что «сидит» буква «А» находилась последовательность: M(0,0) D(5,15) D(10,0) M(2,6) D(8,6). Я нарисовал на бумаге в клеточку точки в координатах X и Y, соединил их прямыми линиями и нарисовалась именно «А»!!! Так был открыт «векторный шрифт», где символы изображаются кусочками прямых линий - векторами, а те шрифты, которые состоят из точек, называются «растровыми». Само слово растр происходит от латинского rastrum, что означает грабли, которыми можно провести параллельные полосы род прямым углом и получится сетка или матрица, где точками рисуется символ или другая картинка. А «М» и «D» оказались командами для рисования: M(move) – ничего не рисуя, перейти в точку с координатами X и Y, а D(draw) – провести линию в следующую точку. В наше время практически вся компьютерная графика и шрифты (fonts) кодируются как векторные, а растровые или точечные используются в индикаторах некоторых приборов, Тем не менее на экранах телевизоров и дисплеев все в конце концов изображается включением тех или иных точек пикселей, то есть даже векторный текст «растеризуется», превращаясь в набор пикселей.

Полный анализ файла SCFONT.DAT показал наличие целых шести различных шрифтов: обычный, жирный, курсив и тому подобное, и для каждого я нарисовал эквивалентный набор букв кириллицы; особенно пришлось помучиться с готическим шрифтом – жалко, что ничего у меня с тех времен не сохранилось, чтобы сейчас продемонстрировать читателям, но получилось очень изящно.
Где-то в начале 90-х, будучи в Израиле, я рассказал о моей обсессии с русификацией своему бывшему коллеге по Карповскому институту Саше Кону, который в то время работал консультантом в компании Микрософт. Через пару недель он мне позвонил и сказал, что для меня есть заказ: какой-то его клиент хочет не русифицировать, а ивритизировать SuperCalc, чтобы можно было воспроизводить графики на иврите. Нужно было разработать только три шрифта, к счастью, без готического, но потребовали, чтобы я отказался от авторских прав – оказывается дизайн шрифта можно патентовать. Я отправил Саше результат работы, и получил чек на три тысячи долларов, что для нового репатрианта было весьма кстати. Больше шрифтами я никогда не занимался, да и про SuperCalc больше ничего не слышал – наступил век EXCEL.
סוף הסיפור
При написании этого рассказа я время от времени консультировался у искусственного интеллекта. Боже, как же все тогда было просто.
© Dimus, Feb 2025
Ах, какие воспоминания! И незабываемый Диггер. И весьма интересный период жизни...😘
Историческая вещь! Каждая наука имеет свою историю!
Test comment
😮
Interesting
Очень тепло и увлекательно одновременно. Это про эмоции от прочтения. И очень точные эпиграфы. Особенно к месту второй. Спасибо!