Тут у меня истории несколько разбегаются по темам, поэтому я их и собрал по темам, а не по времени. И большинство тем оказываются о компьютерах и программировании. Но в общем и целом они приходятся на время моей учебы в институте, то есть примерно 1991-1995 годы, иногда чуть заскакивая в соседние.
О коммерции и ее отсутствии
Тут, наверное, подходящий момент несколько отступить назад и рассказать немножко больше о том, как ЧМК когда-то покупал технику Оливетти. Покупал он не сам по себе, а единым контрактом всего Минчермета (Министерства черной металлургии). И помимо организованной покупки министерство организованно занималось адаптацией - часть для железа была вписана в контракт, так что скажем клавиатуры и принтеры сразу шли с русскими буквами, а частью для программ - чтоб они в первую очередь умели понимать русские буквы, ну и вообще общий опыт по внедрению, делали лаборатории при министерстве. Лаборатории эти были не центральными, а распределенными. И в-принципе ЧМК предполагался быть одним из таких центров. Но начальник отдела АСУП Анатолий Павлович Спиридонов выступил против. Так что уральскую лабораторию поместили в какое-то НИИ в Свердловске (ныне Екатеринбурге). Как потом оказалось, это было очень неудачное решение со стороны Спиридонова.
Свердловская лаборатория сначала стала изрядным источником мудрости в Минчермете, а потом люди из нее на этой основе раскрутились в серьезную коммерцию с поставками оборудования. Дядечка по фамилии Никитин (по имени возможно Александр, но я уже плохо помню и совсем не уверен) там был начальником и вождем конторы. Контору он потом уже в самом начале 1990-х перевез в Москву, и я раздумывал, не попроситься ли к нему, бросив институт, но так в итоге и не стал, страшно было чтоб в армию не загреметь, да и всех усилий на поступление было жалко. Помню про масштаб цен, которые я рассматривал: что скажем если зарабатывать по 150 долларов в месяц и платить 50 за квартиру, то целых 100 останется, много денег.
Это, напомню, было время, когда доллар уже начал более-менее свободно обмениваться и шел по около 10 рублей, а мой оклад за полную ставку был 160 рублей в месяц. Стипендия в институте, кстати, была 40 рублей, а повышенная, если сдать сессию на отлично - 60. Это вообще меня несколько поражало, что платят деньги не за работу, а за посещение учебы, за которое впору наоборот брать деньги. Но раз платили - брал, не считал за оскорбление. Тут еще у ЧМК был вариант, что они платили дополнительную стипендию, что-то типа 20 рублей, если обещаешь после института к ним распределиться. Ну а мне, собственно, что еще надо, мне это было очень удобно, и на практики я везде ходил на свою же работу на ЧМК, так что конечно записался под это получать и дополнительные деньги.
К середине 1990-х никитинская контора доросла до покупки под офис бывшей коммунальной квартиры (что-то типа 10-комнатной) с видом на памятник Гоголю. Я там был уже позднее, в 1996 году, когда у них покупал компьютеры уже Челиндбанк.
ЧМК вообще в этом плане был конторой с отсутсвием толковой коммерческой жилки у руководства. Чуть позже, уже наверное после конца СССР они сделали бартерную сделку с Тошибой: обменяли металл на производство телевизоров и видеомагнитофонов. Открыли сборочное производство в пустом помещении возле 3-го электросталеплавильного цеха, и продавали сотрудникам занедорого. По разнарядке, как скажем при СССР продавали так же добытые импортные зимние сапоги. Но потом как изначальный контракт закончился, дальше сборочный цех закрыли. Ну, понятно, что продавать по той цене было на самом деле в убыток (особенно, через год от начала производства, когда уже прошла существенная инфляция). Но можно ж было и по коммерческой цене продавать, с прибылью. Но нет, вот в качестве снабжения сотрудников - это да, а коммерчески - нет, у руководства такого в интересах не было.
Организационные изменения
Но вообще в Челябинске все тоже бурлило. Леша Морозов, бывший в отделе АСУП системным программистом для персоналок, основал свою контору по торговле компьютерами и ушел туда. Следующий системный программист - насколько я помню, из недавно принятых молодых специалистов, но имя напрочь не помню, через какое-то время подался в торговлю мясом на рынке. Так что в отделе АСУП это место пришло ко мне. Но тем же занимались еще и в соседнем отделе АСУТП, так что в итоге в году наверное 1992-м меня присоединили туда, в группу под названием "Полигон АСУТП". Полигоном он назывался поскольку опробовал различные технические решения перед внедрением. Начальник отдела АСУТП - э-э-э Валентин, что-ли, но точно Павлович Шилейкин, правда, оказался несколько нехорошим человеком, и оклад мне срезал до 140 рублей. Это еще доинфляционные рубли. В отличие от руководства из АСУПа, он меня не ценил, да и остальных в-общем тоже не очень, ценение у него прорезалось только когда народ стал разбегаться, да и то хреново. Но мне тогда деньги были не сильно принципиальны, мне был более интересен опыт, так что ладно уж.
Полигон состоял из Александра Чернова - начальника, Валерия Ильина, Дмитрия Гасенко, и меня.
Время от времени долетали халтурки - то тому же Леше Морозову что-нибудь помочь установить, то я на заводе автоприцепов устанавливал крякнутую Венчуру Паблишер (смешная история - они официально купили охренительную рабочую станцию, с профессиональным монитором вертикального А4-го формата, и к ней официальную Венчуру с копирайтной затычкой для параллельного порта, но она нифига не работала, пришлось добывать крякнутую), то какие-нибудь возможности что-нибудь крякнуть (crack-нуть) за деньги подворачивались. То я лекции про Юникс читал, но это отдельная история.
Закупки
ЧМК постепенно расширял использование персоналок, и где-то наверное около начала 1992 года (оно как раз стало поводом к основанию полигона АСУТП) закупили еще, у какой-то датской фирмы (я так понимаю, что тоже связанной с Никитиным). Это тогда рассматривалось важным моментом, "белая" (европейская) сборка считалась более качественной, чем "желтая" (азиатская). Вроде бы, купить у Оливетти они тоже пытались, но Оливетти хотело больше денег. Правда, как потом оказалось, у не-брендовых машин оказалось похуже с эргономикой, качеством и надежностью - как рассказывал Валера Ильин, "мы-то думали, что Оливетти нас совсем дурит, а оказалось, что и правда есть разница", но вполне работало.
Тогда 386-е процессоры дошли до 33 МГц (они, кстати, в купленных машинах были от АМД), и появились первые 486-е. 486-х купили то ли одну то ли две штуки, они были гораздо дороже 386-х. Но и гораздо быстрее. Тогда у нас была популярна какая-то программа, которая меряла скорость в эквивалентах к изначальному IBM PC и показывала ее в виде горизонтальной "палки". У 386/20 эта палка растягивалась на ширину экрана (это было что-то типа больше десятка IBM PC), у 386/33 заворачивалась на вторую строку, а у 486 заворачивалась на что-то типа трех или четырех строк. И тогда же купили первый на заводе лазерный принтер, LaserJet II, или как-то в этом роде.
Ну и типовым "бонусом" для руководства и участвующих инженеров была поездка в заграницу, к источнику, типа как для изучения опыта. Я тогда был не в той категории, а так много народу тогда съездило, посмотрело на "Русалочку" Андерсена. Но и изучение тоже было: физически купили и привезли назад книжек. Там были книжки и про программирование на Юниксе вообще, и конкретно про сети.
Одна из книжек мне запомнилась: там одним из примеров была портабельная реализация сопрограмм (слово "threads" тогда еще не очень-то и существовало, но по сути это были они), с помошью функций setjmp/longjmp, целиком на Си, без ассемблера. Это было для меня интересным открытием. Там же говорилось, что но вот на машинах Сан (Sun) оно работать не будет, поскольку у Сана имеется аж два стека: один обычный, а второй для сохранения регистров, и зарезервировать место под стек регистров не получается. Меня это заинтересовало и я придумал, как эту проблему обойти. В том примере место на стеке резервировалось через вызов функции, которая создавала на стеке фиксированный большой массив, таким образом оставляя место для роста стека текущей сопрограммы, и дальше вызывала функцию, которая запускала следующую сопрограмму. Но ведь ничего не мешает так вызывать рекурсивно несколько функций! Я создал две функции: одна резервировала килобайт памяти, а вторая - ничего (кроме собственно служебной части вызова). И соответственно стек резервировался как два параметра: сколько килобайт памяти и какая максимальная глубина вызовов. Эти две функции рекурсивно вызывались нужное число раз, резервируя место и на обычном стеке, и если в машине есть отдельный стек для регистров, то и на нем тоже, по числу рекурсивных вызовов. Но сановской машины, чтобы проверить, работает ли оно как задумано, у меня не было. Тут пришло на помощь ФИДО, про которое я еще расскажу: на КамАЗе были Саны, и Анатолий Лисовский оттуда попробовал мою программу. Она работала как задумано.
Потом позже покупали технику у Хьюлетт-Паккарда (тут точно через контору Никитина как реселлера): персоналки (уже 486), и мини-машину из 9000-й серии для отдела АСУП. Там я принял более активное участие в написании спецификации. Меня тогда распирал интерес, а не получится ли в качестве настольных машин получить за те же деньги рабочие станции 400-й серии на РИСК-процессоре. Я даже написал сравнение с плюсами и минусами. Ну, это конечно был типовой случай "рационализаций", когда люди стараются подвести как бы рациональную базу под свои хотелки. Младшая рабочая станция в-принципе выходила довольно близко по цене к персоналкам, но не совсем. Плюс оно бы создавало отдельные проблемы - от необходимости закупки отдельной версии Оракла (который тогда еще закупали в единственном экземпляре и тиражировали сколько надо, а как выяснилось, рабочие станции у ХП были похожи по архитектуре на мини-машины, но не совсем) до отсутствии возможности запускать МС-ДОС и Виндовс (эмуляторов тогда еще особо не было). В этот раз не помню, ездил ли кто-то куда-то, но точно, что опять не я.
От этого оборудования мне запомнилось два момента. Один - то, что у персоналок один экземпляр клавиатуры был американским, а остальные с русскими буквами. Американский вариант был сделан в США, а русские - в Малайзии. И весьма радикально отличались по качеству. Американский был не хуже Оливетти, а малайзийские - гремящие, без хорошего тактильного чувства, типа тех, что покупали у датчан. Вообще, кстати, в наши дни я не понимаю того, как люди кидаются на герконовые клавиатуры и тому подобное, когда повсеместно есть очень-очень хорошие клавиатуры с резиновой мембраной. Герконоые клавиатуры совершенно нетактильные и ужасные на ощупь, как дешевое говно из начала 90-х. А резиновая мембрана имеет замечательное свойство: у нее сопротивление нажатию сначала увеличивается, а потом когда кнопка прожимается, сопротивление падает, и дает надежное ощущение, что кнопка нажата. Ну, конечно, у короткоходовых клаиватур, которые ставят в лаптопы в погоне за тонкостью вслед за проклятым убогим Эпплом, ничего этого нет, их клавиатуры ужасны.
Вторым интересным элементом оборудования был принтер для мини-машины. Он был матричным, но не обычным матричным, где иголки на головке расположены вертикально. Раз уж зашла речь, то и матричные принтеры "обычного" вида бывали довольно необычными тоже. В тупо совсем обычном дешевом принтере (какой был освоен даже советской промышленностью) имелось 9 иголок, расположенных на головке вертикально. Головка ехала слева направо и печатала строку. В принтерах от Оливетти (ну и позже во всех массовых принтерах) все было в-принципе так же, но такой режим назывался "черновик". А был еще и режим "качества", где головка делала еще и второй проход, печатая со смещением на половину иголки, так что оно давало и больше черноты в буквах и более высокое разрешение. Наконец, был на ЧМК и один более быстрый принтер от Оливетти. В нем во-первых головка содержала сразу два набора иголок, и во-вторых металась налево-направо со страшной скоростью, печатая быстро (ну, по сравнению с обычнами матричными принтерами) и качественно (делая ту "качественную" печать за один проход вместо двух). А в ХПшном принтере иголки вообще были расположены горизонтально во всю ширину бумаги. Никаких ездящих головок, бумага движется, точки печатаются. Бумага в него шла с дырочками по бокам, свернутая "гармошкой". И выходила скорость как у оливеттевского ленточного принтера от LSX (в котором буквы были выгравированы на стальной ленте, которая крутилась впоперек бумаги и отпечатывались молоточками, когда нужная буква проезжала мимо нужного места), ну или более древнего советского барабанного принтера (с подобным же принципом, но буквами выгравированными на барабане, который крутился в том же направлении, что и двигалась бумага, из-за чего буквы на листе "прыгали" при неточной настройке, а точную настройку было сделать очень трудно), но с возможностью печати графики, альтернативных шрифтов, и тому подобного. Кстати, лазерные принтеры такого же формата тоже существовали, и были еще гораздо быстрее, но и гораздо дороже тоже.
Ну, и в третий раз я поучаствовал при покупке новой АТС, это уже было лето 1994 года. Я там участвовал со стороны использования этой АТС для прокладки сетей до цехов. АТС была канадская Northern Telecom, но продавала ее австрийская фирма Капш. Она умела поддерживать что-то типа DSL, поэтому мы планировали разведение всех этих каналов от центра до цехов для создания общезаводской сети. С технической стороны, там получилось два отдельных обсуждения: телефонистов и нас, сетевиков. Переводчик имелся, но был единственный, и потому в первую очередь у телефонистов. Ну, а пока мы сидели и ждали, то сумели сами объясниться по-английски. Несколько с горем пополам, ни мы ни австрияки его не знали особо хорошо, но вполне нормально объяснились. Помню, был интересный момент с объяснением слова "блюминг": это цех, где стоит прокантный стан, который раскатывает "слябы" - отливки, вышедшие из сталеплавильной печи, в "блюмы", придавая им более плоскую форму, которые потом засовывают в обычные прокатные станы. А по-английски "блуминг" (и по-немецки "блюминг") означает "цветущий", так что название вызвало у австрийцев веселье. Тут "бонусом" была поездка в Австрию, и в этот раз меня туда записали. Мне уже сделали за счет завода загранпаспорт, и собирались ехать в январе 1995 года, но тут мне предложили место в Челиндбанке, и я ушел туда, так и не съездив в Австрию. Но паспорт потом пригодился.
Коммерция на кафедре
На кафедре ЭВМ в институте тоже взбурлила коммерция после окончания советской власти, сразу по нескольким направлениям. Они и разрабатывали под заказ базы данных, и железо (доморощенное подобие Эзернета, более медленное, но более дешевое как с точки зрения самих плат, так и с точки зрения использования телевизионного коаксиального кабеля), и торговали вычислительной техникой, и открыли магазин технических книжек по программированию и электронике.
С этого была большая польза для учебного процесса. Класс ИБМоподобных персоналок Мазовия на замену старому классу ДВК они купили именно с доходов от коммерции. И книжный магазин был очень толковый, наконец-то появился в городе хороший источник технических книжек по компьютерам, гораздо лучше, чем в остальных магазинах. Книгоиздание тогда сильно расцвело, наконец-то не стало нужно записываться в очередь в надежде что что-то достанется, а приходи-смотри-покупай. Вот например "Исскусство схемотехники" Горовица и Хилла я купил именно там. Еще мне запомнилась книжка, сборник лекций лауреатов Тьюринговской премии, присуждаемой ACM (Association for Computing Machinery - Обществом по Вычислительным Машинам). Там была среди прочих лекция Кена Томпсона о том, как встроить в код "закладку", не распознаваемую в исходном коде - когда она заложена в код компилятора, который воспроизводит ее и при компиляции самого компилятора, и при компиляции собственно программы, которая дает несанкционированный доступ. Как оказывается, такая закладка действительно была им встроена в Юникс (хоть в лекции об этом и не говорится). Но, конечно, работает оно только до тех пор, пока кто-то не использует другой компилятор.
Еще кафедра стала реселлером Netware (Нетвэр, хотя в обиходе его обычно называли Нетварь), и его же учебным центром. Так они проводили обучение за деньги, но студентам оно входило в программу, в курсе по сетям, и бесплатно выдавали сертификат. Так что я стал еще и сертифицированным администратором Нетваря. Нетварь - это была такая странная, но типичная для своего времени штука - как бы операционная система, но как бы и нет. Главным ее проявлением, за что ее покупали, был разделяемый сетевой диск для машин с МС-ДОС. Но машина, на котором запускался сервер сетевого диска, действительно имела свою собственную операционную систему. И там у нее был свой собственный формат выполняемых файлов, свой формат файловой системы, и даже своя собственная база данных, в которой хранились права доступа к файлам. Другое дело, что других программ кроме как "из коробки" под эту операционную систему не существовало, как и средств разработки под нее.
Одно время была активная кооперация между ЧМК и кафедрой. Их люди приходили к нам на полигон смотреть на 486-ю машину, которая была если не первой в городе, то одной из первых, и на Юникс/Ксеникс. Но потом оно так и стухло, Валера отзывался о них неодобрительно. Как потом выяснилось, дело было в том, что они предолжили что-то продать за деньги. В то время была еще традиция обмениваться информацией бесплатно, как взаимовыгодный процесс, и они этой информации получили довольно много с ЧМК, и вот оттуда пошли обиды о невзаимности.
Почта
Сидел я как-то на работе (тогда еще в АСУПе, это наверное год был примерно 1992, я учился на 2-м курсе), и приходит ко мне Костя Соколов, которого я знал еще с Клуба "Компьютер". Костя тогда уже успел поступить в ЧПИ на дневной, вылететь с него, отбыть армию, и по моим следам пойти работать на ЧМК, но не в центральный отдел АСУП, а в цеховую автоматизацию. Приносит дискеты с демонстрационной версией Маткада для Виндовс.
Маткад (Mathcad) был замечательной программой для решения уравнений, включая дифференциальные, символического вычисления производных, рисования графиков. Все это можно было собрать в документ с формулами. Я на нем делал курсовой по ТОЭ (Теоретическим Основам Электротехники), где всякого такого полно. Ну, в-общем, он примерно как Вольфрам нынче (кстати, всячески советую вольфрамовский вебсайт для халявной математики). В-принципе, я посмотрел, и вроде как Маткад все еще существует, и стоит каких-то приличных денег, типа $500 за лицензию. А в то время мы всем этим ценным софтом обменивались на халяву.
И вот какой-то костин друг увидел в иностранном журнале (к тому времени появилось много и русских редакций журналов, и совсем русских журналов, и попадались и иностранные журналы как есть) рекламу новой версии Маткада, уже под Виндовс, которая обещала демо-версию по запросу. Он не полнился заполнить и отправить карточку, и к нему пришла та самая демо-версия.
Ну, версия как версия, посмотрели мы на нее, но самой впечатляющей частью был конверт, точнее адрес на нем. Я до сих пор помню с него первое слово ("кому"): BUTANUTO. В-общем, он решил, что они будут в состоянии скопировать обратный адрес как есть, и написал его печатными буквами по-русски. А в реальности, конечно, кто будет копировать какие-то странные крокозябры, не говоря уже что все эти адресные этикетки печатаются на компьютере. Они постарались по максимуму воспроизвести кириллицу латиницей (а скорее всего даже не живые "они", а программа распознавания текста). То самое BUTANUTO было порождением от ВИТАЛИЮ. И так - весь адрес. И совершенно на удивление, почта смогла догадаться и успешно доставила.
Так что рассказы про ужасы раннероссийской почты преувеличены.
Да и у меня самого было несколько случаев успешной доставки почты из-за границы, и ни одного неуспешной, но чуть позже. Мне из Walnut Creek CD-ROM присылали официальный сидюк с FreeBSD, из LSI Logic - документацию на их скази-контроллер, а также смешным образом когда я стал искать работу в Америке и регистрироваться на всех сайтах, открытку-подтверждение из Сана, что они мое резюме получили (не то что бы из этого чего-то полезного вышло). Ну, не говоря уже про когда позже я сам посылал посылки из Америки. Пока ни одного случая потеряния.
Нутря Юникса
Как раз где-то когда я отправился учиться на вечерний, я взялся за новый проект: более быстрые и комфортные терминалы из персоналок. Как я уже упоминал, общая идея использования Юникса была в том, чтобы подключать к одной машине по нескольку терминалов через последовательные порты, их было по восемь на мультипортовой плате. Помимо собственно железных терминалов, в качестве терминалов использовались и персоналки (персональные компьютеры). Они во-первых продолжали дешеветь, а во-вторых позволяли двойное использование: и как отдельный компьютер с МС-ДОС и как терминал для подключения к Юниксу, запустив программу эмуляции терминала Кермит (да, названную в честь лягушонка из телевизора). Ипортные терминалы были на самом деле не дешевле персоналок, так что машина с двойным использованием за те же деньги была выгоднее, чем тупой терминал. А запас советских терминалов тоже был не такой уж и большой. Поэтому персоналки в качестве терминалов были хорошим решением. Но работали они в качестве терминалов не лучше тупых терминалов, что было несколько обидно. Последовательный порт умел работать со скоростью до 115200 бит в секунду, а персоналка с Кермитом тянула не больше чем 9600, медленно и печально, а потом начинала терять данные и портить экран (большой проблемой тут были моменты, когда переставлялся курсор или прокручивался экран). Плюс к тому, консоль (то есть, родной экран с клавиатурой) на Юниксе умела поддерживать 12 логических экранов со свободным переключением между ними, что очень удобно. Теоретически говоря, в персоналке тоже было достаточно памяти для этого, но протокол подключения тупого терминала не позволял. А вещи типа прокручивания окошка, занимающего только часть экрана, и вообще требовали страховидных усилий и страховидно же тормозили. Поэтому у меня возникла идея написать свой эмулятор терминала для персоналок, который будет работать быстрее и давать всевозможные фичи типа многих логических экранов и быстрой прокрутки. Но для этого надо и сторону Юникса тоже научить этому протоколу, то есть написать свой драйвер для мультипорта.
Ну, и я в итоге написал, хоть конечно и времени оно заняло много, больше года (включая мой отпуск на второй семестр института). Узнал в процессе много интересного. У нас была документация от Оливетти про управление чипами последовательных портов, а также книжка Эгана и Тексейры (Egan & Teixeira - до сих пор помню!) про написание драйверов для Юникса. Плюс документация от Ксеникса (начинал я на 286-м Ксениксе, а потом перешел на 386-й, потом СКО ребрендился с Ксеникса на Юникс) про их особенности писания драйверов. Я вдумчиво прочитал и взялся.
Протокол этот мой переносил многую логику с терминала в драйвер на сервере, так что терминалу оставалось исполнять только тривиальные команды, которые он мог сделать быстро, а для всякого более медленного типа прокрутки посылались назад подтверждения. Плюс была прелесть того, что программа могла прочитать назад содержимое экрана, "главная" копия которого хранилась в драйвере на сервере. То есть, чтобы изобразить какое-то окно, а потом закрыть его, требовалось сохранить то что под ним, а потом восстановить, и для этого как раз и требовалось умение прочитать старое содержимое (в современных графических оконных системах так не сохраняют, а просто перерисовывают все сначала, но в них нет такого низкого ограничесния скорости). Эта же "главная" копия передавалась на терминал при подключении, так что если отключиться и подключиться, содержимое экрана не терялось. То есть, даже нескольких логических экранов. И ввод с клавиатуры посылался с терминала в сыром виде скан-кодов, которые преобразовывались в текст уже на сервере, так что можно было более удобно сделать переключение на русские буквы.
Нынче люди привыкли к тому, что типа собрать ядро Линукса - ах, подвиг! В те времена ядро Юникса надо было пересобирать каждый раз когда надо было добавить какой-то драйвер, или даже просто изменить его конфигурацию (конфигурация менялась через редактирование конфигурационных файлов руками). Коммерческие юниксы, конечно, собирались не из исходного текста, а из уже скомпилированных библиотек, конфигурационные файлы конвертировались в код на Си и компилировались, и собиралось монолитное ядро как один исполняемый файл. Никаких загружаемых модулей, все нужные драйвера должны были быть сразу в ядре. Потом оно устанавливалось, и машина перезагружалась. А (уже несколько позже) в ранних версиях FreeBSD и Линукса ядро каждый раз радостно собиралось из исходного текста.
Процедура эта пересборки ядра, даже из просто библиотек, была конечно долгой. Машины были медленные, диски тоже, и по меркам того времени ядро было большой программой - сотни килобайт. Чтоб ускорить процесс, я в итоге устроил себе кросс-разработку юниксных драйверов на МС-ДОС: написал реализацию используемых библиотечных функций ядра, так что код драйвера компилировался без изменений на Ксениксе и МС-ДОСе. Но, конечно, последние косяки типа потери время от времени прерываний пришлось отлавливать уже в полном юниксном варианте. Я тогда написал и свою систему логов в памяти, которые хранились в компактной форме (чтобы быстрее записывать, а то интервал между передачей двух символов со скоростью 115200 бит в секудну очень невелик), а потом расшифровывались при чтении, после обнаружения ошибки. Как выяснилось, по странной причине дисковым прерываниям давался больший приоритет, чем от последовательного порта, поэтому те периодически терялись - пришлось пристраивать опрос и восстановление, и протокол подкручивать чтобы он стал устойчивым.
Но потом все заработало. Базовые писюки, правда, на больше чем 57600 бит в секунду не оказались способны в качестве терминалов, но это тоже было большое улучшение, не говоря уже про способность иметь несколько экранов. А которые на 286-м процессоре - те могли и 115200. Широкого внедрения система, к сожалению, не получила, но опыта мне дала много.
К широкому внедрению из этой системы пригодился только кусок, да и то через немножко лет уже в Челиндбанке (носить с собой разработанные программы тогда было в порядке вещей, и даже полностью соответствовало закону). Интерпретация эскейп-последовательностей (тех самых, про которых я уже рассказывал), которую я сделал для этого проекта с нуля, пригодилась потом для сетевого и зашифрованного эмулятора терминала.
Железнодорожные протоколы и Юрий Сотников
В году, наверное, 1993-м, а может и 1992-м, на ЧМК в автоматизации железнодорожного цеха появился Юрий Сотников. Он пришел из офицеров ГСВГ, Группы Советских Войск В Германии, которую тогда как раз выводили из Германии и сокращали. Он моему стереотипу военных совсем не соответствовал - очень деятельный мужик, и очень толковый электронщик. Но он, правда, был не кадровый военный, а попал в офицеры после института, и ему там понравилось. Я так понимаю, что там он тоже был деятельный. Рассказывал истории про то, как у БМП был дефект конструкции: регулярно случались пожары в глушителях. Туда откуда-то натекала солярка, и потом воспламенялась. И он придумал, как модифицировать глушители, чтобы такой фигни не случалось. Потом он в наверное 1994 году уехал в Израиль.
А тут от в железнодорожном цеху развил деятельность. Для железной дороги были важны коммуникации. Для этих коммуникаций у нас были "мини-модемы", самые первые наверное достались от Сименса, а потом еще какие-то импортные покупали. Ну, "модем" для них - несколько громкое слово. По сути это были конвертеры последовательного соединения из RS-232 в токовую петлю (да, такую же, как в советском стандарте ИРПС, только с вариантами по величине тока), и обратно. Если RS-232 способен работать на длине провода до 3-4 метров, то токовая петля давала десятки метров. Хотя, конечно, тут все сильно зависит от скорости передачи данных: чем быстрее, тем больше чувствительность к помехам, тем меньше длина провода, на котором получается работать без помех. Ну и, конечно, от качества кабеля зависит: экранированная витая пара работает на гораздо большей длине, чем лапшеобразный телефонный провод. Сотников догадался, что дело не только в помехах как таковых, но и в характеристиках кабеля: "квадратный" сигнал последовательного порта содержит в себе широкий диапазон частот, разные частоты передаются по кабелю с разной скоростью, поэтому пока сигнал доезжает до приемника, он сильно искажется и перестает правильно распознаваться. Юра сделал свой мини-модем, который с помощью частотных фильтров предотвращал и компенсировал эти искажения. Его конструкция прошла через несколько улучшающихся вариантов, и дошла до весьма впечатляющего состояния. Потом у него эти мини-модемы покупали и на коммерческой основе. В Челиндбанке, например интернет был подключен к провайдеру через выделенную линию и сотниковский мини-модем, который давал скорость в 57600 бит в секунду на длине в несколько километров. К началу 2000-х и обычные модемы дошли до таких скоростей, но в 1994 году для них 9600 бит в секунду было за счастье. Да и в начале 2000-х в Америке они в реальности очень редко когда соединялись на выше 38400. Интересно, что таких скоростей модемы достигли через то, что модулировали сигнал только до телефонной станции, подобно мини-модему, а на станции интерфейсная плата декодировала этот сигнал в цифровой, и дальше он уже ехал по оптическому кабелю в готовой оцифрованной форме прям до интернетного провайдера. Ну, и они использовали не двоичное кодирование, а уже что-то типа восьмеричного, где сразу три бита кодировались одним "бодом" (baud), то есть одной единицей сигнала, в которой на единицу времени передавалась одна из восьми частот. А у Юры эффект достигался на обычном двоичном кодировании.
Таким образом Юра Сотников построил у себя у железнодорожном цеху в 1993 году настоящую сеть. Но не на интернетных технологиях. Интернетные технологии через последовательный порт тогда существовали (тогда это был еще SLIP - Serial Line Internet Protocol), но нами были еще не освоены. На железной дороге был свой протокол передачи файлов, до сих пор помню название: АП-70. Юра был электронщиком, а софтверную часть делал отдел АСУТП, в лице меня. Министерство путей сообщения раздавало коммуникационную программу для МС-ДОС, но у нас-то везде был Юникс, и я сделал реализацию этого протокола для Юникса. Дальше-больше, хотелось бы передавать файлы не только между напрямую соединенными машинами, но и через промежуточные машины. Тут я написал систему маршрутизации, которая прокладывала маршрут по топологии сети, и управляющую обвязку. Это мне потом сильно помогло в понимании интернетной маршрутизации: прокладка маршрута делается по сути подобным образом. Но и с отличием тоже: в интернете маршрутизация разбита на две части: построение маршрутов и следование им, следование принимает решение на только один следующий шаг пересылки. У меня маршрут прокладывался у источика, и потом файл следовал ему, если только не встречался с оборванным соеднинением, тогда маршрут пере-прокладывался.
Еще на железной дороге вовсю использовались телетайпы. Собственно, советский стандарт ИРПС не на пустом месте зародился, он происходил от американского стандарта подключения телетайпов по токовой петле, адаптированного для компьютеров. И частью системы было извлечение и выдача информации из получаемых файлов на телетайпы диспетчеров. Тут само по себе ничего особенного, разве что телетайпы использовали 5-битное (или все же 6-битное?) кодирование со своей собственной кодировкой как русских так и латинских букв (язык там переключался специальным кодом, как в КОИ-7). Это был единственный виденный мной случай, когда умение последовательного порта передавать не-восьмибитные символы действиельно пригодилось.
Другим интересным моментом была поддержка для UPSов, источников бесперебойного питания, которые при пропадении электричества в розетке питают компьютер от батарейки. Питают они, конечно, не вечно, поэтому если электричество не вернулось, нужно успеть выключить компьютер пока батарейка не кончилась. Тогда компьютеры были гораздо более чувствительными к внезапному выключению электричества, чем сейчас, и от него часто портились файлы на дисках. Файловые системы с журналированием, которые позволяют избежать такой порчи, тогда еще только изобретались. Чтобы узнать, когда пора выключаться, UPS посылал некий символ через последовательный порт. Ну и соотвественно нетрудно было написать программу, которая будет сидеть, читать последоваиельный порт, и ждать этого символа, а когда получит его, то запустит остановку системы. Но остановить систему недостаточно, желательно еще и выключить UPS, чтобы не разряжать лишнего батарейки, им это неполезно. В наши дни в компьютеры встроена система ACPI, которая позволяет управлять его блоком питания. А тогда еще ничего такого не было, и этот эффект тоже делался подачей сигнала с последовательноно порта на UPS. Но подать этот сигнал было не так-то просто, ведь к этому моменту операционная система уже должна быть остановлена! Тут я расковырял и дизассемблировал системный код, и аккуратно добавил к нему свою функцию, которая посылала сигнал на UPS. Для таких дел обычно самый простой способ - не менять код как таковой, а поменять в объектном файле имя функции, которую надо подменить, и добавить свою функцию со старым именем, скоторая сделает что надо и потом вызовет старую функцию с измененным именем. Это был еще один интересный опыт ковыряния в нутрях Юникса.
Виндовс и интегрированные среды разработки
От Оливетти пришел и Виндовс, тогда он еще был еще 286-й и версии 2-сколько-то, что-то типа 2.3. Никто им не пользовался, но мне было интересно, и когда я его обнаружил, то я его себе установил. С приложениями у него было как-то не очень. С системой шли что-то типа Paint да Write (это было предшественником более позднего WordPad). Paint был на самом деле лучше прямо в МС-ДОС, а Write был, конечно, интересной штукой - текстовым редактором, где текст выглядел прямо на экране в разных шрифтах, необычно для того времени (в то время, скажем, MS Word умел печатать разные шрифты, но не показывать их на экране), но если я правильно помню, ассортимент шрифтов у него был убогий и с печатью у него было не очень, а как редактор он был полнейшее говно и убогость. Еще из Виндовса можно было запускать МС-ДОСные программы, он при этом вываливался назад в МС-ДОС, только отъев заметное количество памяти. Виндовс в то время, кстати, сам был надстройкой над МС-ДОСом и запускался из него. Ну, а графические менеджеры файлов в результате оказались на удивление неудобными. И все работало медленно. Так что скоро я им пользоваться перестал.
Вообще надо сказать, что пользовательский интерфейс времен МС-ДОС был, наверное, вершиной эволюции. Все было продумано под клавиатурную навигацию, плюс функциональные клавиши, которыми вызывались всевозможные операции и дополнительные меню. Традиционно нижняя строка экрана отводилась под подсказки функциональных клавиш, с которых можно было понять, что они делают. Использовались F1 до F10, поскольку на IBM PC было изначально только 10 функциональных клавиш (и располагались они слева от основной клавиатуры, в два столбца). Еще две функциональные клавиши добавились и все они переехали на верх клавиатуры в IBM AT, но программы писались с совместимостью с более старыми и слабыми машинами, и дополнительные две клавиши использовались очень редко. При нажатии шифта, контрола, альта, и нескольких вместе, подсказки менялись в соответствии с изменением функции клавиш. Очень удобно было, весь интерфейс на виду. А теперь со всеми этими виндовсами и еще худшей гадостью от макинтошей, функциональные клавиши все еще есть, а толкового использования у них нет, поэтому на них начинают навешивать всякую фигню типа изменения громкости звука.
Уже в недавние временя я бывал в сиэттльском компьютерном музее Пола Аллена, где в отличие от калифорнийского музея, они держат большинство своих компьютеров в рабочем и включенном состоянии, и дают посетителям их попробовать в деле. Так вот, как бы ни был убог Виндовс версии 2, по сравнению с классическим Макинтошем он просто вершина красоты, удобства, и скорости. Классический Макинтош был чрезвычайно ущербным, с черно-белым экраном низкого разрешения и позорного качества, чрезвычайно тормозной, и чрезвычайно неудобный. Но в техническом плане было у него и достижение - операционную систему со всей этой графикой, хоть и убогой, они сумели загружать с одной дискеты. Еще у них в музее есть Ксерокс Альто, на котором все эти гуи (графические интерфейсы пользователя) изобрели, тоже довольно безобразная штука. Чтобы захотеть всем этим пользоваться, надо было обладать богатой фантазией и видеть не то что на самом деле есть, а нечто воображаемое и сильно идеализируемое от реальности.
Виндовс 3.0 был улучшением по сравнению с 2, но не был большим достижением, а вот 3.1 им стал. В первую очередь потому, что они, наконец-то добавили поддержку умений 386-го процессора. До того все программы в Виндовсе работали кооперативно: все имели доступ к общей памяти, и обязаны были аккуратно коооперироваться друг с другом, передавая управление той программе, которая активна. Если какая-то программа кооперировалась плохо (а это запросто происходило, если она начинала делать сложные вычисления), то весь Виндовс переставал реагировать на кнопки и мышь, прям как МС-ДОС, а то и хуже (в МС-ДОС народ лучше озабачивался предусмотреть кнопку остановки вычислений). Или если какая-то программа портила память, то тоже валился весь Виндовс целиком. В-принципе, в 286-м процессоре был защищенный режим, и например Ксеникс его использовал, но программы для него надо было компилировать по-другому, а Виндовс был рожден еще на 86-м процессоре и его программы были заточены под более старый процессор (и программ этих и так было не густо, так что пытаться менять стандарт было чревато). А когда вышел 386-й процессор, то во-первых его защищенный режим позволил прилично имитировать старый 86, а во-вторых дал нечто новое, 32-битные вычисления, ради которых имело смысл поменять стандарт программ. Виндовс 3.1 плюнул на 286-й процессор и воспользовался всеми новыми возможностями нового 386-го процессора. И стал действително пригодным к использованию. Ну и, конечно, 386 процессор был гораздо быстрее, и наконец-то все начало более-менее шевелиться.
При переходе от СКО Ксеникса на СКО Юникс в нем тоже появилась графика, X Window System (в обиходе часто называемая по-русски "икс-виндовс", хоть в нем и "виндов", а не "виндовс", или же еще короче и правильнее называемая просто "иксы"). Это было интересное и разошедшееся по всем юниксам порождение из фирмы DEC, которую я уже упоминал, и уже тогда позволяло запускать графику не только на своей машине, но и подключаться к другой машине через сеть в качестве графического терминала. Но работало оно даже на 386-й машине еще медленнее Виндовса, а уж когда через сеть, то вобще тормозно. С ним шел приличный набор базовых программ, но помимо того с программами было негусто. Так что могучего применения он тогда не нашел. Но сильно повлиял на традиции внешнего вида - Виндовс 3 скопировал свой внешний вид в большой степени с Иксов. И действительно пригодными к использованию и Иксы и Виндовс стали немножко лет спустя, с распространением машин на 486-м процессоре - возможности в них были заложены, но наконец-то скорость машин стала достаточной.
Одно время операционной системой будущего предполагалась быть OS/2 (ос-два, или как ее обиходно называли, "полуось"), совместно разрабатываемая ИБМ и Микрософтом. Но она заметного распространения так и не получила, а стала системой прошлого без того, чтобы стать системой настоящего. Отдельные любители ее ставили, но не больше того. А потом ИБМ как всегда попыталась обмануть Микрософт, они посрались, и в итоге вышло, что Виндовс победил.
Были у Виндовса и другие конкуренты, например DesqView (десквью). У десквью можно было и писать свои собственные программы, но их практически не было, а главным его умением было запустить на одной машине несколько программ от МС-ДОС, между которыми можно было переключаться, типа как между логическими экранами на Юниксе. Но, конечно, когда Виндовс 3.1 научился делать то же самое, то тут он получил явное преимущество.
Еще у нас была система реального времени QNX (кью-эн-экс, или как у нас говорили, ку-эн-икс). Она выглядела юниксоподобно, но внутри была устроена на микроядре, и у нее были свои интерфейсы программ реального времени, которые получали приоритет над интерактивными. На ней разрабатывались некоторые вещи для управления технологическими процессами, но этим занимался не я. Особо могучим достижением QNX было то, что она умела запускать МС-ДОСовские программы параллельно с родными даже на 286-й машине. То есть, она переключалась в незащищенный режим, чтобы дать МС-ДОСовским программам исполняться, и по таймеру и при ожидании ввода-вывода перехватывала управление назад. "Реальное время", конечно, при этом терялось, но иногда способность там же запустить МС-ДОС была полезнее.
В области интегрированных средств разработки программ пионером была фирма Борланд с брендом Турбо - сначала Турбо Паскаль, потом Турбо Си. До того разработка выглядела так, что запускаешь редактор, пишешь программу, выходишь из редактора, запускаешь программу, или если надо, то запускаешь отладчик с программой. А Турбо-среда комбинировала редактор с компилятором, так что можно было его запустить одной функциональной кнопкой. И тут же оно показывало ошибки, так что исправлять их было гораздо удобнее, и тут же можно было запустить программу, опять одной кнопкой, и тут же был некий отладчик. Очень удобно. Кстати, еще и отдельно у них был мощный отладчик, Turbo Debugger (турбо дебаггер), который даже стал словом нарицательным, с его помощью у нас не столько отлаживались программы, сколько крякались защиты на программах.
Потом Микрософт начал конкурировать со своим продуктом, их среды назывались Квик (Quick) - Квик Си, Квик Бейсик (слово "Вижуал" они стали использовать позднее). Мне в руки попался Квик Си 2.0, и он был гораздо приятнее чем Турбо, и я перешел на него. Например, свой первый юниксный драйвер я разрабатывал в большой степени в Квик Си.
Следующей серией Борланд выпустил среды, которые назывались уже не Турбо, а Борланд, уж не знаю почему они бросились на такой ребрендинг. И в них они дорвались до окон (в текстовом режиме). И все испортили. До того рабочая среда была хорошо структурирована: вот тут у нас главное окно, где мы редактируем текст программы. В нем можно переходить на разные файлы. Когда компилируем, снизу появляется окно с ошибками. По которому можно эти ошибки находить, а когда они все исправлены, то закрыть это окно. Когда запускаем с отладчиком, сверху (илил снизу?) появляется окно отладчика, и когда оно делается ненужно, исчезает. Когда нужно поискать информацию, открываем окно помощи (кстати, с гипертекстом). А тут стало можно наоткрывать кучу окон, которые норовят открываться в неудобном месте с неудобным размером, так что их надо вручную менять, и сами не закрываться когда больше не нужны, и переключаться между ними тупо по порядку, а не по смыслу. И когда окна маленькие, в них ничего не разглядишь, да еще и полезное место расходуется на рамочки между окнами. Ну, то есть, блин, как современный гуй, только еще внутри одной программы. Очень неудобно. Поэтому на этом я поставил крест на борландовских продуктах (ну, кроме Борланд Паскаля, который приходилось использовать для института, альтернативного Паскаля у меня не было).
А в это время я пользовался СКО Ксениксом и Юниксом. И у него была замечательная способность, про которую я уже упоминал: делать до 12 виртуальных терминалов на одном экране, между которыми можно легко переключаться по функциональным кнопкам. То есть, можно сделать один или несколько экранов, где открыт текст программы в редакторе, и экран где компилируешь программу (а при желании - и отдельный экран для запуска программы и отладчика). Это оказалось очень удобно. Открывай сколько чего надо, как тех же окон как в Борланде, но полноэкранных и с переключением по клавишам. Экраны виртуальных терминалов переключались по Альт и функциональной клавише, так что скажем делаешь Alt-F1 для командной строки компилятора и запуска программы, Alt-F2 для одного исходного файла, Alt-F3 для другого, Alt-F4 для чтения помощи-документации (которая в Юниксе традиционно очень хорошая, это только современные поганые линуксы повадились не устанавливать документацию по умолчанию). И всегда можешь легко перейти на любой их них прямо по одной клавише, без долгого переключения и без возюканья мышью. Это оказалось гораздо удобнее, чем интегрированные среды.
Вторым важным моментом на Юниксе для меня стало открытие редактора vi (ви-ай, и в наши времена более новое порождение от него называется vim, вим). Сначала на ЧМК у нас был распространен редактор, подобный тому что в Турбо-средах (на самом деле они оба два были подобиями общего прародителя, который назывался WordStar, команды в нем типично начинались на Control-K). Еще был Микро-Эмакс, но тот был совсем ужасным редактором, и кроме того не умел прокручивать текст на одну строку, он прокручивал всегда по пол-экрана, что очень неприятно. Но вордстарообразный редактор был только на персоналках, так что на оливеттевском LSX приходилось пользоваться тем, что есть, а был там vi. Vi был когда-то написан авторами BSD Unix, и для своего времени, когда телевизионные терминалы только-только начали заменять пишущие машинки, был очень продвинутым. Но подход к интерфейсу с тех пор изменился. Vi имеет отдельно режим ввода текста и режим команд, что к концу 80-х годов было уже очень непривычно. И потому тяжел к изучению. Но у нас была про него книжка, прочитав которую я проникся. А потом еще и оказалось, что вот этот архаичный подход с отдельно режимом ввода текста и режимом команд очень удобен для программирования, поскольку струкрутирует редактирование. Команды описывают смысл редактирования, например, "удалить до конца строки" или "заменить текст до третьего пробела", и потом можно эти команды повторять как будто только что введенный макрос. Ну, и дополнительные прелести командного режима я открыл позднее, когда появился интернет, тогда еще медленный, и стало нужно настраивать оборудование через него. Команды позволяют при этом во-первых работать даже если тип терминала настроен неправильно, а во-вторых обходиться меньшим количеством нажатий клавиш, и не ждать визуального эффекта от них (например, когда мы ходит удалить слово нажатием кнопки "Delete", мы ее нажимаем, смотрим на пропадающие одна за одной буквы, и нажимаем еще, пока не увидим, что сотрется все слово), а вводить их по смыслу вслепую, что очень сильно ускоряет работу через медленное соединение. Но тогда это меня не волновало, а просто оказалось, что когда я с месяц поработал с vi, переходить назад на вордстароподобный редактор стало неудобно. Более того, и до того любимый Квик Си стал неудобным и медленным!
И вот с тех пор vi - мой любимый редактор для программирования. Забавно, потом я обнаружил, что даже в Микрософте примерно половина народу предпочитает vi, по крайней мере в отделах, связанных с системным программированием. Большинство остальных предпочитает notepad++, а визуальные среды в системных отделах не пользуются большой популярностью.
ИБМ
"Мэйнфреймы" ЕС ЭВМ использовались на ЧМК долго. Сначала в АСУПе было, наверное, три машины - если я правильно помню, 1022, 1030, и 1045. Про 1045, я помню, люди, работавшие с ними удивлялись, что у нас в 386-х Оливетти было по 8 мегабайт памяти, прям как в ЕС-1045. Но более слабые и старые машины списали довольно быстро, еще в наверное 1991 году (я добыл в качестве сувенира плату ферритовой памяти от 1022), а 1045 продолжала существовать. И вот в 1994 году они наняли нового замначальника отдела, имя уже не помню, который был большим энтузиастом ИБМ.
Минский завод, который выпускал ЕС ЭВМ, к этому моменту переключился на продажу подержанных ИБМовских машин, этот замначальник там много пасся. В результате они купили пару ИБМ 4381, и разобрали ЕС-1045. ИБМ предполагалась стать решением всему, и лучшей альтернативой, чем Юникс. Мы к тому времени уже начинали активно разворачивать интернетные протоколы, а тут вместе с 4381 пришли толкать ИБМовские.
Но в реальности оно у них себя проявило не очень. Первым делом у них сдох диск с каталогом, и обе, типа, супернадежные машины не работали, пока ему не привезли замену. Как и почему обе машины не работали из-за одного сдохшего диска - для меня загадка природы. И почему они хранили все каталоги от всех дисков на одном - тоже. И почему они не использовали зеркалирование на несколько копий - такое в то времена уже персоналки вовсю умели, от специальных дисковых контроллеров до прям программного решения в СКО Юниксе. Может это наши энтузиасты ИБМ так коряво наконфигурировали, но я не сильно удивлюсь, если окажется, что особо альтернатив у них не было.
Потом выяснилось, что новые якобы супер-пупер быстрые машины в реальности не существенно быстрее выброшенной ЕС-1045. По словам энтузиастов ИБМ, это было оттого, что вся эта бухгалтерия, которая работала на ЕС, была написана на ассемблере и не заморачивалась использованием баз данных, а просто добывала данные методом последовательного поиска. Ну ладно, но даже методом последовательного поиска должны же более новые диски быть быстрее? В персоналках они вполне себе были быстрее. А тут - нет.
С сетями и терминалами тоже не очень задалось, этот аспект я изучал чтобы соединять ИБМ с Юниксом. Для шлюза интернетных протоколов у них предлагалось купить машину PS/2 (персоналку), с ИБМным интерфейсом с одной стороны и Эзернетом с другой. Но ИБМный интерфейс был даже не быстрый канальный интерфейс самой машины, а подключение через последовательный порт к контроллеру терминалов. Со скоростью что-то типа 19200 бит в секунду. Это даже не просто пипец, а зложестокий лютый пипец.
Что меня сильно поразило - это ИБМовские книжки про сети. В книжках про Юникс и про интернет рассказывется, как оно все устроено и работает - компоненты такие, протоколы сякие, все подробности внутреннего устройства и логики. У ИБМ было не так. У ИБМ шло немножко несвязанных деталей, типа формата адресов, а большая часть книжки содержала рассуждения вида "если вам надо подключить то-то и то-то, то покупайте железяку номер такую-то". Никаких описаний, никаких нутрей, сплошной каталог для продаж.
Для подключения терминалов в заводоуправлении (которое через дорогу от здания АСУП) они купили контроллер терминалов на что-то типа 128 портов, и к нему довольно дикое количество модемов на 2400 бит в секунду, что для 1994 года было уже отстало, и вроде даже еще без широко распространенных к тому времени протоколов коррекции и сжатия MNP. Ну, хотя бы самих терминалов купить они не догадались, вместо них планировалось использовать персоналки с программой-эмулятором. Как оно могло работать с такой скоростью - это можно представить себе страдания. Ну, справедливости ради, терминалы у ИБМ были устроены несколько по-другому, чем на мини-машинах. Они были не полностью интерактивные, а что-то более типа современных браузеров: из машины в терминал загружалась форма, которая рисовалась на экране, потом сам терминал позволял заполнить в форме поля, не обращаясь к машине на каждую кнопку, а совершенно локально, и потом по специальной кнопке отсылал то, что заполнено. Негибко, но позволяет лучше переживать очень медленные скорости, хоть и медленно и печально. Как они будут прокладывать этот кабель о 128 парах жил и потом разводить их по зданию, тоже никто не подумал. Так что я даже не знаю, чем оно там кончилось, скорее всего ничем.
С персоналками же в то время произошла интересная революция: сетевые платы Эзернет подешевели и стали стоить почти столько же, как и один последовательный порт на многопортовой плате. Впервые Эзернет у нас на ЧМК появился еще от Оливетти, в своем изначальном варианте, известном как "толстый", который официально назывался 10Base5 (10 - это была скорость, 10 мегабит в секунду, а 5 - не знаю что, наверное какая-то толщина кабеля). Там в качестве средства передачи использовался один толстый кабель, который шел из конца в конец. Чтобы подключить к нему компьютер, кабель прокалывался специальной Т-образной штуковиной, которая на него навешивалась. Из "ножки Т" шел кабель, но не к компьютеру, а к отдельной коробочке - трансиверу. И уже от трансивера шел кабель к копмьютеру. Но технический прогресс не стоял на месте, и уже в начале 1990-х появился вариант "тонкого" Эзернета 10Base2, в котором трансивер стал частью платы в компьютере, а кабель походил на антенный от телевизора (но с другими характеристиками) и собирался из кусков, которые подключались к компьютеру с помощью Т-образных разъемов. Но платы были дорогими. Как я уже упоминал, в ЧПИ у нас на кафедре ЭВМ они разработали свою плату, подобную Эзернету, но работавшую через стандартный антенный кабель для телевизора. Полная 10-мегабитная скорость у них не получилась, получилось что-то типа 2 мегабит, но дешевле, и вполне продавалось. Из интересных применений, в той плате можно было снизить скорость еще больше и заставить ее работать на более длинном кабеле - они таким образом соединяли институтские здания. Не с такой большой длиной как мини-модемы, но с большей скоростью. Ну, а к 1994 году настоящий Эзернет подешевел до двадцатки долларов за плату, что выбило экономическую основу из-под ЧПИшной платы, и стало сравнимо с последовательным портом.
Эзернет у нас уже был развернут не только в АСУПе и АСУТП, но местами и в заводоуправлении (для сетей, основанных на МС-ДОС, типа Новелла), так что гораздо более логично стало подключать новые терминалы к Юниксу через Эзернет, вместо последовательного порта. Эту же идею я рассказал Валере Ильину, к тому времени ушедшему в Челиндбанк, который тогда как раз начинал у них разворачивать автоматизацию, и будучи придуманной, она стала настолько очевидной, что там они даже вообще не стали покупать многопортовые карты. Это один из тех случаев, когда я могу тихо гордиться, что рано понял пользу от нарождающейся технологии, и использовал ее на практике.
Несмотря на разочаровывающий опыт с мейнфреймами, я какое-то время продолжал ими интересоваться, листать попадающие книжки. И в ретроспективе оказывается, что они придумали довольно много всякого, которое стало мэйнстримом в Юниксе существенно позже. Вот, например, threads, которые в Юниксе стали появляться в середине 1990-х, в ИБМ существовали еще в 1980-х в CICS (произносится "кикс"). Но дьявол как всегда в деталях. Тред - это такой неполноценный процесс без отдельной памяти. В Юниксе треды использовались внутри процессов, ИБМ использовало треды вместо полноценных процессов, то есть программы для совершенно разных пользователей, написанные разными людьми, радостно выполнялись в общем адресном пространстве, вообще без какой-то защиты друг от друга. Приходи кто хочешь, ломай-воруй что хочешь. Зато дешево и "эффективно". Подход к безопасности, конечно, у всех в доинтернетные времена особо не блистал, но не до такой же степени.
ФИДО
К 90-му году мои друзья Костя Бердников и Костя Юдаев в ВЦ Облисполкома уже обнаружили мир BBSов (Bulletin Board Systems), через который шел обмен программами по телефону. В СССР тогда уже были ББСы, лучшие из них насколько я помню - где-то в Прибалтике и Новосибирске. У их хозяев, конечно, был интерес в том, чтобы не только кто попало скачивал у них, но и закачивал новое, так что программы ББСов вели учет - какой пользователь сколько чего закачал, и давали скачивать соответствующее количество.
А где-то к зиме 1990-1991 года до них дошло ФИДО, сеть организованная на ББСах. ФИДО позволяло обмениваться через модемы электронной почтой, но и не только - в нем можно было закачать файл или попросить выкачать файл (это называлось File Request, freq - "фрек"). То есть, можно было не сидеть самому и не качать, программа делала это автоматически. Собственно, почта там была устроена так, что письма заворачивались в файлы, и файлы закачивались или скачивались. Помимо почты, существовали и эхоконференции (эхи) - это как аналоги современных интернетных форумов, точнее наоборот, современные форумы - слабое подобие эх. Они выглядели как те же письма, но распространяемые не к конкретному адресату, а ко всем желающим подписаться на определенную тему.
Для связи в ФИДО существовала адресация, с интересной структурой. Поскольку распространение шло через телефон, и междугородние звонки, не говоря уже о международных звонках были дорогие, топология подстраивалась под административно-телефонные границы. То есть, все эхи с города собирались у кого-то и этот кто-то дозванивался в другой город, закачивал свои посты, и скачивал ихние, и потом раздавал скачанное внутри своего города. На родине ФИДО в Америке это обычно делалось через кооперацию, когда все городские участники скидывались на оплату счета за телефон. Но мы жили в СССР, все ФИДО жило на компьютерах, принадлежащих организациям где мы работали, и то же самое шло и для телефона: некоторые организации, особенно связанные со связью, без проблем оплачивали междугородку. Возвращаясь к адресации, самой верхней единицей была зона, которая примерно соответствовала континенту, то есть Америка - зона 1, Европа - зона 2. Зона отделялась двоеточием. Следующим шел регион, который соответствовал стране, для СССР - 50, потом сеть, которая соответствовала городу, для Челябинска - 10 (Юрий Потапюк, бывший челябинским сетевым координатором, начал участвовать рано, поэтому получил номер вторым в стране, за Новосибирском с номером 00, и раньше Москвы с номером 20), следующим, через слэш, узел (node, иногда также называемый по-русски "нода"), то есть уже конкретный компьютер конкретного хозяина (которого называли сисопом, системным оператором). Для примера, бывший у меня позже узел имел адрес 2:5010/4. Информация обо всех узлах, их описание, телефонный номер и время, когда они принимают звонки, публиковалась в виде единого файла. И по этому файлу-каталогу, в-принципе, можно было позвонить на любой номер в мире. Но существовал и следующий уровень - поинты (point). Поинт был по сути то же самое, что и нода, но пожиже - звонки не принимал, а только дозванивался сам, и обычно обменивался информацией только со своей нодой, откуда она расходилась дальше. Поинтом он назывался потому, что его номер отделялся от родительского узла точкой, например 2:5010/4.1.
Ну и вот, я стал интересоваться ФИДО тоже, в гостях у друзей читать эхи. Когда я это пишу, как раз 30-я годовщина путча ГКЧП 1991 года, и все в ЖЖ и Dreamwidth рассказывают, что они в это время делали. Я же ничего такого особенного не делал - уже окончательно перевелся на дневной, летом ходил на работу на целый день, и готовился отъезжать в сентябре в колхоз, куда тогда было принято посылать студентов на месяц. На первом курсе я, учась на вечернем, в этом не участвовал, а ездил в колхоз только с работой, там с утра привозили на автобусе, вечером увозили. А студентов отправляли с жильем на месяц. Еще с конца 1980-х в телевизоре появилась утренняя программа, где в-основном показывали музыку, немножко новостей, небольшие прикольные мультики. Ну а тут вместо нее оказалось "Лебединое озеро". Я плохо помню, что мы тогда подумали, мне кажется все же сначала что Горбачев склеил ласты вслед за предшественниками. Но нет, оказался путч ГКЧП. Каких-то дрожащих рук я них я не помню, ну да я на такое никогда внимание не обращал, это надо особо следить чтобы заметить. Общее ощущение было неожиданного пипдеца, и "они офигели". Хотелось пойти поучаствовать в каком-нибудь протесте, но в Челябинске все было тихо, жизнь шла как обычно. А вот зато через ФИДО доходила информация о жизни в Москве. Я ходил к друзьям узнавать новости. Газеты выходили, но там помимо обращения ГКЧП и местной администрации делался вид, что ничего не происходит, так и надо. А в ФИДО были репортажи очевидцев. Когда ГКЧП свалили, это было, конечно, большое облегчение и радость.
Потом, кстати, через ФИДО шла и информация о руцковско-хасбулатовском путче 1993 года. Тогда пресса и телевизор вполне работали (ну, кроме как когда они атаковали Останкино), но в ФИДО шли рассказы очевидцев.
И вот где-то к концу 1991 года мне захотелось приникнуть к ФИДУ более непосредственно. Я пошел в Владимиру Петровичу Лисовенко с идеей, что хорошо было бы приобрести модем, через который можно будет скачивать программы. Тут он вспомнил, что модем где-то на складе уже есть - его получили еще от Оливетти, но не находили применения. Модем оказался достаточно приличным, а на момент своего изголовления и вовсе был очень продвинутым - на 2400 бит в секунду, с коррекцией ошибок про протоколу МНП (MNP). Следующей проблемой стал телефон. В-принципе, телефон в комнате где я сидел, был, но он был внутризаводским. На заводе была своя АТС, но в ней не все номера имели "выход в город". На тех номерах, которые его имели, можно было набрать девятку и потом как обычно городской номер, а которые нет - там такой фокус не работал. Тут мне Лисовенко нашел телефонный кабель, и я его проложил из соседнего кабинета к своему модему. Днем, в рабочее время, я конечно модем не использовал, а только вечером и с автоматическим дозвоном ночью. И получил свой ФИДОшный поинт.
Мое вхождение в мир эхоконференций было довольно бурным. Ну, потрепаться-поспорить мне всегда нравилось, так что я включился в процесс активно. Но тут поучаствовали и еще два фактора. Одним было то, что там были люди, которых я знал физически, и общался с ними так же как вживую, а не знающих контекста эта панибратскость коробила. Вторым было то, что там была эха под названием SU.FLAME (flame, флейм, "огонь" - это эвфемизм для ругани), в которой разрешалось ругаться матом. В каждой эхе были свои строгие правила, за соблюдением которых следил модератор, и раздавал за нарушения "плюсики", при наборе трех плюсиков сетевому администратору посылалось указание об отключении участника от эхи. А в SU.FLAME модератора не было, название предполагало ругань, и официально разрешалось ругаться матом. Ну, я это конечно воспринял так, что там надо ругаться матом. Нет, конечно, ругался я не на пустом месте, и не в виде каких-то личных оскорблений, а только для более эмоционального выражения мысли, матом. С этого тоже многих коробило. Но вот формально-то я никаких правил не нарушал, отключать меня было не за что. Тогда Дмитрий Завалишин, бывший тогда региональным координатором, написал мне письмо, я внял и исправился. Но вот свои, как говорится, 15 минут славы я получил, стал известным в узком кругу персонажем.
Ну и до сих пор в интернетах мне регулярно попадаются люди, которых я знал по тогдашнему ФИДО.
Чуть позже я организовал на ЧМК и свою ноду, 2:5010/4. Номер 4 мне достался по наследству. Леша Морозов, который тогда уже ушел с ЧМК в коммерцию, когда-то получил его для себя, но так толком и не собрался его использовать. Так что он передал его мне.
Помимо места для общения, ФИДОшные эхи были местом, где люди публиковали свои рассказы, обычно юморные. Из особо запомнившегося могу перечислить:
"Сказки о комьютерных жителях" с персонажами типа отца Виндовса с иконами, Диггера, и товарища Комманд Ком. Диггер - это была такая дебильная игра, шедшая даже на совсем слабых компьютерах типа Искры-1030 и популярная среди офисного непрограммистского люда. Комманд Ком - это был системный файл от МС-ДОС, который представлял собой суровую операционную систему по сравнению с графическим Видовсом.
"Как Ленин относился к женщинам" - рассказ, если я правильно помню, Игоря Сысоева (который потом стал известен как автор nginx). Впрочем, Ленин по сюжету не относился, а отвозился на извозчике. Мне из этого рассказа запомнился образ Ленина, потратившего рулон оберточной бумаги на выписывание у буржуинов автомобиля.
Истории про Суровых Уральских Мужиков. Потом этот образ переехал в КВН, где стал в частности Суровыми Челябинскими Мужиками. Но изначально это писал кто-то из Свердловска/Екатеринбурга, так что мужики были именно Уральские (Екатеринбург находится в середине Урала, а Челябинск - это Южный Урал). Я не уверен, но не удивлюсь, если окажется, что авторы этих историй вошли потом в Красную Бурду, юмористическую газету в Екатеринбурге.
Ну, и анекдоты. Правда, довольно быстро оказалось, что новых анекдотов мало, и когда новый участник приходил с анекдотом, обычно старожилы его уже давно знали.
Еще ФИДО стало местом образования слов, которые потом вошли в повсеместный обиход. Вот в частности Е-бург как обозначение Екатеринбурга.
Но самым знаменитым словом, наверное, стало "глюк", "глючить". Я когда его в первые увидел, не сразу понял, что имеется в виду. Я в школе учил немецкий язык, в котором "глюк" означает счастье, вот например в советском многосерийном фильме про Ломоносова немецкие шахтеры говорили друг другу "Glueck auf", то есть "счастливо". А тут оно по смыслу совсем не подходило. Тут слово оказалось происходящим из наркоманского жаргона, галлюцинация ? галюк ? глюк. Ну, а потом кто-то образно выразился об ошибках в программе как галлюцинациях у компьютера, и слово разошлось.
Интернет в Челябинске
В начале 1990-х годов помимо ФИДО развивались и коммерческие сети. Типовой проблемой времени был обмен информацией о продаже и покупке - то есть, по сути оно сводилось к таким же эхам, как фидошные, где публиковались объявления. В ФИДО тоже были коммерческие эхи, но разворачивались и отдельные сети. Вот например Спринт этим занимался - это вообще довольно необычно, потому что на его родине в Америке он ничего такого не делал, а занимался строительством и арендой выделенных линий связи, то есть наверное кто-то из русского отделения проявил инициативу. Потом была еще контора под названием Телемаркет с активной рекламой в телевизоре, от которой возникло обиходное выражение "И (полный) телемаркет!", в смысле что "все готово в лучшем виде", но иногда и в качестве эвфемизма слова "пи.дец". Это была последняя фраза из рекламных роликов, которые развивались примерно так: Сидят два мужика, удят рыбу, общаются: "Вот мы сидим, а денежки идут! (Трам-пам-пам, как оно все у нас хорошо благодаря Телемаркету!) Телемаркет!" Так что теперь если вы увидите это слово в текстах эпохи, вы теперь знаете, откуда оно взялось, и что оно значит. Какая-то из этих сетей даже работала на доморощенных русских модемах марки Лександ (модемы были говно, и всего на 1200 бит в секунду, но чуть дешевле импортных). И еще существовал Релком, сеть на технологии UUCP (Unix-to-Unix Copy, ю-ю-си-пи), которая использовалась как транспорт для емейла практически современного вида (интернетный емейл вырос из нее) и ньюсгрупп (которые тоже потом переехали на интернет). У них существовала и версия станции для МС-ДОС, которая называлась UUPC (от UUCP на PC), но более полный вариант был на Юниксе.
Группа в ВЦ Облисполкома (вот, кстати, я использую это слово, а надо наверное пояснить, что так тогда называлась областная администрация - в советское время всем руководили органы компартии, а гражданские органы власти только исполняли их решения, и назывались "исполнительными комитетами"), где работали мои друзья, занялись раскруткой Релкома в Челябинске. Потом, это году наверное в 1993-м или вроде того, у них в ВЦ поменялся главный начальник, который со всеми разосрался, и в результате вся группа во главе с начальником, группы Стасом (вот фамилию его не помню), свалила в Связьинформ, плюс некоторое количество соседнего народа, включая замначальника ВЦ. Связьинформ вроде как существует до сих пор, госкорпорация по телефонной и прочей связи. И они взялись за развитие компьютерных коммуникаций от Релкома уже там - сначала через UUCP, а потом и Интернет.
Сидели они в здании 65/66-й АТС (тогда в Челябинске были 6-значные телефонные номера), в самом центре города. Это здание было построено под одну электромеханическую телефонную станцию, а потом технологии продвинулись, и туда вошли две станции, 65-я и 66-я, и еще больше половины места остались свободными. Поэтому туда же разместили всякие побочные отделы Связьинформа, а оставшееся место еще и сдавали коммерческим конторам.
Меня туда тоже звали, но я не пошел - с технической точки зрения на ЧМК было интереснее, и вместе с учебой работать на больше чем полставки было нереально, что с ними не очень стыковалось, да и ездить было от дома далеко.
И вот у них появился компьютер (наверное 486, а может еще даже и 386) и этажерка с примерно пятью модемами. На компьютере жил сначала СКО Юникс, но он себя проявил глюкавым, требующим регулярной перезагрузки, который они вскоре поменяли на ISC (Interactive Systems Corp), а позже и на BSD/OS (так же известная как BSD/386, это была коммерческая версия BSD Юникса для персоналок, от компании, основанной собственно авторами BSD). Как-то я прихожу, смотрю, на компьтютере спереди висит пластиковый щиток. Что такое? Оказалось, что на компьютере (он был напольный, формата "башни"), кнопка выключения оказалась как раз на уровне коленки. И когда кто-то сидел сбоку стола, то случайно нажимали на нее коленкой. Тогда и повесили противоколенный щиток. У нас позже аналогичная проблема была в Челиндбанке, когда из хьюлетт-паккардовских серверов торчал ключ, и вот пришло начальство на экскурсию, увидело и повернуло ключ, машина выключилась, работа банка остановилась. Ну, начальство тоже понять можно: в персоналках того времени было типовым делом иметь ключ, который отключал клавиатуру, а тут ключ выглядел похоже на то, что он открывает дверцу. Но вышло все равно неудачно. После того мы ключ стали вынимать и складывать так, чтобы его было не видно.
Позже они приобрели и мини-VAX (вакс, машина от фирмы Digital Equipment Corp. - DEC, дек). Это были очень популярные машины начиная с конца 1970-х годов, и все 1980-е, более мощное 32-битное развитие линии PDP-11, которую в СССР копировали в СМ ЭВМ. Вакс в СССР тоже пытались скопировать под названием СМ-1700, но не получилось, выход микросхем требуемой сложности у советской промышленности получался мизерный. За время жизни этой линейки, машины уменьшились с больших шкафов до небольшой напольной тумбочки (примерно как две персоналки в формате "башни" по ширине, и на колесиках). И вот как раз более поздний вариант в виде тумбочки на колесиках они и приобрели. Машины эти продавалсь подержанные из американских университетов уже недорого, поскольку были уже для того времени медленными - типа тех же 386-х, а мини-машины к тому времени ушли вперед, продвинутым видом архитектуры тогда был RISC (риск, Reduced Instruction Set Computer). Но при медленности, у них была куча последовательных портов, куда можно было цеплять модемы, и хорошая архитектура ввода-вывода, позволяющая машине успевать за этими модемами, и BSD Юникс, который тогда был эталоном реализации интернетных протоколов. И еще в ней был ленточный накопитель DLT, формат которого по сей день (ну, с увеличенной плотностью и скоростью) является эталоном архивного хранения информации.
Машина, правда, когда приехала, была не с Юниксом, а с операционной системой VMS. Сама фирма DEC не жаловала Юникс, их самой любимой и родной операционкой был VMS (по мотивам которого позже был создан Windows NT, из которого растут все современные версии Виндовса). Но толку от VMS не было, и пока они не получили ленту с Юниксом, они устраивали на этой машине (на колесиках, напомню!) гонки по коридору, сидя верхом.
Все это в результате выросло в первого в Челябинске интернет-провайдера. Будучи Связьнформом, у них не было проблем с получением выделенной линии до Москвы, на которую повесили модем, SLIP (Serial Line IP), и маршрутизацию.
Вскоре после перебегания туда, они при своем Связьинформ-Центре организовали и стороннюю коммерческую конторку. То есть, "при" тут означает, что люди те же, контора другая. Если бы я туда пошел работать, то может быть и приобщился бы больше к коммерции. А так - только по мелочам, типа как спосредничать в покупке Челиндбанком у них машин, когда там еще с ЧМК был только Лисовенко.
Интересным последствием проводки интернета в Челябинск стало то, что стало возможно качать всевозможный опенсорс (хотя такого слова тогда еще не было, было слово free software от GNU) напрямую с Запада через FTP. Потом у себя компилировать и пользоваться. И читать исходный код тоже, это был богатый источник знаний. Ну и книжками мы тоже обменивались - у кого какие были, собственно наверное первую книжку про общее устройство интернета я прочитал, получив ее от друзей из Связьинформа.
Интернет в современном, гипертекстовом виде, тоже вскоре добрался, сначла протокол Gopher, а потом и HTTP. Он сначала был в текстовом виде, был (да и все еще есть) такой текстовый браузер Lynx. И меня, честно говоря, в текстовом виде не впечатлил. Гипертекст (то есть, текст со ссылками на другие страницы) как таковой в то время уже давно был широкораспространенной вещью. Вся встроенная помощь к МС-ДОСным программам делалась в виде гипертекста, где слова, обозначающие понятия, были ссылками на страницы с описаниями этих понятий. Разница, конечно, была в том, что гипертекстная база в каждой из программ была замкнутой, устанавливалась на компьютер вместе с программой, и ссылалась только внутри самой себя. Но зато работала быстро, не чета даже нынешним "быстрым" интернетам. Поэтому когда работавший в Связинформе Антон (вот фамилию не помню) мне впервые показал гипертекстовый интернет в наверное 1993 году, это меня не впечатлило - ну да, можно делать ссылки на другие страницы по всему миру, но зачем это делать, в чем счастье? И только когда мне уже в 1994 году Леша Пестерников показал в институте первый графический браузер, Мозаик, меня оно впечатлило как метод публикации сверстанных страниц, и я проникся. Да, линия Мозаика все еще жива: его следующей версией стал коммерческий браузер Нетскейп (Netscape), от которого потом после разорения одноименной компании отпочковалась некоммерческая версия Мозилла, нынче известная как Фаерфокс. Я так понимаю, что Мозилла было внутренним названием Нетскейпа с самого начала, в нем были встроены "пасхальные яйца", которые при введении специального URLа в адресную строку показывали анимации Мозиллы-динозавра.
Когда в Челябинске завелся интернет, я стал чухаться с подключением к нему ЧМК. Даже добыл для него диапазон сетевых адресов из двух сетей класса C. Я нарисовал план на что-то типа 30 сетей класса C, или одной сети класса B, но его подрезали в RIPE (европейском центре координации интернета), поскольку перспектива истощения адресного пространства тогда уже начала светить. Но светила она еще не сильно ярко, так что дали аж две сети. При мне так ничего и не подключилось, но в итоге они эти адреса использовали.
Антивирусы
Пару раз мне подворачивалась необходимость написать свой антивирус. По большей части, компьютерные вирусы распространялись не так уж и быстро, и для них имелся готовый антивирус - антивирусы расходились методом обмена, так же как и другие программы.
В конце 1980-х антивирусные программы обычно были от одного вируса. И при подозрении на вирусы, их запускали все какие есть по очереди. Причиной для подозрения обычно было то, что на глаз замечалось, что у исполняемых файлов менялся размер, или же что количество свободной памяти внезапно уменьшалось. Вирусы традиционно работали по тому принципу, что вирус себя записывал в конец исполняемого файла и менял на себя точку входа в программу. Ну или не в конец, а там, где была изначальная точка входа, а старое содержимое с этого места переставлял в конец. И когда программа запускалась, то первым запускался вирус, и тут было два варианта: некоторые вирусы себя записывали во все соседние файлы перед тем как передать управление собственно программе, а некоторые сажались в память, перехватывали вызовы МС-ДОС на запуск программ и/или на вообще открытие файлов и потом заражали следующие запускаемые или даже просто копируемые программы.
Потом появились коллекции, где один антивирус был сразу от нескольких вирусов. Так вырос, например, антивирус Дмитрия Лозинского aidstest: с одного вируса, потом что-то типа пяти, потом перевалил за сотню, и так далее.
Но вот пару раз мне попадались новые вирусы, от которых приходилось спасаться самому.
Один был вирус, который потом в коллекциях получил название DIR. Он был устроен новым и необычным образом. Вместо того, чтобы добавляться к каждой программе, он вместо того записывался на диск один раз, и изменял описания исполняемых файлов в директориях (отюда название), чтобы они указывали на вирус, а не в правильное место. Изначальный укзатель он, конечно, тоже сохранял, чтобы потом суметь загрузить программу. Это делало вирус гораздо менее заметным. В памяти он тоже прятался, перехватывая множество системных вызовов, чтобы сделать вид, что его там нет. То есть, например, если пытаться читать директории даже программой, которая должна бы просто показывать диск в "сыром" виде, вирус восстанавливал их до первоначального вида, чтобы быть незаметным. Не помню, правда, на чем мы его заметили. И имевшиеся антивирусы не помогали. Но с помощью лежавшего в шкафу диска получилось его обнаружить. Тот жесткий диск был резервным архивом, на всякий случай, с МС-ДОС, компиляторами, и прочими полезными программами. И поскольку он был в шкафу, он был еще не заражен. Тут вирус проявился, я его дизассемблировал и изучил. И написал антивирус, который восстанавливал файлы в изначальный вид, убирая вирус с диска. Поскольку у нас был чистый диск, я не стал заморачиваться с удалением вируса в памяти (как потом сделал тот же Лозинский), а просто запускал антивирус, загрузив машину с чистой системной дискеты.
Второй вирус мне притащил однокурсник с институтского машинного зала нашей кафедры. Тот был простой вирус, сильно не маскировавшийся, поэтому написать антивирус было не сложно. Как я на пару лет позже узнал, написал его другой студент, работавший тогда на ВЦ лаборантом (потом мы вместе работали в Челиндбанке). Он написал вирус чисто для прикола, чтобы посмотреть, как получится, и не собирался распространять его. Но вирус у него случайно утек и разошелся про ВЦ. Я где-то в разговоре упомянул тот антивирус, и он его узнал: "О, так это ж мой вирус!".
Брезенхам
Среди прочего, интересовался я и компьютерной графикой. Один из базовых алгоритмов в ней - алгоритм Брезенхама для быстрого рисования линий. Я его прочитал в книжке, но так и не мог прочухать, что там зачем. Поэтому решил плюнуть, написать свой как смогу.
В программировании важным фактором эффективности является оптимизация циклов, чтобы вещи которые делаются наиболее часто, делались наиболее быстро. А если посмотреть на линии как они выглядят на экране компьютера, делается видно, что они идут ступеньками: горизонтальные или вертикальные участки, между которыми идут ступеньки на одну линию вверх (или вниз, или вбок). Поэтому если сделать быстрое определение, где должна быть следующая ступенька, и рисовать для нее прямую, а потом делать один шаг на эту ступеньку, то рисование получается быстрее. Рисовал я прямым доступом в видеопамять, где соответственно адрес для следующей точки расчитывается как в массиве, из двух координат, но когда рисуешь последовательно точку за точкой, то можно обойтись без умножения (которое на тогдашних процессорах было медленным), а вместо того находить адрес следующей точки сложением от предыдущей. И вот я занялся этой оптимизацией, и в итоге линии у меня рисовались быстро.
Тогда я пошел сравнивать свой результат с Брезенхамом из книжки. Оказалось, что у меня получился тот самый Брезенхам, только изобретенный заново с нуля. И сделав всю эту оптимизацию самостоятельно, делается понятно, что и почему там так работает. Авторы же книжки ее явно самостоятельно не делали, поэтому толком объяснить алгоритм не могли. Так что вот, делюсь секретом. Подробности я, конечно, через почти 30 лет уже не помню, но главный момент, с которого логика этого алгоритма раскручивается, помню до сих пор.
Книжка про Юникс
Пару раз я вел лекции про Юникс, один раз на ЧМК, один раз на ВЦ облисполкома. Тут у меня есть непонятная неувязочка по времени: с одной стороны, логично было бы предположить, что на ВЦ облисполкома я вел их с материалами, подготовленными для лекций на ЧМК, но с другой стороны на ЧМК я их вроде как вел уже после того, как Валера Ильин ушел в Челиндбанк (до того их там вел он), и это получится 1994 год, когда друзья были уже давно в Связьинформе. На да ладно, неважно.
На ЧМК где-то наверное раз в год проводили обучение по Юниксу и Ораклу для людей из цеховой автоматизации. По Ораклу вел человек из АСУП, по Юниксу - с полигона АСУТП. И вот тут оно досталось мне.
Я же был еще со свежим и прямым опытом учебы в институте, где меня сильно утомляла и раздражала необходимость вести конспекты. Преподаватель ведет по своим заметкам, так какого хрена мы записываем лекции? Могли бы с тем же успехом их напечатать и раздать в виде методичек, чтоб по ним можно было отслеживать в процессе лекций. Ну, а если где-то какие-то отклонения - то это уже можно записать. В-принципе, в одном предмете у нас было организовано что-то чуть лучшее, чем конспекты - в инженерной графике, которую я проходил еще на вечернем. Там для ведения конспектов выдавали типа как методичку, в-основном пустую, но с заготовками для рисунков (координатные оси, и тому подобное), которые дорисовывались на лекции.
Тут, наверное, надо сделать отступление и объяснить слово "методичка", я не уверен, все ли еще оно используется. Полное название было, наверное, "методические материалы", и это были по сути дела небольшие книжки, писавшиеся преподавателями, и публиковавшиеся институтом. Например, инструкции к проведению лабораторных работ. Их печатали на пишущей машинке в формате А4, а потом фотокопировали какой-то древней технологией с уменьшением формата вдвое, так что получалась небольшая книжечка с картонной обложкой. В более поздние времена у нас на кафедре стали раздавать методички и в форме файлов, без печатной бюрократии.
Ну и вот я решил, что раз уж я готовлю материалы, то с тем же успехом могу их внятно записать и раздать, чтоб людям не страдать записыванием вручную. Дело было летом, когда я ходил на работу на полный день, так что я днем писал текст очередной лекции, а в конце дня ее рассказывал и раздавал текст. И в результате получилась небольшая книжечка. Я ей потом делился с тем же Челиндбанком и Связьинформом.
Потом, когда я работал в Челиндбанке, там тоже поводили курсы для программистов филиалов, так что я эту книжку расширил и углубил, добавив туда информацию про сети и прочее. Страниц сто получилось, наверное. Ну и тут уже в обратную сторону, делился ей с ЧМК.
Книжкой этой потом пользовались и на ЧМК и в Челиндбанке еще довольно много лет.
Типография
Использование для обработки текстов и верстки исторически было большим двигателем развития компьютеров. Даже знаменитости в ней сильно отметились. Например, первым коммерческим использованием системы Юникс быа верстка документации для AT&T. А один из ранних гигантов мысли Дональд Кнут даже взял да написал собственную систему верстки для математических текстов.
Меня тоже использование компьютеров для печати текстов занимало с ранних времен. Собственно, тексты меня занимали даже до компьютеров. Еще в довольно раннем детстве мы со старшим двоюродным братом от руки писали выпуски "журналов" с рассказами про какие-то эксперименты. Потом папа у меня приобрел пишущую машинку для своей диссертации, и мое печатание вышло на новый уровень.
В компьютерах на БК как-то и редактировать было не очень, но вот уже на ДВК был вполне себе живой текстовый редактор. Я в нем даже для школы как-то набирал задание по литературе, мини-книжку в подражание по сказкам Салтыкова-Щедрина. Потом на ДВК же я обнаружил программу форматирования, подобную юниксному troff. Ну или может скорее nroff, из способностей по шрифтам у нее был жирный, двойная ширина, и может быть курсив - что было встроено в матричный принтер. Хотя не помню, может и буквы двойного размера она тоже умела. И вроде как она умела печатать какую-то псевдографику тоже, несколько сложным способом. Принтер на ДВК в-принципе был Роботрон, совместимый по системе команд (то есть, эскейп-последовательностей, похожих по сути на те, что на терминале, но других) с системой команд принтеров Эпсон, которые были тогда индустриальным стандартом. Эта система позволяла печатать и графику, выдавая по байту на 8 печатающих иголок принтера. Картинка раскладывалась на горизонтальные полоски по 8 пикселей высотой, и так печаталась - я тогда прочитал инструкцию к принтеру и изучил его возможности.
На ИБМоподобных персоналках принтеры были аналогичные, ну только побыстрей и пошире. Кнопка PrintScreen тогда в них печатала экран прямо на принтер, и умела извлекать с экрана и печатать даже в графичексих режимах. Но тексты оставались плоскими текстами с одним шрифтом. Были редакторы, которые умели опять же жирные-широкие-узкие шрифты, но и все.
Потом до нас дошла Ventura Publisher и чуть позже Page Maker, программы для "настольных издательств". Венчура запусказась прямо на МС-ДОС, Пейджмейкер на Виндовсе (он изначально был разработан на Макинтоше, а потом перенесен на Виндовс). Эти системы не были текстовыми редакторами. Предполагалось, что текст набирается где-то еще в текстовом редакторе, а в издательских программах только вставляется и форматируется. То есть, небольшие поправки внести можно было, ну или заголовок набрать, но это было довольно неудобно.