Программы, Хакинг | Олег Брагинский
Как создавались первые программы? Чем руководствовались и с какими сложностями сталкивались разработчиками? Опытом делится Олег Брагинский, основатель «Школы траблшутеров» и автор известной утилиты, которой на днях исполнилось четверть века.
В 1991 был допущен к компьютеру общего пользования на кафедре Факультета информатики Киевского политеха. Мне отмерили 30 минут в неделю, начиная с заветной даты. Запустив машину в указанный срок, обнаружил чёрный экран с мигающим курсором в нижней строке.
Расспросив лаборанта, узнал, что имею дело с операционной системой MS DOS 3.30. Выведал текстовые команды и обнаружил… зияющую пустоту. Не обрезаю нижний край экрана, чтобы вы ощутили охвативший меня ужас, когда понял, что на дискете оказался единственный файл:
Одногруппник Евгений Краштан, «придумавший» профессию переворачивателя пингвинов…
… на вздохи ответил: «Нужна программа? Напиши!» У меня уже был «опыт разработки» на BASIC: для 8-разрядного школьного «Корвета» создал игру «Пять в ряд». Никому не удавалось победить машину, для этого потребовался труд учебного года, включая визиты по выходным.
Женя великодушно записал на мою единственную пятидюймовую дискету Amkette, ёмкостью 360Кб, текстовый процессор Norton Editor. В нём оказалось возможным безнаказанно набирать произвольный текст, а после убогого окна DOS интерфейс казался привлекательно-неземным:
Заведующий кафедрой Каневский Юрий Станиславович заявил, что учёные работают в специальной программе и «…приехавшие инженеры Motorola, должны увидеть профессионалов, а не зелёных сопляков…». Так узнал о научном редакторе ChiWriter:
Став профоргом факультета, получил допуск к компьютеру деканата, где все работали с текстовым процессором Лексикон. Программа проверяла орфографию, переносила текст по слогам, поддерживала многооконный режим, бравировала многоцветностью:
Позже появился «Слово и Дело», но в первых версиях ничего кроме эффектно проваливавшихся при удалении зелёных символов предложить не мог и не был интересен до 8-й версии, разросшейся до неприличных размеров, но получившей графический интерфейс:
Накопив претензии к существующим разработкам, созрел написать собственный редактор. Стартовым названием выбрал «BrEd» (Braginsky Editor): при наборе с командной строки короткие имена программ считались милостью разработчиков. Дебютными идеями выбрал:
- Малый размер программы – не более 64Кб, чтобы хотелось носить с собой.
- Индустриальная совместимость – не надо переучивать сочетания клавиш.
- Неограниченная длина строки, чтобы править даже исполняемые файлы.
- Максимум функций, чтобы не манило переключаться на конкурентов.
- Высокая скорость исполнения предельно сложных макрокоманд.
В первой версии отказался от интерфейса, решив, что хакеры отменно знают сочетания всех клавиш, а подобный подход сэкономит на рамке окна два символа. Сегодня это кажется несущественным, но посмотрим на масштаб экранов тех лет в сравнении с мониторами 4К:
Система помощи появилась спустя три года, когда сам стал забывать о многих возможностях программы. Катализатором стала просьба уважаемого академика, который сказал, что ежедневно проводит в окне HED часы, но регулярно забывает редко задействуемые «фичи»:
Кстати, если вам за 40 и всё ещё сомневаетесь пользовались ли моим редактором, покажу как выглядел файл справки изнутри. В этот момент многие закричат: «О, да!» Интрига в том, что человекочитаемый документ позволял править подсказку для конкретных утилитарных задач:
Уже первый раздел, описывающий главное окно программы, показывал, что доступен широкий набор изобразительных средств. Использование псевдографики в те годы казалось элегантным решением тем более, что HED поддерживал множественные режимы работы с ней:
Предусматривалась возможность чертить одинарные и двойные линии, рисовать выбранным символом, использовать ластик. В режиме стирания восстанавливались пересекаемые линии, чего тогда не предлагала ни одна программа. Правда, и сейчас похожего функционала нет:
Гордился и возможностью вставлять таблицы прямо в текст. Можно было выбрать один из шести предустановленных стилей обрамления, а также размерность количества линий и столбцов. Ячейки оставались доступными для разбиения, объединения и дорисовывания:
Редактирование «ломало» бы стройный вид таблиц, поэтому предусмотрел растяжимую резиновость. В режиме вставки (мигающий вертикальный курсор сменял тонкий лежащий) при достижении правой границы, ячейка расширяла столбец, чтобы вместить содержимое:
При удалении текста самой широкой ячейки столбца происходило сжатие таблицы, что радовало студентов и аспирантов при написании лабораторных, курсовых, дипломов и диссертаций. Табуляция позволила перемещаться между колонками, Enter добавлял строку:
В очередной версии пришлось реализовать работу с вертикальным блоком и вычисления в тексте. Сделал доступными смешанные операции, где в строке можно было использовать шестнадцатеричные, десятичные, двоичные числа, скобки и тригонометрические функции:
Осторожность заставила предусмотреть зависания операционной системы при вычислении сверхбольших результатов. Побочным следствием стала возможность снимать зависшие программы из памяти. HED начал использоваться для программирования себя самого:
Андрей Бигдан написал bat-файлы, чтобы разработчики могли интерпретировать и компилировать программы на разных языках: Assembler, Pascal, C, C++. Он же написал инсталлятор для консольной версии Rar для установки HED на русском и английском:
Из-за невозможности реализовать многоконность, оставаясь в сверхлёгком весе (HED так и не перешагнул 64 Кб), сымитировал её переключением между десятью последними изменёнными файлами. Сегодня дико на это смотреть, но на экране видно, что 9 из 10 находятся на дискете:
В те годы ещё не было библиотек и даже визуализацию открытия файла приходилось писать с нуля. Когда в 1995 один из студентов заявил, что напишет программу не хуже, его прототип, содержащий только главное окно и работу с файлами сразу же занял 143Кб. Парень сник.
Попытки добавления объёмности привели к появлению теней под кнопками, но в отличие от современных систем область экрана под объектами не запоминалась, а перерисовывалась заново. Учитывая разношёрстность мониторов, проверял видимость и в чёрно-белом режиме:
Всё больше возможностей появлялось по работе с блоками. Наличие в окружении живого автора повседневной программы приводило к потоку запросов, некоторые из которых радовали возможностью реализовать новый функционал. Например, нумерацию строк:
В какой-то момент поступил «заказ» обеспечить исполнение команд операционной системы без выхода из программы. Кто бы мог подумать, но это коренным образом изменило восприятие вырисовывающейся среды. Энтузиасты стали вставлять HED последней строкой в autoexec.bat:
Эстеты «потребовали» реализовать выход в открытый космос. Так родилась поддержка сочетания клавиш Alt+F5, которую использовали программисты, экспериментируя с кодом, который завешивал систему, но теперь появился шанс безнаказанно вернуться к работе:
Microsoft Word ввёл в обиход новое понятие – макросы. Чтобы идти в ногу со временем срочно реализовал похожий подход. Долго не понимал зачем, но однажды, когда не смог запрограммировать очередную задачу, воспользовался своими же макросами. Понравилось!
С появлением VGA-мониторов экспериментировал с количеством строк. Символов в строке всегда оставалось 80 и с этим ничего было сделать нельзя, а вот вертикальный размер увеличивался в 2,4 раза. При выходе из редактора режим экрана можно было сохранить:
Дочитавшие до текущего абзаца задаются вопросом, а что хакерского делал редактор? Один из режимов, которым пользовался регулярно стала серия окон, вызываемая через Pad[5] – так в доноутбучную эпоху называли пятёрку на дополнительной цифровой клавиатуре справа:
При первом нажатии вызывалась таблица, демонстрирующая палитру сочетания цветов фона и шрифта. Внизу показывался пример текста выбранной позиции, после чего следовали коды комбинации в шестнадцатеричном и десятичном формате, которые Enter'ом вставляли в текст:
Второе окно помогало определить код нажатой клавиши или их сочетания. Пессимисты зафукали: «Есть множество специализированных утилит, зачем повторять существующие решения?» Через время вернулись: «Ты был прав: здорово иметь всё в одном флаконе».
Третье окно серии демонстрировало таблицу символов. Её можно было выучить наизусть. Так поступил и я, но стали появляться программы, норовившие заменить стандартный ASCII-ряд, чтобы реализовать красивые рамочки, рюшечки или псевдографический курсор мыши:
Появление Windows хакеры восприняли с издёвками: «обезьянья оболочка», «иконостас». Но пользователи или ламеры, как мы их тогда называли, радостно восприняли повышение наглядности взаимодействия. Пришлось к перекодировкам добавить свежие таблицы:
А ещё поддержать работу с буфером обмена: забирать текст в редактор с трансляцией символов и совершать обратное действие. «Окна» частенько падали в «синий экран смерти», поэтому предусмотрительно сохранял, находящееся в «кармашке» во временный файл:
Гордился режимом непрерывного форматирования. Редакторы-предшественники обрезали текущую строку абзаца только при достижении правой выставленной границы текста. HED делал это по-взрослому, форматируя блоки после каждого символа. Спустя год научился и Word:
Ввёл дублирование скобок при вводе левой с перемещением курсора внутрь обрамления. Выучившись слепой печати, придумал режим, при котором набираемый текст оставался на той же экранной строке. Позволяло не стрелять глазами, как на печатной машинке:
Бухгалтерия ректората явилась с ультиматумом: сделай возможность переводить числа в слова для ведомостей. Пришлось сесть за компьютер при гонцах, и через полтора часа упрямые женщины унесли на дискете версию, которая умела выполнять желанную для них функцию:
Открывшийся ящик Пандоры хлопнул крышкой, прищемив обе руки. Постепенно всё, что умели другие программы редактирования текста пришлось привнести в HED. Среди прочего – перевод букв из строчных в заглавные, не переключённую русскую клавиатуру в английскую:
Необычным поручением стали графические примитивы. О Visio ещё не слышал, но придумал способ размещать объекты в рамках со связями и стрелками. Помог опыт работы с Русланом Антоновым и Евгением Молдавским над «ПРОГраммой МОделирования Логических Схем 1.0»:
Крепким орешком оказались графики, но без них мне шутливо грозили отозвать пятёрку на экзамен, полученную автоматом. Представляю, как сейчас поперхнутся разработчики, привыкшие использовать готовые библиотеки. 25 лет тому назад подобной роскоши не было:
Как-то в лабораторию уверенным шагом зашёл инженер по охране труда. Все засуетились, но сотрудник, заметив меня, грозно спросил: «Сможешь придумать, как рисовать планы аудиторий?». Мой научный руководитель закивал головой. Пришлось вызов принять:
Подобная, но менее кровожадная история, заставила продумать размещение сложных графических объектов на безразмерном полотне. Не скажу, что удалось внедрить всё задуманное, но парочку курсовых мне засчитали без всяких на то подобающих оснований:
Настоящий авторитет удалось сформировать, когда стали захаживать легендарные личности. Если без фамилий и пафоса, это были люди, которым без HED’а никогда бы не получил шанса пожать руки. Говорили спокойно, общались уважительно, просили то, что сделать мог:
Новый функционал сразу поднял редактор на несколько ступеней вверх, а версии, предъявляемые «на утро», позволяли общаться на равных. Интернета ещё не было, поэтому звонили на стационарные телефоны, встречались у входа в корпус, списывали софт на дискеты.
Программой заинтересовались ВУЗы, причём в самом неожиданном ключе. Помните, писал, что файл подсказки был открыт для редактирования. Появились идеи и добровольцы, которые наполняли help.txt подсказками для химических реакций, философскими терминами:
С появлением сетей встала проблема печати на нерусифицированные принтеры и распределение настроечных файлов в директориях. Пользователи хотели различное поведение HED’а для решения разных задач. Использовали более одной копии на машину:
Как-то застали врасплох просьбой сделать произвольной цветовую раскраску. Заметив нескрываемое удивление на лице, привели аргумент, который принял безоговорочно: «Так сможем обманывать пользователей, подсовывая твой редактор, имитирующий нужную гамму»:
Постепенно появился «крест», выделяющий строку и столбец, что помогало выравнивать программный код. В правом верхнем углу против воли создателя замерцали часы. Через x минут экран гасился, чтобы запустить скринсейвер, спустя y срабатывало автосохранение:
Вертикальный блок научился вычислять и вставлять по месту расположения курсора сумму значений элементов. Определять среднее. Подсчитывать количество. Нумеровать строки. Всё реже приходилось пользоваться сторонними программами, но это уже превращалось в сюр:
Десятки способов поиска не оставляли шанса на благоразумие. Приступил к рефакторингу, создав «безразмерную» таблицу сочетаний клавиш конкурентов, чтобы с помощью «голосования» вешать на наиболее очевидные кнопки наиболее подходящий функционал:
Написание статей в журналы ВАК привело к мысли, что неплохо было бы научить софт проставлять номерные многомерные ряды. Свои задачи реализовать смог, но на общий суд не выносил: сохранялось ощущение, что не до конца отладил плохо формализованный код:
Зато как было здорово улучшать проект на нём же самом. Каждый файл был создан именно в HED: таблицы, рамочки, тени. Уверен, сегодня это выглядит доисторически архаично, но четверть века назад каждая новая функция делала счастливыми тысячи незнакомых людей:
Внимательные возразят: «Постойте, HED’у 24 года!» И да, и нет. Версия «7.40» была финальной. Нравилась созвучность с известной песней. Но ровно через год пришлось сдаться под напором людей, которые хотели правок, модификаций и прочих, наверное важных, мелочей.
Разработка программы заняла пять лет, в ходе которых получилось создать текстовый комбайн, обладающий 746 функциями, возможностями и режимами. Теперь знаете откуда взялась это число. Сначала приходилось подсаживаться за чужие компьютеры, затем появился свой.
Сделал редактор главой диплома, описав наиболее удачные находки:
- Перенос слов по слогам без словаря. Алгоритм подошёл к большинству европейских языков.
- Скрытая работа с архиваторами. Пришлось научиться принимать пароли сжатых файлов.
- Прямая работа с микросхемами. Например, для ускорения работы клавиатуры.
- Угадывание языка набора. До появления Punto Switcher оставалось пять лет.
- Зеркальные режимы. Для поддержки арабского и ряда азиатских языков.
Гром грянул в октябре 2009 года: Windows 7 запретила непосредственную работу с видеопамятью. Цунами требований восстановить полезность HED оказалось не смешным, но в это время на передний план вышла корпоративная жизнь и проект пришлось закрыть.
Чтобы не завершать историю минорно, подсыплю несколько забавных баек. Когда задумал реализовать вычисления в тексте, запутался с приоритетом операций и скобок. Пришёл к преподавателю, который читал компиляторы. Тот устало произнёс: «За колонной сидел?»
Ирония состояла в том, что преграда в аудитории была одна, а ссылались на неё все. Мне позволили переписать от руки (ксероксов ещё не было) несколько страниц теории о «Польской инверсной записи». Был шокирован, что теория была придумана задолго до персоналок.
Второй случай произошёл на Караваевых дачах – радиорынок в Киеве, наподобие московской Горбушки. Меня высмотрел продавец компакт-дисков и подарил только вышедший альбом Майкла Джексона. Сопровождающие заржали, когда меня назвали Всеволодом Волковым.
Финальным аккордом пусть будет такая история. За мной прислали шикарный Мерседес и привезли в квартиру на Крещатике. Стильный интерьер, отменный вид из окна, дружная семья известнейшего человека. Думал, буду делать что-то полезное, но позвали ребёнка подучить.
Учитывая уважение и гонорар, превышающий суммарную зарплату родителей в пять раз, не колеблясь согласился на унизительную миссию. Когда девочке представили меня как автора программы, она испугалась, спряталась за маму и произнесла: «Я думала, вы уже давно умерли!»