Бабкин Сергей Анатольевич : другие произведения.

Глава 2. Время в институте

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:


 Ваша оценка:

  Время в институте
  
  Тут у меня истории несколько разбегаются по темам, поэтому я их и собрал по темам, а не по времени. И большинство тем оказываются о компьютерах и программировании. Но в общем и целом они приходятся на время моей учебы в институте, то есть примерно 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, программы для "настольных издательств". Венчура запусказась прямо на МС-ДОС, Пейджмейкер на Виндовсе (он изначально был разработан на Макинтоше, а потом перенесен на Виндовс). Эти системы не были текстовыми редакторами. Предполагалось, что текст набирается где-то еще в текстовом редакторе, а в издательских программах только вставляется и форматируется. То есть, небольшие поправки внести можно было, ну или заголовок набрать, но это было довольно неудобно.
  
  Подход этих программ к форматированию был очень разный. Пейджмейкер предполагал, что все размещается на страницах вручную. Даже сказать, что "сделай мне 5 страниц по 3 колонки" было нельзя, каждую колонку надо было вручную поместить на страницу. И не дай бог потом что-то где-то менялось, все форматирование съезжало. В-общем, для художественных натур, рисующих на одну-две страницы. Венчура же была очень структурированной. В ней определялись типы абзацев, каждому типу задавались типографские свойства, и она по этим свойствам размещала тексты на страницах в-основном автоматически. В-принципе, очень похоже на то, как в наши дни это делает МС Ворд, ну или тогда же делал например Тех, написанный Дональдом Кнутом. С Венчурой мне попала и документация, которую я читал и познавал типографские премудрости и терминологию. У меня вполне получалось верстать игрушечные тексты для развлечения, но ни для чего серьезного она так и не пригодилась. Ну, кроме случая, когда я за деньги поставил крякнутую Венчуру на завод автоприцепов и поучил их основам ее использования.
  
  МС Ворд потом, в пятой версии, тоже умел прилично форматировать на печати, но набор текста в нем шел в МС-ДОС в текстовом режиме. Форматирование делалось командами, которые я так и не запомнил, и Ворд не полюбил.
  
  Интересно, что шрифты в то время зависели от принтера. Для каждой программы верстки шли свои драйвера принтера, и для каждого драйвера шли отдельные наборы шрифтов. И запросто могло быть, что для изображения на экране использовались растровые шрифты (то есть, нарисованные под конкретный размер по точкам, для ограниченного набора размеров), а на принтере векторные (нарисованные математическим описанием линий, которые потом масшабировались под нужное количество точек), и они могли не очень совпадать по виду и размерам. Я тогда не понимал, почему бы не сделать векторные шрифты везде? Но в ретроспективе, сложно хорошо масштабировать векторные шрифты под малые размеры в точках, в них норовят вылезти разные неожиданные корявости. А разрешение мониторов и матричных принтеров было небольшое, так что размеры в точках были небольшими. Я это все узнал потом, когда занялся конвертером шрифтов, чтобы добыть себе больше векторных шрифтов для Иксов на Юниксе.
  
  Шестой Ворд, уже для Виндовс, появился года около 1995-го и был впервые способен показывать документ в таком же виде, как он потом печатался, и пользовался большим успехом. Но, иронически, я к тому времени уже несколько разочаровался в возне с оформлением, и стал обычно предпочитать простой текстовый редактор.
  
  Где-то примерно тогда же я впервые увидел и опробовал Lyx, который был попыткой сделать WYSIWYG (то есть, с изображением на печати) редактор из Теха. Но он тогда работал довольно неустойчиво. Техом (от Кнута) я долго интересовался, потом уже в Америке читал про него книжки, но как-то не сильно удосужился воспользоваться. На практике мне случайно пришлось им воспользоваться двадцать с лишним лет спустя, и я должен сказать, что в форматировании формул он действительно грандиозен. Умеет верстать очень сложные и многоэтажные формулы.
  
  А потом этоот интерес к верстке у меня вылился в интерес к устройству графических интерфейсов - тех же самых Иксов. Исходныйе тексты от них позже были доступны, и тоже стали поучительным чтением.
  
  Еще интересно вспомнить, что про язык фоматирования SGML, от которого потом произошли современный язык веб-верстки HTML и язык структурных данных XML, я впервые прочитал в журнале "Программирование" где-то в начале 1990-х. То есть, в-принципе, про новейшие технологии в нем вполне печатали. Но само описание мне запомнилось как довольно бюрократическое и невпечатляющее. И только через несколько лет, когда я увидел упоминание этого языка как прародителя HTML, я вспомнил про эту статью, нашел и еще раз прочитал ее (и еще раз не впечатлился текстом). Вообще интересно, как в советских книжках часто умели испортить изложение. Вот например, у меня была какая-то обзорная книжка по разным сетевым технологиям, где среди прочего была глава и про TCP/IP, протоколы интернета. Так они выглядели там совсем иначе, чем в англоязычных книжках. Очень похоже на ИБМовские описания, где проскакивалось по верхушкам, с непониманием важных деталей. Ну и наверное писалось людьми, жившими в традициях ИБМ (то есть, ЕС ЭВМ).
  
  Декомпиляция
  
  Чтобы что-то поменять в готовой скомпилированной программе (ну, например, отрезать ей защиту от копирования), в ней надо сначала разобраться. А чтобы разобраться, надо перевести из формы чисел в более читабельную для человека форму, например дизассемблировать в язык ассемблера, где машинные команды все еще изображены одна к одной, но уже словами, а не цифрами. Есть два способа это сделать: или запустить программу в отладчике, в котором потом можно дизассемблировать куски по частям и читать их, или напустить на весь файл искомой программы программу-дизассемблер. Мне второй способ всегда нравился больше. Меня очень впечатляет, как некоторые люди умеют отслеживать нужные куски прям в отладчике, но у меня самого это плохо получается. Мне больше нравится все дизассмеблировать, а потом спокойно изучать, и добавлять свои заметки. Но и дизассемблированный код понимать тяжело, так что я для себя разработал методу, когда я перевожу ассемблерную версию в язык высокого уровня, в Си. Естественно, моя программа не полностью соответствует оригиналу. Начиная с того, что я стараюсь ограничиться важными для меня кусками, чтобы не делать лишней работы, продолжая тем, что имена переменных и прочего приходится придумывать самому с нуля, исходя из своих предположений об их смысле, и заканчивая тем, что программа может быть совсем на другом языке. Например, программы на Паскале мне больше нравилось декомпилировать в Си, просто потому что Паскаль - убогий и нечитабельный язык.
  
  Это, кстати, не во всех языках такие проблемы. Для языков, которые производят код не реальных машин, а виртуальных нитерпретаторов, декомпиляция может быть гораздо проще, и например для Джавы (Java) вполне существуют полностью автоматические декомпиляторы (например, JODE - Java Open DEcompiler), которые выдают исходный код, очень близкий к оригиналу, ну опять же за вычетом имен. Но таких языков тогда не очень-то и существовало в массовом использовании. Хотя нет, я знаю почерпнутую из ФИДО историю языка такого типа из тех времен. В конце-80-х-начале-90-х были очень популярны "приключенческие игры" (adventure games), то есть игры-головоломки, они же квесты, где персонажу надо пройти по сюжету, находя "ключики" к проблемам, которые перед ним ставит игра. Самые популярные, и я даже скажу лучшие, игры производились фирмой Сьерра Онлайн (Sierra Online), наверное даже и сово "квест" как обозначение такого типа игр пошло от них - Hero's Quest, King's Quest, Space Quest, Police Quest, и Leisure Suit Larry. Писать на обычном языке программирования им быстро надоело, и они создали свой интерпретируемый язык для написания игр. Язык брал на себя массу всевозможных деталей, типа рисования ходьбы персонажа, так что авторы игр могут состредоточиться на более важных вещах. Ну и нашлись люди, которые разобрались в этом языке. В-основном, для того, чтобы понять, как проходить "затыки" в игре. Это тоже был такой способ защиты от копирования: в игру вставлялись головоломки, которые было невозможно понять в самой игре, вместо того их следовало решать исходя из информации в бумажном руководстве к игре, которое было гораздо сложнее скопировать. Интересно, что сейчас существует система, которая позволяет запускать их ранние игры в онлайне на http://sarien.net, тоже написанная способом декомпиляции.
  
  Возвращаясь к нашим баранам, в компилированных в машинный код программах, получается делать декомпиляцию только вручную. И я в этом неплохо насобачился, и в МС-ДОСе и в Юниксе. Вот таким образом я делал, помимо кряканья разных защит, и выключение бесперебойников при остановке машины для железнодорожников, и расковырял генерацию серийных номеров для СКО Юникса (а то когда мы стали их соединять через сеть, они обижались, когда обнаруживали в сети другие машины с таким же номером). Потом, кстати, в Челиндбанке эта проблема всплыла опять: там у нас уже были все честные лицензии, но я делал их двух машин доморощенный кластер, где две машины полностью зеркалили друг друга, через регулярное копирование всех изменений с ведущей машины на ведомую. Ну а раз зеркалили, то туда же зеркалился и серийный номер, машины видели друг друга, и выключались. К тому времени они усложнили алгоритм генерации серийных номеров, добавив туда криптографию, которую я так и не разобрал, но тут я придумал более простое решение: фаерволл, который отрежет посылку и принятие сообщений через сеть лицензионным модулем. Собственно фаерволла тогда в СКО Юниксе не было, поэтому я сделал свой, заточенный под эту конкретную проблему.
  
  А в сетевых модулях я насобачился еще на ЧМК, готовясь к подключению его к интернетам. Полученный мной от RIPE диапазон адресов был ограниченным, поэтому внутри завода надо было использовать другие адреса, зарезервированные для внутренних сетей (ну и плюс оно хорошо для безопасности, чтобы не все было доступно наружу). Всё ничего, кроме машин, которые хочется подключить к обоим сетям, и внешней, и внутренней. Проводить к ним по два кабеля к двум сетевым платам как-то глупо, и даже один и тот же кабель к двум платам тоже как-то глупо, можно бы заставить две сети работать в одном кабеле через одну плату. Сейчас это решение совершенно типовое, называется aliasing (алиасинг) - когда одной физической плате дается несколько "имен". А тогда я придумал этот алиасинг сам по себе, но проблема была в том, что родные драйверы такого не позволяли. Тогда я написал свой модуль сетевого драйвера который вставлялся как "тройник" между драйвером платы и интернетной подсистемой, и делал вид, что там вместо одной платы несколько. Там, конечно, кое-какая документация была, но нужные подробности пришлось расковыривать декомпиляцией вручную.
  
  Самым же эпичным моим проектом в этой области стала халтурка для Связьинформа. Которую я делал на работе на ЧМК (да, такое было тогда вполне в порядке вещей). Они тогда купили для подключения своих модемов мультипортовую плату с "интеллектом": вместо того, чтобы основной процессор компьютера читал каждый принимаемый байт по прерыванию (и иногда терял его при большой нагрузке), на той плате стоял свой собственный маленький процессор, который собирал эти байты с последовательного порта в буфер памяти, и наоборот посылал в порт байты из другого буфера, и так 16 портов. Все ничего, но драйвер этой платы глючил и все висло. Деньги за эту плату были заплачены по тем временам большие, поэтому Костя Бердников мне предложил: а не возьмешься ли ты переписать этот драйвер за деньги? Ведь ты уже один драйвер написал? Ну, и я взялся. Документации к этой плате не было, так что сначала я декомпилировал родной драйвер и добыл из него информацию о том, как управлять этой платой. И потом написал свой драйвер. Который в итоге работал. Попутно я узнал очень много деталей о последовательных портах и их управляющих сигналах. В моем-то первом драйвере это все было не сильно важно, там у меня был собственный протокол, а для модемов это все важно.
  
  Ну, и позже навык декомпиляции мне тоже пригодился. В Челиндбанке мне таким образом пофиксить парочку глюков на СКО Юниксе и на HP-UX гораздо быстрее, чем официальным путем через поддержку. Забавным образом он мне пригодился и уже когда я работал в СКО - мы тогда купили в группу бесперебойники, уже с их своим драйвером для управления, который тоже глючил, ну и шустренько пофиксил тот глюк.
  
  И другим образом тоже пригодилось: в СКО я потом работал с людьми, которые делали ту систему защиты, и сильно верили в нее. Но я-то ее уже до того ломал два раза, и потому эту веру охлаждал. Но они мне все равно не особо верили.
  
  Я потом в Челиндбанке написал свой дизассемблер для x86, с помошью в декомпиляции. Идея там была в том, что декомпилированный код можно было вручную аннотировать, и потом эту аннотацию давать дизассемблеру для следующего прохода. То есть, в простейшем примере, определив вручную, что какой-то адрес содержит код или данные, а дизассмеблер автоматически определил это неправильно, можно это пометить, и на следующем проходе он учтет эту пометку (и перенесет ее в новый результат). Ну и потом давать имена адресам, чтобы автоматически выходили адреса переменных, помечать регистры и адреса как содержащие структуры, чтобы автоматически подставлять имена полей вместо смещений. Грандиозный план был в том, чтобы довести это до более-менее полноценного полуавтоматического декомпилятора, но он так и не доделался.
  
  Вот, кстати, недавно (2021) я увидел рекламу коммерческого декомпилятора в C++. Это весьма нетривиальный фокус, и интересно, что в этой области произошел такой большой прогресс.
  
  Программирование на шелле
  
  Устанавливать СКО Юникс с дискет было долгой процедурой. Он занимал около 20 дискет по 1.44 мегабайта (с вариантами, ставить ли дополнительные пакеты, или нет, число дискет варьировалось), и просто даже тупо прочитать их требовало времени. Плюс настраивать настройки. И потом еще ставить Оракл. В-принципе, вроде бы в природе существовал и дистрибутив на ленте, но не у нас на ЧМК - у нас по традиции все ставилось во многих экземплярах из одной купленной дискетной копии. И вот я озаботился тем, чтобы ускорить эту процедуру через установку с ленты. Первые две дискеты, с которых грузилась система, все равно были нужны, но дальше все у меня грузилось с ленты гораздо быстрее. Плюс я туда же засунул кучу наших умолчальных настроек, и прочее типа Оракла. Этот проект был занимателен тем, что потребовал изучить множество шелловых скриптов, из которых была построена система инсталляции. Что дало возможность многому научиться, хитростям программирования скриптов на шелле и прочем. Точно так же как чтение чужих драйверов позволило научиться многим приемам программирования в ядре Юникса, и уже потом чтение исходников FreeBSD - многим приемам, использованным внутри ядра.
  
  Это вообще интересно сравнить программирование с писательством. Когда кто-то берется писать художественные книжки, от него обычно ожидают, что он до того прочитал много чужих художественных книжек. А с программированием почему-то у людей часто есть странное ожидание, что вот окончил курсы и сразу пошел писать программы. На самом деле оно так не работает. То есть, работает, но в той же мере, как и роман, написанный человеком, не прочитавшим ни одной книжки. В реальности очень нужен опыт, набираемый из чтения чужих программ перед написанием своих. И когда люди говорят, что ах, я пришел на первую работу, а там надо работать над программой, в которой уже есть миллион строк - это не то, чего нужно пугаться, это то, на чем надо учиться. По-хорошему в институте должны быть курсы по изучению чужих программ. Я, кстати, не так давно подал такую идею Вове Патрышеву - он для прикола пристроился вести программирование в каком-то университете, и раздумывал о том, что преподавать в курсе под названием "архитектура программ". Вот как раз изучение чужих программ очень подходит к такому названию. Будем надеяться, что кому-нибудь от этого вышла польза и знание.
  
  Коррекция ошибок
  
  За время существования компьютеров было придумано много вариантов магнитных лент. Ленты живы до сих пор, в качестве средств архивного хранения информации. В конце 1980-х-начале-1990-х альтернативоми архивного хранения и переноса информации были или куча дискет или лента.
  
  От Оливетти на ЧМК были стримеры (streaming tape), официально известный как формат QIC-40. Streaming (поточный) он назывался, поскольку в отличие от классических лент, которые еще использовались на ЕС ЭВМ, и где впоперек ленты записывался сразу байт информации восемью головками, тут писался один бит за раз одной головкой, почти как БК на домашний магнитофон. Но дальше дело обстояло интереснее: доехав до конца ленты, головка смещалась на следующую дорожку, и продолжала писать (или читать) в обратную сторону.
  
  Но выяснилась и неприятность: надежность у них была так себе. Регулярно где-нибудь портились биты данных. Поэтому мне пришло в голову сделать избыточное кодирование файлов перед записью на ленту, чтобы ошибки корректировались. Я примерно тогда прочитал в институте какую-то книжку про корректирующие коды (уж не помню в связи с каким предметом, собственно корректирующие коды мы, мне кажется, проскочили, но про них было в соседней главе, которую я тоже прочитал). В книжке очень популярно объяснялась идея коррекции даже и без кодов Хэмминга, очень просто:
  
  Предположим, что у нас есть 64 бита (8 байт) данных, в которых мы хотим суметь скорректировать один бит, будя он окажется испорченным. Тогда мы берем и записываем эти 64 бита квадратом 8x8. Справа мы добавляем еще один столбец из 8 контрольных бит, и в каждой строке считаем четность (исключающее или) и записываем результат в этот дополнительный контрольный бит справа. Теперь снизу добавляем еще строчку из 8 контрольных бит, и опять считаем четность, но уже по столбцам. Теперь делаем вид, что мы куда-то передавали наши данные и в них испортился ровно один бит. Как это проявится? Мы опять посчитаем четность по горизонтали и вертикали и сравним с той, которую мы получили изначально. В строчке и столбце, где был испорчен бит, четность не совпадет. Поскольку у бита есть только два возможных значения, то зная строчку и столбец, мы можем поменять значение на их пересечении на обратное и исправить ошибку. Если же испортится контрольный бит, то окажется, что несовпадение только в строчке, но не в столбце, или же в столбце, но не в строчке, и мы можем такую ошибку игнорировать. А что если испортятся сразу два бита? У нас будет две строчки и два столбца с ошибкой, с четырьмя возможнами пересечениями, и мы не будет знать, какие два из них надо исправлять. То есть, мы сможем обнаружить ошибку, но не исправить ее. Ну или как вариант, если например обе ошибки в одном столбце, то мы получим две неправильных строки, но внутри столбца ошибки скомпенсируют друг друга, и мы не будем знать, какой столбец. Может быть и еще хуже, если испортится один контрольный бит по строкам и один контрольный бит по столбцам, то мы примем это за одну ошибку и попытаемся ее "исправить". Ну, а с тремя ошибками может случиться и вовсе всякое.
  
  Но чтоб исправить эту одну ошибку, мы на 64 бита данных добавили 16 контрольных бит, увеличив размер на четверть. Степень надежности можно регулировать, меняя размер квадрата: чем меньше квадрат, тем больше ошибок (на то же суммарное число бит) оказываются исправляемыми, но и больше избыточность. Если например взять квадрат 4х4, то мы сможем исправлять не 1 бит из 64, а 1 бит из 16, но при этом мы добавим 8 контрольных бит на квадрат, то есть уже не четверть, а половину. Коды Хэмминга позволяют использовать минимальное количество избыточности для данной степени надежности.
  
  Коды Хэмминга в той книжке тоже объяснялись, но более запутанно, переход от квадратов к ним был неочевиден, и я тогда не очень понял. К тому моменту, когда я взялся сделать это избыточное кодирование, книжку я уже сдал в библиотеку, интернетов с информацией тогда не было, а вот кодирование по квадратам я хорошо запомнил, так что сделал его, и оно замечательно улучшило надежность ленты.
  
  Но в ретроспективе я вам сейчас расскажу, как по-простому перейти от квадратов к кодам Хэмминга. Первая половина там такая, что квадрат - не самое удачное геометрическое представление. Куб оказывается лучше, у него меньше контрольных бит на такое же количество значащих. То есть, например, если вместо квадрата 8x8 взять куб 4x4x4, то в нем будут те же самые 64 значащих бита, но только 12 контрольных бит (4+4+4) вместо 16. Каждый контрольный бит будет соответствовать одному слою куба: 4 контрольных бита для 4 горизонтальных слоев, 4 для вертикальных слоев, повернутых в нам торцом, и 4 для вертикальных слоев, повернутых к нам плашмя. И ошибка в одном бите данных будет проявляться аж в трех контрольных битах. А многомерный куб (он же гиперкуб) - еще лучше. Поэтому куб догоняют до максимальной размерности, чтобы по каждому измерению в нем было всего 2 бита.
  
  Вторая половина там такая, что необязательно, чтобы на каждом бите пересекались ровно два или другое фиксированное число контрольных битов. Если пересекаются как минимум два контрольных бита, то ничуть не хуже.
  
  Поэтому для гиперкуба со стороной длины 2 в каждом измерении можно отвести по одному контрольному биту на измерение, считая четность всех бит, у которых в этом измерении выходит координата 0 (ну или 1, по сути без разницы). То есть, каждый контрольный бит ответственен за половину от всех бит в кубе, но эта половина оказывается выбрана для каждого контрольного бита по-разному. То есть, если развернуть наш гиперкуб назад в линейную форму, как мы это делаем для многомерных массивов, то окажется, что первый контрольный бит ответственен за биты данных под номерами 0, 2, 4, 6 и т.д. (одн через один), второй бит - 0, 1, 4, 5, 8, 9 и т.д. (два через два), третий - 0, 1, 2, 3, 8, 9, 10, 11 и т.д. (четыре через четыре).
  
  Логически рассуждая, для 16 бит данных так может быть достаточно 4 контрольных бит. То есть проверка проводится так: начинаем с контрольного бита "8 через 8", если он не совпадает, то дальше смотрим только на биты 0-7, а если совпадает - то на 8-15. Потом на "4 через 4", если не совпадает - то оставляем "младшие четверки" (то есть урезаем подозрительные диапазоны до 0-3 или 8-11), а если совпадает - то наоборот, оставляем "старшие четверки", и так далее.
  
  Все казалось бы хорошо, но, если биты старательно расписать в табличку, то оказывается, что биты под номерами 7, 11, 13, 14, 15 поучаствовали только в одном контрольном бите, то есть мы не сможем отличить ошибку в одном бите данных от ошибки в одном контрольном бите. Что делать? Один простой способ - добавить еще один контрольный бит, считающий "16 через 16", то есть все 16 имеющихся бит. Но при этом у бита под номером 15 все равно будет только один контрольный. Его можно просто включить в набор для какого-то другого бита в нарушение обычного правила, как особый случай. При проверке же тоже проверять как особый случай. Но можно поступить и по-другому. Просто не использовать биты 7, 11, 13, 14, 15, не класть туда данные, а просто считать, что они всегда равны 0 и не передавать их, а реальные биты данных переотобразить на "хорошие" позииции. Тогда на 4 контрольных бита выйдет 11 битов данных, которые передаются и восстанавливаемы, в точности такое же соотношение, как и у настоящих кодов Хэмминга. А если добавить пятый контрольный бит, то по такому принципу получается не 15, а целых 26 "хороших" позиций из 32. Если взять размер близкий к нашему изначальному примеру, 57 бит с 6 контрольными битами, то выходит что по сравнению с "квадратным" кодированием вышла чуть более лучшая защита (1 из 57, по сравнению с 1 из 64), добавив всего чуть больше 10% в контрольных битах, а не 25% как в квадратном кодировании.
  
  Отличие настоящих кодов Хэмминга от этого примера - только в том, что там добавляется хитрая нумерация битов. Контрольные биты передаются не отдельной кучкой, а втыкаются между битов данных, и нумеруются так, что сложение номеров позиций всех контрольных битов, оказавшихся при проверке неправильными, прямо дает номер позиции, в которой находится испорченный бит.
  
  Потом, когда купили железо от Хьюлетт-Паккарда, в них были ленты DAT DDS (с кассетами того же размера, что и в соневских кассетах для видеокамер), и они были гораздо надежнее. Не идеально надежными, но гораздо лучше, чем QIC. Хотя тоже сильно зависело от производителя лентопровода - у Хьюлетт-Паккарда было прилично, а вот в потом в Челиндбанке в машинах ICL казалось бы такие же устройства DAT, но другого производителя, глючили часто.
  
  Учеба
  
  Вообще у меня институт пошел гораздо легче школы. А школа мне при всех ее недостатках нравилась больше, чем садик, и потом работа - больше, чем институт. Тут есть явная прогрессия, что чем дальше, тем больше свободы и меньше обязаловки.
  
  Ну, и в институте было учиться легче, чем в школе, и на старших курсах института легче, чем на младших. Чем дальше, тем было больше специальных предметов, которые интересные, простые и понятные, и меньше общеобразовательной мутоты, которая унылая, утомительная, и упертая в бессмыссленное запоминание.
  
  Нет, среди общеобразовательных предметов тоже были интересные. Мне вот очень понравилась макроэкономика. Она шла уже по переводным учебникам. Тетенька, правда, ее не очень преподавала, она больше рассказывала, как она порхала на местной бирже, но учебник был очень логичный и читабельный. В ретроспективе, конечно, учебник (Самуэльсон и кто-то) был несколько устаревший, превозносящий кейнсианство, про которое теперь уже известно, что оно - чушь, а Рузвельт, полагавшийся на него - дебил и фашистская сволочь. Меня уже тогда удивляло, что они рассказывали, как типа благодаря 2-й мировой войне с ее госзаказами Америка вышла из кризиса. Но уровень-то жизни при этом упал, потому что производилось всевозможное военное имущество, которое немедленно просиралось на войне. Каждый выстреленный снаряд сразу же перестает существовать.
  
  Реальная история Великой Депрессии, как я узнал ее гораздо позднее (и как ее нынче официально признает даже Федеральный Резерв), оказалась гораздо интереснее: Банкиры, которые раньше занимались эмиссией денег независмо друг от друга, учредили центральный банк, Федеральный Резерв. И решили, что все эти спекуляции на акциях, бурно росших в 1920-е годы - это чересчур, надо бы их прикрутить. Прикрутили методом повышения процентной ставки. И моментально уронили экономику. Связь экономического роста с процентной ставкой тогда никто не понимал, и еще долго не понимал (в учебнике Самуэльсона про монетаризм еще говорят как про фантастическую теорию). Причем уронили до такой степени, что исчезла из обращения даже наличность. Рузвельт напечатал еще наличности, и взялся за огосударствленние экономики и раскручивание инфляции. Но ставку они так и не понизили, и инфляцию раскручивали тоже не в гипер. Поэтому экономика так и продолжала загибаться. Вся рузвельтовская суета была совершенно бессмыссленой и по большому счету только делала все хуже (но зато при этом размазывала говно более ровным слоем, чтобы было плохо всем, но не очень-очень плохо). И только уже когда началась война и им потребовалось раскручивать военное производство, тут-то они и понизили ставку. И моментально произошло "восстановление экономики", но конечно не уровня жизни. А вот уже после войны, когда производство перестало вбухиваться в никуда, а процентная ставка осталась низкой, наконец-то произошел экономический расцвет.
  
  Интересно, что у экономистов имеется своя собственная математическая терминология: видимо, бухгалтера изобрели математческие концепции на практике независимо от математиков, и вместе с тем - свои собственные обозначения. Например, отрицательные числа традиционно записывали красными чернилами или в скобках, а не со знаком минус. Слово "маргинальный" меня доставало, пока я не понял, что оно означает приращение, изменение, производную. Понятно, что оно идет от английского слова "margin", но "margin" у меня до того из уроков английского означало "поля в тетради". Какое тут отношение к полям? Как я догадался гораздо позже, на самом деле "margin" означает "край", откуда происходят все его значения - и край тетради, и комиссия со сделки (которую по-русски переводят как "маржа") как отрезаемый край прибыли, и маргиналы - люди с краю общества, и маргинальная стоимость - крайняя стоимость, изменившаяся с прошлого раза. (Для любопытствующих - нет, к плоти это слово по-английски не применяется).
  
  В примерно 1992 году как раз шла приватизация, и тетенька рассказывала, как она была на первых торгах "ваучеров" (приватизационных чеков) на челябинской бирже. Они тогда продались выше номинала, что-то типа по 15 тысяч рублей вместо 10 тысяч. Пока депутаты обсуждали тогда еще Верховном Совете приватизацию, , вот эти 10 тысяч еще сравнивали с "как новый автомобиль Волга" - инфляция тогда уже начиналась, но еще была небольшая. Идея приватизации тогда была в том, что каждому гражданину раздавали по ваучеру, на которые можно было купить акции предприятий, плюс были специальные дополнения для руководителей и трудовых коллективов. Изначально было три "модели" (варианта) приватизации для предприятий разного масштаба. Но потом в последний момент Верховный Совет под давлением коммунистов добавил четвертую модель приватизации, которая позволила директорам мелких конторок приватизировать их единолично, а также добавили приватизацию за деньги в произвольных количествах. Вот эта приватизация за деньги подкосила ценность ваучеров. В изначальном плане платежеспособные средства ограничивались ваучерами, поэтому желающим купить какое-то предприятие приходилось конкурировать за ваучеры, и это поднимало их ценность выше номинала. А как только разрешили приватизацию за деньги, не стало никакого смысла за ваучеры платить больше номинала. Наоборот, люди, не верящие в приватизацию сбывали их с большой скидкой, и ближе к концу приватизации цена на них упала до 3 тысяч и ниже, уже даже после инфляции. В нашей семье вкладывали ваучеры в-основном в ЧМК, по линии приватизации для трудовых коллективов, поскольку мы все там работали, хотя папа покупал и акции каких-то банков тоже. И докупали ваучеры со скидкой, чтобы дополнительно вложить. Акции ЧМК потом прилично росли когда была борьба разных фирм за контроль над ним. В Америку я приехал с 11 тысячами долларов, из которых часть была накоплена из зарплаты, а тысяч семь было с продажи тех акций. Родители у меня потом покупали машину, продав те акции. В-общем, вышло, что добылась не новая Волга, как когда-то говорили, а вполне себе новый Форд. Ну, а кто в приватизацию не верил - тот оказался сам себе злобный Буратино и остался на бобах.
  
  А вот микроэкономика (бывшая "экономика предприятия") была предметом несколько унылым, преподававшимся еще в-основном по советским канонам. Хотя и в ней были интересные моменты, типа диаграмм э-э-э Гантта, что-ли, где строится зависимость между задачами в проекте и потом оказывается, что брось на него хоть тысячу человек, быстрее некоего фиксированного времени не получается. Ну, которая является центральной темой из MS Project и тому подобного. Тетенька, преподававшая микроэкономику, писала диссертацию, и ей надо было к диссертации программу. Так что в счет то ли экзамена, то ли курсового я вместе с одногруппником ей писал эту программу.
  
  Социологию у нас вел дяденька, перековавшийся из "научного коммунизма". Он регулярно проводил какие-то опросы, и на практических занятиях давал нам обрабатывать карточки ответов. Там надо было находить среднее значение по пунктам ответов. Это среднее он потом сводил совершенно удивительным образом: сначала каждый студент считал среднее со своих карточек (которых необязательно было равное количество), потом он эти цифры усреднял до среднего по группе (с разным количеством студентов на занятиях), ну а потом видимо из этих цифер получал общее среднее. Так на самом деле делать нельзя, среднее получается неправильное. Но вот такие социологи.
  
  А "безопасность жизнедеятельности" (БЖД) была перекована из "гражданской обороны". Там мы проходили, как осторожно себя вести среди проводов под напряжением. Из этого предмета мне запомнилось два момента.
  
  Один - как ведущий его дядечка нашел какой-то тест на запоминание, где он читает постепенно удлинняющуюся последовательность из цифер, и ее надо воспроизводить, после каждого раза к ней добавляется цифра, пока не ошибешься. И я смог воспроизвести что-то довольно длинное, на что дядечка заметил "вот, на Западе за вами бы уже стояла очередь из работодателей". Я не стал его огорчать, но в-принципе у меня и так вполне имелась очередь из работодателей. Ну, и в ретроспективе, конечно, нет, никто из работодателей не интересуется умениями по воспроизведении строки циферок. Работодатели интересуются образцами умения делать конкретную работу.
  
  Второй момент - дядечка этот в виде хобби интересовался искусственным интеллектом в том виде как он существовал в то время - то есть, экспертными системами, про которые он знал подход дерева принятия решений. И нашей специальности, как людям, умеющим программировать, он вместо экзамена выдавал проекты по написанию таких мини-экспертных систем по образцам из его книжки. Я не думаю, что он хорошо понимал, что там собственно делается, я думаю, что ему это было интересно в качестве игрушек и образцов для изучения. А я за немножко лет до того купил книжку-сборник статей про искусственные интеллекты, где меня особо впечатлила статья про байесовые системы. Книжка эта у меня потом где-то затерялась в шкафу, а как раз незадолго до курса БЖД опять попалась мне в руки. Это вот кстати интересно, как помнишь, что что-то такое было, но найти не можешь, и уже начинаешь сомневаться, а было ли оно, а потом раз, попадается в руки, и оказывается, что да, действительно все было как запомнил. Мне как раз тоже хотелось поиграть с этой байесовой идеей. И вот я ему предложил сделать систему не по его книжке, а по моей книжке. Дядечка заинтересовался, и идея ему понравилась. Оттуда вышли интересные последствия через почти 20 лет, когда нашел это му применение, работая в Гугле.
  
  Философия мне запомнилась в виде мути (там тоже был преподаватель чего-то бывше-марксистского), но как потом оказалось, является занятием интересным и увлекательным. Надо только не перетирать всю эту чужую муть как требуют в институте, а думать своей головой и строить свою философию. Нынче я очень люблю философствовать и рассуждать о сути вещей, но об этом я еще доберусь до подробностей в отдельной главе.
  
  По иностранному языку у нас были группы английского и немецкого, и я решил, что интереснее будет пойти на английкий, начиная с вечернего и далее на дневной. Поскольку до того я его учил на технических текстах, то у меня был и своеобразный перекос в наборе слов (помню, как-то надо было перевести слово "заголовок", ну я его естественно перевел как "header", а оказалось, что надо "title") и почти полное отсутствие знания произношения. Но это быстро подтянулось, и я в английском был не хуже людей, изучавших его в школе (возможно это нам что-то говорит о качестве изучения языков в советской школе).
  
  Начертательной геометрии, которая на самом деле означает черчение всевозможных деталей в различных видах, рарезах, и проекциях, на специальности ЭВМ не было. Когда-то она была у всех в политехе, но тут перестройка, зарождение академических свобод, и ее исключили за не надобностью. Но я-то первый семестр учился на вечернем КиТРЭС, и там она все еще была. И мне на самом деле нравилась. Вела лекции по ней креативная тетенька, имени котороя я уже не помню, в одной из видео-аудиторий в корпусе 3Г. Видео заключалось в том, что у преподавателя стояла над столом видеокамера, а в студенческие парты были встроены маленькие телевизоры, по одному на двух студентов, в довольно вандалоустойчивых корпусах. И в этих телевизорах было видно, что преподаватель рисует на бумаге. Конспекты по начерталке мы писали не в обычных тетрадях, а в специальных, сделаных под этот курс. Это была по сути как методичка, но в-основном пустая, с местом для записей. Но в ней были заранее напечатаны фрагменты рисунков, которые дорисовывались во время лекций - иногда, например, просто координатные оси для трехмерных проекций, иногда и части чертежей. Самыми сложными вещами в начерталке были рисование параллельных линий (так еще ничего, а вот при штриховке - очень утомительно) и заполнение "штампа" (то есть, размещаемого в углу описания чертежа) по ГОСТу. Но параллельне линии у мен были механизированы. У професисоналов это делается (то есть, делалось, сейчас-то уже вряд-ли кто-то так рисует) кульманом с пантографом, который позволяет перемещать уголковую линейку в любом направлении, сохраняя параллельность. У меня же еще со школы была линейка с валиком, на котором ее можно было катать вверх-вниз по бумаге. На валике была нанесена диагональная линия, которую было видно через щель в корпусе наверху валика, и смещение линии по шкале показывало расстояние между параллельными линиями.
  
  Теле-аудиторий в институте было несколько. Одна из этих аудиторий была у нашей кафедры на втором этаже корпуса 3Б, и в ней шло много специальных предметов. А, скажем, физика шла в той же теле-аудитории, что и начерталка. Для физики была еще и компьютеризованная лаборатория в главном корпусе, для автоматизированных контрольных. Эта была маленькая, на группу, а не на поток. Там на столе каждого студента стоял телевизор чуть покрупнее, с приделанными к нему несколькими кнопками. На телевизоре показывались задачи, и кнопками надо было выбрать правильный вариант ответа. По здравом размышлении, конечно, это скорее всего был не просто телевизор, а графический терминал, способный нарисовать изображение по командам.
  
  Из теоретических основ электротехники мне открылось интересное понимание про математику, каков смысл комплексных чисел. Ну ладно, ну корень из минус единицы, но чему они соответствуют в реальности? Как оказалось, комплексные числа соответствуют векторам на плоскости, в двух координатах. Операции над ними - сложение, умножение, вычитание, деление, соответствуют операциям над векторами. Как говорится, "как это неожиданно оказывается предусмотрено, что у кошки на шкурке дырки как раз там, где у кошки глазки".
  
  Предметы по специальности у нас в довольно многих случаях делились на несколько частей одного предмета, ведущихся разными преподавателями. Я так понимаю, потому что у них был некий утвержденный план предметов для специальности, и надо было вписываться в заложенные в него названия и часы. Так вот, например, "прикладная математика" у нас состояла из двух разделов, ведущихся параллельно двумя разными людьми (Ершовым вроде бы Сергеем Петровичем и Самохваловым вроде бы Анатолием Степановичем). Ершовская часть была про теорию вычислений, от машин Поста и Тьюринга, до групп и колец, а самохваловская - про теорию вероятностей. Аналогично было со схемотехникой - у нее была половина Ершова, и половина Бориса Васильевича Винникова. У Винникова, кстати, была интересная история: когда в СССР разрешили кооперативы, они собрались и изготовили для СМ ЭВМ альтернативную процессорную плату (у которой Винников был главным разработчиком) с конвейеризацией, которая ускоряла машину чуть ли не на порядок. Советская цифровая электроника жила в другой эпохе, чем западная. В западной к 1990-м годам научились изготавливать быструю логику, и узким местом была память. А с советскими технологиями логика была медленной, поэтому конвейеризация давала огромный эффект, позволяя процессору догнать скорость памяти. Ну и вот соответственно мы проходили на его предмете разработку процессоров и конвейеризацию.
  
  Частью разработки процессоров являются алгоритмы для реализации умножения и деления, и вот тут я впервые понял, как собственно работает деление на бумажке, которое мы проходили в школе. С умножением и так все достаточно просто и понятно, а вот деление сложнее, и я как-то не задумывался о его сути, следуя заученному методу. Когда мы пытаемся умножить делитель на максимальную цифру в пределах 9, чтобы не получилось больше, чем первые цифры делимого, и записываем это под первыми цифрами делимого, мы на самом деле умножаем это вычитаемое число на степень десятки, определяемую сдвигом от десятичной точки в делимом. Просто мы не пишем нули на конце, оставляем вместо них пустое место. И первая цифра частного на самом деле имеет столько же нулей после себя, просто мы их опять не пишем, а оставляем там место для записи следующих цифер частного. А если бы мы эти следующие цифры частного записывали с нулями после них, в виде полных чисел, то мы бы потом складывали все эти полные числа. Ну, мы и складываем, но упрощенно: поскольку в каждом из этих цифер только одна цифра может быть не нулем, и у всех других чисел в этой позиции будет 0, то мы можем просто переписать эти значащие цифры друг за другом, что мы и делаем. Ну, а в двоичной системе тут еще все проще: каждая цифра частного может быть только 0 или 1, так что нужно только сравнить два числа и написать 1 если делимое больше или 0 если сдвинутый делитель больше.
  
  С Винниковым у меня было связано и еще одно интересное открытие: оказывается, что люди, занимающиеся железом, и даже очень хорошо в нем разбирающиеся, имеют весьма отдаленное и странное представление о том, как работают программы, и какие интерфейсы с железом для них удобны, а какие - нет (то же самое, кстати, действует и в обратную сторону). Это потом неоднократно подтверждалось и в других местах, когда мне приходилось работать с устройствами с на удивление неудобными интерфейсами, где казалось бы вот чуть-чуть поменять, и было бы гораздо лучше. Но обычно разработчики железа живут своей отдельной жизнью, и доезжает от них только результат их работы. А тут была возможность пообщаться с живым человеком и его поспрашивать. То есть, это было открытие для меня, а вообще это оказалась общеизвестная среди программистов истина. Вершиной которой стала машина VAX (вакс, которая упоминается у меня и в других историях), где они аж предусмотрели в системе команд высокоуровненые операции для работы со списками, которые оказались практически невозможными к толковому использованию из языков высокого уровня (потому что дальше ассемблера проектировщики машины не думали). Хотя кто его знает, это старая истина, в наши дни, когда железо проектируется в виде программ на каком-нибудь Верилоге (специальном языке программирования), может уже и не истина. Но с другой стороны, конечно, программы на Верилоге очень сильно отличаются от обычных программ и следуют тем же общим принципам, что и проектирование вручную. В железе для каждого действия норовит иметься отдельное устройство, то есть "подпрограмма" там - это устройство, которое используется для выполнения определенного типа операций в различных повторяющихся случаях, но это именно отдельное устройство, которое может работать параллельно с другими устройствами. Ожидание опросом (busy wait) в железе - нормальная ситуация, там просто имеются несколько логических схем, которые сидят и только этим и занимаются параллельно со всем остальным. В программировании же все не так, в программировании мы завязаны на процессор, вычисляющий все последовательно.
  
  Особо наглядно это у меня проявилось в курсовой по схемотехнике, где заданием было разработать сортировщик. Казалось бы, бери и используй алгоритм быстрой сортировки, да? Но на самом деле нет, быстрая сортировка плохо подходит для железной реализации, сортировка слиянием - гораздо лучше. Тут выступают три фактора: первый - параллелизм, про который я говорил выше. Железная реализация запросто может одновременно читать из двух мест и писать в третье. Второй - цена. В программах мы полагаемся на сложную функциональность, заложенную в процессоры общего назначения, которые являются очень сложными устройствами, и на каждую мелкую финтифлюшку в железе процессор не поставишь (особенно если проектируемая финтифлюшка - часть процессора!). Третий - то, что асимптотическая оценка времени выполнения (О-большое), потому и является асимптотической, что делается для очень больших, в идеале бесконечных размеров данных. Но в железе у нас по определению размеры конечные и заложенные в размеры оборудования. Поэтому выигрыш в константе запросто перебивает асимптотическую формулу. Это, кстати, применимо и в программах, когда известны ограничения в данных. Я как-то сильно ускорил сортировку в обработке биржевых данных, заменив быструю сортировку на пузырьковую. У пузырьковой сортировки выше асимптотическая сложность, но ниже константа сложности, так что на малых размерах данных она выигрывает.
  
  Курсовых по процессорам у нас было как минимум два, на разработку процессора с очень ограниченной системой команд (примерно пять комманд). Один был на рассыпной жесткой логике, а другой на секционных процессорных микросхемах К1804 (копии какой-то из серий от AMD, на этой K1804 Винников делал свой альтернативный процессор для СМ). Системы команд обычно имели в качестве прототипа IBM 360 или 8086. В какой-то из этих проектов, наверное который на жесткой логике, и для IBM 360, я впихнул систему предвыборки инструкций как в 8086. Как оказалось, тут не все так просто: предвыбирать-то она предвыбирает, но потом надо засинхронизировать передачу ее результатов в основной процессор, что добавляет свои издержки. Мне очень интересно, как в современных процессорах устроена суперскалярность, которая распределяет потоки инструкций по нескольким исполнительным узлам, а потом собирает результаты. Поделить-то - это понятно, а вот собрать - сложнее, и там же везде вылазят нехорошие накладные расходы. А про курсовой на 8086 я помню, что у меня руководителем был Ершов, и я принес ему свой проект не в последний момент как все, а недели за три до срока. Он, видимо, так прифигел, что они мне зачли этот курсовой без собственно защиты.
  
  Я вообще всегда любил делать проекты, что всякие лабораторные в школе, что лабораторные и курсовые в институте. Они интересные и легко идут, гораздо легче, чем все это тупое запоминание-воспроизведение. Но по предметам по специальности у нас во многих случаях и экзамены были не на воспроизведение по памяти, а можно было приносить любые книжки и конспекты, и экзамен состоял в том, чтобы разработать небольшой проект. Это одна из тех причин, почему предметы по специальности гораздо легче общеобразовательных. Если б экзамены на поступление в институт были так устроены, у меня бы в них не вышли обосратушки!
  
  А по программированию у нас курсовые часто устраивались по такому принципу: если у тебя есть работа, то можно притащить какой-нибудь готовый проект с работы в качестве курсового. Так что например драйвер для сетевого алиасинга у меня заодно пошел в качестве курсового по сетям, а декомпилированный и заново написанный драйвер умного мультипорта - в диплом.
  
  В институте для практических занятий по программированию имелся сначала класс ДВК, а потом развернули класс ИБМ-совместимых машин (польских Мазовий). Там вне групповой практики надо было записываться на время по часам, и очень удобно было всем этим не страдать, а просто пользоваться своей машиной на работе (тем более что она была и быстрее). ДВК были объединены в сеть на последовательных портах, аналогично тому как оно было на БК, но с более умными контроллерами, и на них интересно выглядела загрузка: когда машина включалась, единственное что на ней было - это Монитор, который позволял читать/писать память и запустить программу. В Мониторе надо было вколотить вручную маленькую программу в машинных кодах, что-то меньше десятка команд, и запустить ее. Она запускала загрузку операционной системы с сети.
  
  Из собственно программирования, наверное, единственная вещь, которую я действительно узнал из института была реляционная теория баз данных. Вела ее у нас Ирина Владимировна Надточий. Она в детстве переболела полиомиелитом и передвигалась на костылях. Она вела базы данных, формальные языки и грамматики, и непроцедурные языки. И вот про грамматики и непроцедурные языки типа Пролога я и до того читал в книжках, а вот с базами данных по своим интересам сталкивался мало. Ну и как бы представлял их в-основном по свсяким ди-Бейзам (dBase), хоть на ЧМК и вовсю использовался Оракл. А тут оказалось, что там не просто таблицы, а под ними есть целая математическая теория, и операции происходят из этой теории. Потом оно пригодилось, вплоть до того, что я работал над реализацией СУБД.
  
  Аналоговую электронику вел э-э-э наверное Владимир Владимирович (а может и Виктор Владимирович или Владимир Викторович, но точно В.В.) Лурье. Оно для меня стало большим познанием, так что про это я написал целый отдельный раздел ниже. Еще из его историй мне запомнились две. Одна - как он в молодости работал в каком-то КБ и они там хулиганили. Один из его сотрудников вместо расчетов номиналов пассивных элементов (типа резисторов и конденсаторов) любил собрать схему в железе с настраиваемыми пассивными элементами, потом их настроить чтоб схема правильно работала, и померять. А другие сотрудники ему подлянили, каждое утро портя настройки. Другая - как он без справочника вспоминал какую-то формулу на какой-то буровой, и из этого выводил мораль, что нельзя полагаться только на справочники, а надо и помнить формулы.
  
  Раз уж зашла речь про вспоминание формул, то у меня на эту тему тоже есть история. Как-то в ЖЖ (Livejournal) я прочитал чью-то историю о том, как ребенку надо было формулу для школы, которую почему-то не получалось найти, и вот бывший в гостях физик с бормотанием типа "нет, это не подходит, а это надо переставить сюда" ее написал. Человек там восхищался тем, как этот физик с нуля вывел формулу. Но на самом деле нет, при таком бормотании - это не вывел. Я такое тоже проделывал. Это называется "вспомнил". Когда примерно помнишь, как эта формула должна выглядеть, но не точно. Но кроме того помнишь логические ограничения, которым формула должна удовлетворять. Тогда пишешь как можешь по памяти, а потом начинаешь рассуждать, что "такое быть не может, вместо того надо переставить эту букву туда" и "а еще должна быть такая зависимость, а ее нет, так что надо еще добавить вот такую букву". И в итоге оно вполне нормально вспоминается.
  
  Курс по разводке плат, который у нас вела тетенька, имя которй я вспомнить не могу, включал в себя несколько странные лабораторные работы с на удивление устаревшими компонентами из эпохи, когда советская вычислительная техника была конкурентоспособной на мировом уровне. Тогда сначала перешли в устройстве машин с ламп на транзисторы, а потом стали миниатюризировать транзисторы. Сам отдельный транзистор - этакий небольшой кристалл, но он сидит в довольно крупном корпусе, который защищает его от внешней среды. И вот следующим шагом стало ставить по нескольку транзисторов в один корпус. Там как бы такая маленькая печатная плата, которую упаковывали в корпус. Это называлось "микросборка". И вот в СССР придумали упаковывать эти платы в корпусе в несколько этажей. Корпус получается размером с маленькую радиолампу, этакий вытянутый, а внутри него - скажем, целиком триггер. Ну и поскольку корпуса вытянутые вверх, их можно довольно плотно упаковывать уже на собственно печатную плату. Получалось для своего времени очень продвинуто. А потом придумали делать по нескольку транзисторов прям на одном кристалле, то есть микросхемы, и тут советская промышленность глубоко отстала.
  
  Из другого странного и для меня непрактичного, но неожиданно впечатлившего меня знания, были цифровые интеграторы. Лабораторные по ним у нас вел Ершов. Фокус там в том, что можно вычислять функции через их производные: последовательно проходим по значениям икса и вычисляем значение производной функции, а интегрируем путем последовательного складывания всех значений производной. Но для этого надо сначала вычислить производную, и ее вычисляют точно так же от второй производной. И так далее, пока какая-то производная не окажется достаточно простой функцией. Ну или скажем экспонента является производной от самой себя, поэтому в ней добавляют на каждом шаге свое собственное предыдущее значение. И так оказывается, что одним сложением можно вычислять весьма сложные функции.
  
  Про всякую высшую математику я думал, что она не очень-то и пригодится, но вот в итоге пригодилась, аж наверное два раза. Ну, в смысле, в реальности, а так-то в других предметах она и без того пригождалась, от теории вероятностей до физики, которая потом используется в электронике, до собственно электроники (но я-то не электронщик, мне электроника тоже только для интересу, а в реальности не очень-то и пригождалась). В превый раз высшая математика мне пригодилась когда я писал конвертер шрифтов ttf2pt1. Там оказалось, что многие шрифты в формате TTF нарисованы на удивление коряво, а полагаются для подчистки этой корявости на "хинты", которые в TTF представляют собой полноценную программу. Их сконвертировать, естественно, не получается, конвертируются в Type 1 только линии. Чтобы линии выглядели не коряво, в описании формата Type1 есть требования, которым должны соответствовать приличные линии, и в частности кривые там не должны пересекать место, где они касаются вертикали или горизонтали, что в шрифтах TTF происходит налево и направо. То есть, для правильной конверсии надо такие кривые резать на две части, по точке касания. Которая находится через производную, там где производная равна нулю. Ну а поскольку использующиеся в шрифтах кривые Безье определены параметрически (x и y вычисляются по формулам от скрытой переменной t, которая меняется от 0 до 1), то получается производная параметрической кривой. Которую я в конце 1990-х еще частично помнил и частично честно вывел, а сейчас уже даже и не знаю, смогу вспомнить-вывести или нет. Второй раз высшая математика пригодилась мне для понимания бустинга, и прочухивание эквивалентности линейной регрессии с формулой Байеса.
  
  Это вообще интересный момент: есть в институте всякие предметы, которые потом совсем не пригождаются в жизни, а есть, которые пригождаются редко. Ну, первые - понятно, по-хорошему бы совсем учить не надо, а вот пройти вторые в институте оказывается очень полезно. Тут фокус в том, что они достаточно утомительны сами по себе, поэтому браться изучать тему ради каждого отдельного мелкого случая - как-то чересчур утомительно, и того не стоит. Но оказывается, что этих мелких случаев набирается в итоге за жизнь столько, что оно того стоит. Поэтому изучать ее заранее, в институте, есть глубокий смысл.
  
  Когда дело подошло к получению диплома, обнаружилась интересная ситуация: в-принципе, среднего балла у меня хватает на красный диплом, но есть одна тройка. По "программированию". Которое на самом деле было программированием на Паскале с первого курса. Ну как бы да, Паскаль я во-первых всегда недолюбливал, а во-вторых там требовалось рассказывать концепции как для первого курса, а я тогда уже знал больше. Ну и опять же, может я просто не старательно отнесся к подготовке, решив, что "и так все знаю". Но тут мне дали возможность его пересдать. Вообще я до того ни разу ничего не пересдавал, как некоторые, а руководствовался принципом, что как сдал, так и сдал, и уже слава богу что как-нибудь отвязался. Но ладно, тут уже небольшое усилие, и можно постараться пересдать. Так что пошел пересдавать. И чуть опять не облажался, но кое-как поставили мне четверку. Так я внезапно оказался с красным дипломом. Я ж говорю, в институте учиться было гораздо легче, чем в школе, в школе-то у меня средний балл хорошо если до четверки дотягивал.
  
  Про электронику и транзисторы
  
  В детстве я неоднократно пытался понять электронику. Простые электрические схемы у меня шли хорошо, программирование тоже, и даже цифровые схемы были более-менее понятны (хотя то, как из всех этих простых операций в итоге складывается компьютер было непонятно), а вот аналоговая элеткроника - всякие эти транзисторы и тому подобное, была напрочь непонятна. Я и в школьном учебнике про транзисторы читал, и статьи в журналах, и аж в два радио-кружка ходил, но оно как-то совсем не складывалось.
  
  В ретроспективе, проблема была в том, что и учебник писали, и статьи в журналах, и радиокружки вели люди, которые напрочь не понимали в предмете. Один из радиокружков заключался в том, что дядечка в начале занятия по кусочкам пересказывал учебник, а потом мы где-то час распаивали старые электронные приборы на элементы. Второй заключался в том, что мы собирали скруткой (даже не пайкой) проводов на картонке устройства по расчерченным схемам. Что касается журналов, то там была с одной стороны такая же хрень как в учебнике - пересказ довольно-таки справочной информации, а сдругой стороны публиковались готовые схемы без толкового объяснения, как их создавать. Схемы эти, кроме того, были во многих случаях еще и созданы криворуко. Потом в институте на курсе электроники у нас курсовой состоял в том, чтобы объяснить, как работает какая-нибудь схема из журнала "Радио" и расчитать правильные номиналы элементов для нее (которые зачастую не совпадали с теми, что фактически были в схемах). Вот это, кстати, еще один важный момент про сложность и непонимание электроники: когда расчет номиналов путают с проектированием. Расчет - вещь вторичная, и делается по уже созданной схеме. А вот как создать ее - это вещь первичная, и делается не по расчету, а подобно логике любой другой инженерии. Вот например у меня курсовой был по схеме зарядника для 9-вольтовых аккумуляторов. Эти аккумуляторы вообще в советские времена были ценным приобретением: тогда не то что сейчас, когда дома лежит ящик батареек и пополняется по мере надобности, тогда батарейки были довольно дорогими, и еще хуже что как и все прочее в СССР то появлялись в продаже, то исчезали. Ну и, конечно, тогдашняя электроника расходовала батарейки гораздо быстрее, чем нынешняя. Так что аккумуляторы, которые можно предсказуемо заряжать, были ценной штукой. Когда я прочухал схему того зарядника, то все никак не мог понять, а как он будет работать если аккумулятор полностью разряжен? Оказалось, что действительно, он в таком режиме работать просто не будет. Это дефект конструкции, как ни расчитывай номиналы, расчетами такой дефект не поправить.
  
  Одним полезным источником стала книжка, которую мне одолжил одногруппник Андрей Литвиненко. Названия книжки уже не помню, но там наконец-то был толковый рассказ про транзисторы. Ну, а потом у нас был курс аналоговой электроники, в котором нам посоветовали совершенно классическую книжку, называвшуюся в русском переводе "Искусство схемотехники", а в оригинале - "The art of electronics". Это в-принципе многотомная книжка, идущая от аналоговой электроники до процессоров.
  
  Cамой крупной проблемой в школьном объяснении транзистора оказалось то, что они его в том объяснении подключали раком. Суть проблемы такая: в теории, можно рассматривать электрические схемы как "четырехполюсники" (как они и рассматриваются в предмете ТОЭ - Теоретические Основы Электродинамики), два провода - вход, куда подается некий сигнал, и два провода - выход, на котором схема производит некий сигнал. У транзистора же не четыре ножки, а три. Чтобы его рассматривать в виде четырехполюсника, надо использовать какую-то ножку два раза, в качестве одновременно входа и выхода. И тут есть варианты того, какую ножку для этого выбрать.
  
  Ножки эти у "традиционного" биполярного транзистора называются "база", "эмиттер", "коллектор". В школьном учебнике рассматривалось подключение "с общей базой", в котором "база" используется два раза, а на самом деле типовое подключение - "с общим эмиттером". В-общем, учебник писался учеными, а не инженерами. Сам транзистор, кстати, с теоретически-физической точки зрения в обоих случаях работает совершенно одинаково, для него ничего не меняется. Меняется наш взгляд на то, какие аспекты этой работы мы считаем важными, и какие простые соотношения между какими точками подключения мы можем легко использовать - то есть, инженерный подход.
  
  И вот если посмотреть на схему подключения с общим эмиттером, транзистор превращается в достаточно простое по сути устройство: на вход подается какое-то напряжение, а на выходе он выдает более высокое напряжение. С такой штукой делается понятно, как проектировать более сложные схемы. Ну, конечно, и не все так просто: напряжение на выходе зависит от входа нелинейно, пока напряжение на входе ниже некоего порога (примерно 0.7 Вольта для классических транзисторов), на выход не подается почти ничего, а когда вход переваливает за этот порог, то на выходе оно как ломанется - уже в примерно линейной форме. Для цифровой электроники интересна именно эта нелинейность, чтобы было то "закрыто", то "открыто", а для аналоговых усилителей - наоборот, важно чтоб транзистор всегда был в режиме "как ломанется", где зависимость практически линейная, для чего со входом делаются разные манипуляции для добавления к нему некоего фиксированного напряжения, в которых пригождаются расчеты по законам Кирхгофа.
  
  При правильном инженерном объяснении делается понятно, что электронная схема составляется из кусочков, где каждый кусочек делает какую-то относительно простую функцию. И из этих простых функций составляется функция сложная, с разными обратными связями (то есть, когда выход какого-то кусочка подается еще и на вход его самого же или более раннего кусочка). Тут, конечно, есть та дополнительная сложность, что электрический ток течет как вода в трубах - если он где-то вызывает какой-то эффект, где чего-то прибывает, то этот эффект отражается и на источнике, где за это чего-то убывает, поэтому все эти функции кусочков не однонаправленные, они влияют и назад тоже. Особенно в обратных связях, где чуть не догляди - и электричество пойдет по ним в обратную сторону. Но тут фокус в том, что кусочки эти создаются так, чтобы влияние назад было относительно небольшим, и в процессе проектирования на него можно особо не обращать внимание, а потом в конце подробности расчитываются по Кирхгофу. И вот в конце, когда схема уже составлена, ее рисуют без обозначения границ кусочков, и она начинает выглядеть как кашеобразное нагромождение элементов. Чтобы понять схему, в ней надо распознать функциональные кусочки и мысленно выделить их, и потом смотреть на то, как они взаимосвязаны. А схемы в журнале "Радио" присылали в-основном любители, которые этого не понимали, которые изначально проектировали свои схемы в виде каши.
  
  В цифровой электронике все обстоит аналогично, но вся история еще более хитрая. Цифровая электроника на самом деле начинает проектироваться в виде программы. Эта программа несколько необычная по форме, но все же программа. Потом по определенным правилам эта программа компилируется (в старые времена вручную, в наши дни - компилятором) в математические формулы. Эти математические формулы несколько преобразуются для упрощения, и потом по простым правилам отображаются в схемы. Поэтому когда дело доходит до принципиальных схем (типа тех же компьютеров, публиковавшихся в журналах), они выглядят как каша-каша-каша. Это уже не говоря о том, что соединения на цифровых схемах обычно настолько запутанны, что их даже не рисуют в виде проводов, а вместо этого просто нумеруют провода: на каких ножках обозначений микросхем на схеме написано одинаковое число, те ножки соединены проводом. Чтобы понять, что они делают, надо отследить всю цепочку назад: из схемы в формулы, из формул в программу. И вот всю эту систему ни журналы ни книжки с претензией на общее объяснение работы компьютеров не раскрывали. В них было вот тут - простые схемы для базовых логических операций, вот тут - принципиальная схема компьютера целиком, между ними - пусто.
  
  Интересным примером из мира цифровой электроники является базовый элемент памяти, известный как "RS-триггер". RS в нем - это Reset/Set, то есть Сбросить/Установить, управляющие сигналы. Он выглядит в виде своеобразной бабочкообразной схемы на двух микросхемах И-НЕ, которую любят рисовать в качестве примера. На первый взгляд, это схема взрывающая мозг, совершенно непонятно, как кто-то до такого додумался. Но если начать с описания того, как мы хотим чтобы это триггер работал, с "программы" (хоть и примитивной), и потом проследовать через математическое решение, то математическое решение выдает ту самую бабочкообразную схему. Когда я увидел это решение, то есть приложение принципов, которые я казалось бы уже знал, чтобы произвести такую на первый взгляд неочевидную схему, это было для меня большим откровением.
  
  Когда же дело доходит до реальных машин, то в них триггеры делаются еще по-другому: триггеры в них, конечно, не собираются из отдельных корпусов микросхем, а состоят из индивидуальных транзисторов внутри одного кристалла (ну, или в древние времена - на одной плате). И тут оказывается, что если взять эти две микросхемы, из которых составляется "бабочка", и разложить их до транзисторов, то образуется избыточность, выход некоторых транзисторов оказывается совсем неиспользованным, а некоторые транзисторы производят на выходе тот же сигнал, что и другие транзисторы. Поэтому от неиспользованных и дублирующих транзисторов можно избавиться, и сделать схему дешевле. То есть, происходит еще один перевод, превращающий цифровую логическую схему в по сути аналоговую схему из отдельных транзисторов, для понимания смысла которой ее надо сначала перевести в родительскую цифровую, и потом дальше вверх по цепочке.
  
  Мы изучали это проектирование цифровых схем по книжке Баранова о цифровых конечных автоматах. С конечными автоматами я уже в-принципе был знаком по книжке о компиляторах, но в цифровой схемотехнике они рассматриваются с несколько другой стороны и выглядят иначе. Баранов этот потом подался, если я правильно помню, в Гарвард, и его книжка теперь существует и в англоязычном варианте тоже.
  
  Военная кафедра
  
  Военная кафедра заслуживает отдельного рассказа от остального института. Вообще в начале 90-х повсеместно витал дух перемен к лучшему. И про армию были надежды, что скоро перейдут к добровольной контрактной армии, и выглядело все так, что они осуществятся (это потом уже все пошло прахом). И в отличие от советских времен, требования записываться на военную кафедру не было. Но кто ж его знает, так что я на всякий случай туда пошел, как и большинство ребят (кроме тех, кто уже отбыл армию).
  
  Традиционно почти весь политех кроме приборостроительного факультета на военной кафедре шел в танкисты, а приборостроительный - в ракетчики. А тут ракеты малой и средней дальности сократили по договору, и потребность в ракетчиках пропала. Позже ракеты заменили тропосферной связью. Но существовало и еще одно небольшое направление - боеприпасы. Не знаю, кто шел туда обычно, но во время моей учебы его укомплектовали нашей специальностью ЭВМ вместе с прикладной математикой (мы были в одном взводе) и робототехникой (они были в другом взводе).
  
  Преподаватели были сплошь подполковники, с редким вкраплением майоров. Это такая фишка советской и российской армии, что для роста в полковники надо окончить академию Генштаба, а без нее подполковник - вершина карьеры. Среди всех подполковников был только один, закончивший академию и метивший в полковники. Он был замначальником кафедры по боеприпасному направлению. И вроде у нас был один майор, довольно тупой по сравнению с подполковниками, может потому и не выслуживающийся дальше, а может просто еще не дождавшийся по времени.
  
  Кстати, разговоры про то, как ах были бедные военные в 1990-е годы - вранье. Они и деньгами неплохо получали, и пайки натурой. У них как день выдачи пайка, так таскали мешки с едой.
  
  Боеприпасники - по сути артиллеристы, поэтому помимо боеприпасов (снарядов-ракет-взрывателей к ним) изучали и всякие пушки и пусковые установки. Ну, и общее типа тактики. Очень серьезно Хранили Секреты - лекции писались в тетради с пронумерованными листами, прошитые насквозь ниткой, чтобы из них не дергали листки. Их в начале дня приносили из Секретной Части в Секретном Чемодане специально назначенные студенты ("секретчики"), а в конце дня уносили назад. Все Секретное, прям как в анекдоте:
  
  По черной-черной дороге ехала черная-черная машина. Черная-черная машина въехала в черный-черный лес и остановилась. Из черной-черной машины вышел черный-черный человек и открыл черный-черный багажник. Из черного-черного багажника черный-черный человек достал черного-черного кота. И черный-черный человек спросил черного-черного кота: Вася, писить хочешь?
  
  Так что я сейчас местами поделюсь с вами Секретными Сведениями. Ну, правда, секреты эти могут быть не очень свежие - как потом оказалось, какая-нибудь гаубица Д-30 была разработана в 1930-х годах и снята с вооружения в 1970-х.
  
  Взрыватели - на самом деле очень интересные штуковины. Нечто вроде конструкций Руба Голдберга (Rube Goldberg). Это когда-то был такой художник комиксов для газет, но комиксы у него были не про людей, а изображения сложных механизмов с многими взаимосвязанными частями, где действие распространяется по цепочке. Ну, все наверное видели такие конструкции. У взрывателей цель в том, чтобы не взорвались при обращении с ними, и особенно в стволе при выстреле, зато надежно взорвались при попадании в цель. Поэтому с одной стороны там идут предохранители, которые деактивируются при выстреле (иногда от резкого ускорения вперед, а иногда - от вращения начинает откручиваться гайка, как например у Града с его вращающимися реактивными снарядами), а с другой стороны - разные кнопочки, которые срабатывают от удара с разных сторон. У того же Града, например, снаряды падают плашмя, поэтому помимо кнопки на носу имеются кнопки по всем бокам взрывателя.
  
  Из оружия я вынес самый интересный момент, наверное, из автомата Калашникова. Особенность его конструкции - в том, что он естественным образом хочет стрелять в автоматическом режиме. Чтобы он стрелял одиночными, надо приложить усилия. Поэтому в нем есть деталь под названием "шептало" с крючочком, который в одиночном режиме цепляет за курок и не дает ему ударять. То есть в-принципе полуавтоматические Калашниковы должны очень легко модифицироваться в полностью автоматические, спиливанием этого крючочка. Мне интересно, как американская разрешительная система не против импорта? Ну, законопослушным владельцам - ладно, но преступникам-то ведь легко получить полный автомат. Говорят, что якобы в импортируемых Калашниковых другой механизм, но я сам не смотрел. Ну или с другой стороны, может таким же образом, спиливанием крючочка, можно при желании модифицировать любой полуавтомат.
  
  Вот еще про танки: как писал Суворов, в Советской армии танкисты не любили Т-64 за его гладкоствольную пушку. Но на самом-то деле у всех последующих танков пушки тоже гладкоствольные, и для этого есть хорошая причина. Чтоб ее объяснить, сначала надо посмотреть на снаряды. Снаряды делятся по способу стабилизации на вращающиеся и невращающиеся. Если взять снаряд или пулю как таковую и выстрелить носом вперед, то оказывается, что у него центр аэродинамического давления находится впереди центра тяжести, и потому снаряд попытается развернуться в полете в случайную сторону. Что нежелательно, не случайно в старые времена гладкоствольных ружей и пушек стреляли круглыми пулями и ядрами, у них такая проблема меньше. Кстати, пуля из малокалиберного автомата типа АК-74 менее стабильна, чем пуля 7.62 мм из АК-47 не из-за какого-то мифического "смещенного центра тяжести", а просто потому, что чтобы набрать достаточно веса в малом калибре, она длиннее по отношению к диаметру, и у нее центр аэродинамического давления оказывается дальше впереди от центра тяжести, и развоачивающая сила больше. Один способ избежать разворачивания снаряда - раскрутить его вокруг продольной оси, и тогда гироскопический эффект будет мешать ему поворачиваться. Другой способ - сместить центр аэродинамического давления назад, приделав к снаряду сзади хвост с крылышками, как у стрелы (которая тоже точно так же стабилизируется аэродинамически). Теперь смотрим на советскую военную теорию применения танков. По ней основным противником и целью танка являются другие танки. И соотвественно боекомплект танка на это заточен. Стандартный боекомплект Т-72 - как нас учили, что-то типа 29 снарядов. Ну да, немного, но больших снарядов для мощной пушки в танк много не влезает, да и опять же по советской теории ожидаемое среднее время жизни танка в атаке по-жуковски - 15 минут, за это время сильно много не настреляешь. Если вас проняло соучвствием к танкистам, то по той же теории ожидаемое время жизни пехотинца в атаке - 5 минут, и танкисты еще неплохо живут. Из 29 снарядов 5 противопехотных фугасных, а остальные - противотанковые. Противотанковые в боекомплекте поровну делятся на два вида: кумулятивные и подкалиберные, потому что снаряды старых типов (просто болванки и болванки со взрывчаткой в заду) плохо работают против современной брони. Кумулятивные снаряды работают таким способом, что при попадании прилипают к броне и выдают струю расплавленной меди, которая пробивает броню. У вращающегося снаряда плохо получается прилипать, поэтому кумулятивные снаряды невращающиеся, а с крылышками на заду (очень похожи на гранаты от гранатомета РПГ, только у танковых снарядов хвост спрятан в поддоне - типа как гильзе). Второй вид противотанковых снарядов - подкалиберные. Они по сути - та же болванка, но с твердым сердечником на носу (например, из обедненного урана). "Подкалиберный" значит, что этот снаряд тонкий как стрела, это уменьшает аэродинамическое сопротивление и уменьшает вес. Малый вес позволяет выстреливать эти снаряды с очень большой скоростью. Из-за большой скорости, ими легче попадать в движущиеся цели, требуется меньше упреждения. Так вот, подкалиберные снаряды тоже невращающиеся, с крылышками. В стволе они удерживаются за счет сабо - поддона, который затыкает дырку между снарядом и стволом, а после вылета из ствола отваливается. И вот если выходит, что весь основной боекомплект состоит из невращающихся снарядов, то зачем танку нарезная пушка, которая для этих снарядов создает одни только проблемы? Незачем, решили советские конструкторы, и оказались правы. Вслед за ними все перешли на гладкоствольные танковые пушки.
  
  И вот написал я эту историю, а через год началась русско-украинская война, и "секретные" сведения о размере танкового бомекомплекта вывалились в прессе. И оказалось, что у Т-72 боекомплект больше 29 снарядов. Ну, может я его перепутал с Т-80. Но и у Т-80 оказался боекомплект больше 29 снарядов. Похоже на то, что нам давали информацию по очень старым версиям танков. А то и вовсе заведомо неправильную.
  
  У военных не хуже бухгалтеров есть своеобразная терминология. Например, ракета от Града называется турбореактивным снарядом не потому, что на нем есть турбореактивный двигатель, а потому, что на ней есть реактивный двигатель, и она крутится подобно турбине: сопла ракетного двигателя расположены под углом вбок к оси ракеты и не только толкают ее вперед, но и раскручивают. Еще использовалось странное слово "оживальный", например "снаряд оживальной формы". Фиг его знает, что за форма, даже подполковник не мог объяснить, оживальная и все, так и запишите. Много лет спустя я встретил по-английски слово "ogival" и догадался, что вот она, оживальность, повстречалась опять! Стал интересоваться в интернетах, и нашел наконец-то, что это слово значит. Это французское слово (как и сабо) и переводится буквально как "заостренный". Но не как попало заостренный, а плавно. Не то что бы грубо заточенный на конус на конце как карандаш, а плавно переходящий из цилиндра в заострение, ну, примерно как "острый" конец у яйца, только совсем с острием на конце, или как какой-нибудь шлем витязей.
  
  Тактика тоже была довольно интересным предметом, все это рисование позиций на карте. Фиг его знает, конечно, насколько толковыми эти нарисованные позиции вышли бы в реальности.
  
  Но самое интересное - это как у военных развернуто понимание условностей. Вот например, последняя пара, половина взвода поотпрашивалась у ведущего пару нашего подполконика. Заходит подполковник, командующий всем боеприпасным направлением. Наш подполковник рапортует: "отсутствующих нет!". Подполковник-начальник с серьезным лицом принимает этот доклад, хоть и видно, что класс полупустой. Ну, в-общем, это как разница логического и физического в программировании: договорились, что отсутствующих нет - значит нет.
  
  Как в армии, со временем народ начал расползаться с занятий по программе на занятия, полезные офицерам. Я таким образом отполз в последнем, четвертом семестре. У подполковника-начальника жена работала в городской администрации, поэтому несколько человек отправили в помощь городской администрации по компьютерам, и мы ходили туда вместо военной кафедры. Уж не помню, что я там делал. Помню как починял какой-то принтер, и как я был при какой-то тетечке, которая рассказывала, что вот до того она занималась постановкой задач и рисовала формы, а потом по этм формам программист писал код на ди-Бейзе (dBase). Так что не знаю, может я и на ди-Бейзе что-то писал. Или может на Кларионе, Кларион - это была ди-Бейзоподобная база данных, но в которой можно было рисовать формы в специальном редакторе и добавлять к ним кусочки программ для собственно выборки или обновления данных, мы его как раз проходили в институте.
  
  На сборах я тоже отбыл, наверное, примерно половину из положенного времени - недели две из месяца. За это время успели выполнить что там на сборах обязательное к пометке галочкой, например отстреляться. Стреляли из АК-74, который мне понравился гораздо больше, чем АКМ, из которого стреляли в школе: отдача меньше. Но вышла незадачка: очки у меня были те же самые как в школе, а зрение видимо уже несколько поплохело. И мишени были не как в тире, а поднимались в поле. Так что я их вообще не увидел. Отстрелялся просто в общем направлении, всем пофиг. А вот из пистолета я мишень видел, там у меня получилось хорошо. А потом отправился назад в город на военную кафедру, рисовать плакаты про спутниковую связь, которая начиналась со следующего года. У них же на сборах в последние две недели началась какая-то нездоровая активность с беготней, очень удачно, что я ее пропустил. А то у меня там была проблема (ну, помимо того, что беготней я не увлекался): ихние сапоги не налезали на мои голени. Я тогда даже не то что бы прям сильно отъеденный был, я не знаю, на кого они эти свои сапоги расчитывают. Пришлось брать размер существенно больше, который по голени еле налезал, зато по стопе я его носил с двумя парами шерстяных носков и поверх них портянками, и все равно нога болталась (но ладно хоть благодаря шерстяным носкам не сильно терлась).
  
  Потом уже на пятом курсе был аттракцион: присылают повестку прийти в горвоенкомат. Я к тому времени уже был подкованный знанием от друзей и знакомых: главное - никуда не ходить и ничего не подписывать. Когда что-то подписал, это является основанием к уголовному делу. А на нет - и суда нет. У одного человека была вообще смешная (и пугающая) история: заходит он к себе в подъезд, видит что у его двери стоят военные. Его спрашивают: не видел ли он такого-то: говорит, не знаю, я вообще не здесь живу, пришел к знакомым, и проходит по лестнице выше. Но в родителях моих жила совковая убежденность: если по повестке вызывают, то да как это не ходить! Папа у меня даже позвонил какому-то знакомому, который в военкоматной системе работал, тот говорит, что нет, это типа так, документы сверить. Я в эту хрень не поверил, и вместо военкомата пошел в поликлинику жаловаться на сердце. Ну, у кого ума было больше, те находили, чтоб вколоть чего-то этакое, отчего получалась напрочь негодная кардиограмма. У меня такого не было, но я и так был, как говорится "на измене", и плюс к тому сознательно постарался вызвать у себя максимальную панику. Обнаружили они неправильные шумы, так что появился повод еще походить по врачам. Через месяц-другой я все-таки дошел до горвоенкомата - вот, говорю, у врачей был. Говорят, уже не нужен. А как потом оказалось, кто туда сходил вовремя, того сразу после института загребли служить. Один парень отбивался от представителя военного отдела даже на вручении диплома, отказывался брать повестку (уж не знаю, чем у него дело кончилось). В-общем, эти военкоматские даже по знакомству запросто соврут, что типа ничего такого особенного, а на самом деле выходит масса проблем (чему русско-украинская война опять показала много примеров).
  
  Как я учился вождению
  
  Как, наверное, и почти все мальчики, автомобилями я интересовался с детства. С детского сада мне больше нравились универсалы (их еще иногда называют фургоны), особенно Волга, универсал. Ну, неудивительно - Волга все-таки рисовалась по мотивам американского дизайна, а не итальянского как Жигули или немецкого как Москвичи (не говоря уже про Запорожцы, которые успели побывать подобиями обоих), так что была красивее. И звук мотора у нее был более низкий, более красивый. Жужжалки я до сих пор не люблю. Тогда еще вовсю встречались "старая" Волга (ГАЗ-21) и "новая" (ГАЗ-24), и по красоте старая меня впечатляла больше, но и новая тоже нравилась, особенно опять же универсал. Но это, конечно, были платонические хотения, ни Волга ни универсал, ни тем более комбинация их, не были в советские времена реалистичным хотением. А из грузовиков мне нравились КрАЗы, особенно почему-то в разновидности автокрана. Ну, действительно, КрАЗ-256 с его аллигаторным носом красив.
  
  Папа у меня в какое-то время подрабатывал ночным сторожем на базе грузовиков, так один или может быть даже два раза брал меня с собой - там я насмотрелся всяких грузовиков и налазился по ним!
  
  В расширенной семье у нас машина была у дедушки со стороны мамы, Москвич-407, цвета "морской волны", синевато-зеленая. На ней регулярно ездили в сад и купаться на озеро. У них гараж был по советским меркам близко к дому, всего две остановки на трамвае, так что он с утра брал машину, ехал на работу, а приехав назад (у врачей рабочий день короткий), мы грузились и ехали на озеро рядом с Челябинском - то Касарги, то Смолино. А зимой он на машине не ездил.
  
  У другого дедушки теоретически тоже была машина, но в неездящем разобранном состоянии, Москвич-401. В ней как максимум можно было посидеть в гараже. Папа ее что-то пытался чинить, но ездящей я ее ни разу не видел. Уже в 2000-х годах тётка ее продала как антиквариат, так и в неездящем состоянии.
  
  А у моих родителей машина появилась в 1981 году, летом. Не то что бы очередь подошла (а они, между прочим, к тому времени работали на ЧМК и стояли в очереди с раньше моего рождения - уже лет 10), но тогда партия и правительство в приступе заботы о советских гражданах подняли цену на Запорожцы до 5 тысяч рублей. Ну, не просто так, а по случаю выхода новой модели 968М, уже без ушей. До того они стоили 3 тысячи, Жигули-Москвичи - около 6-7 тысяч, так что 5 тысяч за такое безобразие выглядело много и многие очередники стали отказываться от подступившего шанса приобретения, и очередь дошла до нас (потом люди прочухали, что и Запорожцы назад дешевле не станут, и очередь и на них тоже выросла обратно). Помимо очереди, нужны еще были, конечно, деньги. Родители назанимали у всей родни, мамины родители еще и что-то подарили, и в итоге денег наскребли. Я поехал с папой покупать машину. Там был какой-то сарай, в котором толпилась приехавшая на получение машины куча народу, и при нем стоянка-склад автомобилей. Из всего автомобильного стада выделялся один, с другими бамперами - не просто хромированными, а с резиновой полоской сверху и пластиковыми законцовками. У меня на него запал глаз: "Давай возьмем вот этот!". И я уж не знаю, случайно так вышло, или папа действительно выбрал вот этот. Экземпляр оказался действительно непростой. Запорожцы тогда были с двигателями 28 или 40 лошадиных сил. 28 - это был мотор, происходящий еще от "горбатого" Запора, а 40 - это продвинутый 968-й. Визуально их различали заглядыванием под хвост, у 40-сильного была выхлопная труба слева, а 28-сильного справа. Или может быть наоборот, уже не помню. Но мужики в сарае этот вопрос активно обсуждали - как проверять, что досталось. А с красиывами бамперами был случайно туда затесавшийся экспортный вариант, аж об 45 лошадиных силах. У него объем двигателя был побольше, в-принципе почти как у Жигулей - 1.1 литра, но на менее октановом 76-м бензине. Кстати, согласно инструкции, существовал в природе еще и 50-сильный вариант.
  
  И тогда же в первый день у нас кончился на дороге бензин. Как выяснилось, датчик уровня топлива у него был глюкавый, если залить в бак много бензина, то датчик норовил залипнуть вверху, а с завода был и сразу залипший, еще и без бензина. Еще у него норовил открываться багажник (который спереди), но к счастью не совсем, а только до удерживающего крючка. Но общем и целом он ездил, и куда только мы на нем по окрестностям не ездили. Есть например, фотография, где весь багажник завален грибами. Практически каждый выходные ездили по окрестным деревням покупать еду - там она в отличие от города лучше встречалась без талонов. Ну и прочее интересное попадалось, вот в часности книжки. Как-то мы приобрели и в три приема довезли домой спальный гарнитур (с багажником на крыше и выниманием правого переднего сиденья), причем с какого-то приличного расстояния, чуть ли не с Аргаяша. Вообще с точки зрения перевозки грузов вынимаемое правое сиденье оказалось просто кладезь, в сочетании с более широкой дверью, чем у Жигулей, оно давало приличную грузовую площадку. Туда и мешки с картошкой помещались, и как-то даже телевизор там отвозили в ремонт. Зимой папа, в отличие от дедушки, тоже ездил. Процедура заводки там выглядела так, что первым делом он ставил под двигатель снизу электроплитку разогревать масло (особенно если оно было летнее, масло тогда еще было говнолюбским и различалось по вязкости на летнее и зимнее, и почему-то зимнее достать было труднее) и подключал зарядное устройство к аккумулятору. Зарядное устройство он сделал сам из где-то добытых деталей, купить его было нереально. Потом вручную подкачивал ручечкой на бензонасосе бензин, и начинал пытаться заводить.
  
  Еще специальной фичей Запора была убогая печка. Поскольку мотор там был с воздушным охлаждением, обогревать как обычно от мотора было невозможно. Вместо этого печка отдельно сжигала бензин. Она поджигалась свечой накаливания. Мало того, что печка была слабосильной и зимой в машине было холодно, так еще и в генераторе не хватало электричества на одновременную работу печки и фар, как только включались фары, печка гасла.
  
  В детстве мне папа пару раз давал порулить на мелких дорогах, но оно у меня вышло не сильно толково. Нет, без аварий, но его я наверное напугал. Фокус в том, что как переключать передачи он мне объяснил, а вот прнципы собственно езды - нет. Поэтому для меня оказалось сюрпризом то, что скорость, которая является небольшой для прямой, внезапно оказывается большой для поворотов. С учетом того, что папа у меня ездит на поворотах очень медленно, тут для меня такая центробежная сила оказалась совсем неожиданной.
  
  Потом у меня были автомобильные игры на компьютере. В 1989 году из хороших игр была Формула-1 и, Test Drive ("пробная поездка") - там надо было ехать по горной дороге, всех обгоняя, и давали особо много очков, если погнавшаяся за тобой полиция куда-то врезалась. Но физика игры там была очень приблизительная. Уже потом позже, году в 1993-м, первой игрой с хорошей физикой была Инди-кар, там все заносы действительно ощущались.
  
  Ну, а как исполнилось 18 лет, то я пошел официально учиться на права. Не сразу, правда, а следующим летом. Учился я на курсах при заводском автоклубе. Там проходили курс теории, а потом переходили к практике. И учили хорошо, машины были в хорошем состоянии, на практике отъезжали много часов, и на автодроме крутились, и по центру города ездили с плотным (ну, по тому времени) движением. Там инструктор замечательно сформулировал принцип безопасного вождения, до сих пор помню: фокус - в том, чтобы стараться предвидеть ситуацию как можно дальше в будущее, и реагировать на нее заранее. То есть, почти всегда заранее бывают небольшие признаки того, что ситуация может начать развиваться в нехорошую сторону. Если на них не реагировать, то делается чем дальше тем хуже, причем быстро. А если среагировать пораньше например сбросить скорость, или сдвинуться, то ситуация возвращается в безопасную, даже если потом продолжает развиваться в нехорошую сторону, то все равно оказывается легко избежать проблем. Это в-принципе и вообще в жизни хороший философский совет, только в жизни не всегда понятно, какие признаки нехорошего развития, и как реагировать.
  
  Еще для сдачи экзаменов требовалось продежурить сколько-то часов в ГАИ. Но тут автоклуб как раз устраивал мероприятие на площади, для которого требовалось оцепление, так что дежурство у меня прошло там. Мероприятием был автослалом. В-принципе, похоже на то, что в Америке называют "автокросс" - трасса, размеченная вешками на площадке, ездят по-очереди на время. Только вместо резиновых конусов как в Америке были вешки в виде железной проволоки с флажком наверху, и повороты у них были насколько тесные, что многие из них так просто поворотом было пройти невозможно, только в заносе (в типовых правилах автокросса делать такие трассы в явном виде запрещено). Они в конце запустили какого-то старейшего члена клуба, не на время, а так, для развлечения, и у него регулярно не получалось вписаться в повороты, приходилось сдавать назад. Вообще если вспомнить, каким дефицитом в СССР были шины, удивительно, что они их так изнашивали. Ну, может они их получали по какой-то особой разнарядке. Тогда СССР, конечно, с формальной стороны уже полгода как кончился, но жизнь еще не успела уж очень сильно поменяться. Хотя изменения к лучшему были явно видны буквально каждый месяц, появлялось что-нибудь хорошее, новое и интересное.
  
  Экзамен состоял из двух частей, автодрома с вождением в тесных пространствах, и вождение по улице. На автодроме элементами были "горка" - остановиться на крутой горке и опять тронуться, "дворик", в котором надо было развернуться в ровно три движения, и "гараж", куда надо было заехать задним ходом с поворотом. Может и сейчас такие же, не знаю. Правые зеркала на машинах тогда были почему-то не приняты, а без них маневрирование задним ходом гораздо сложнее, чем с ними. И вот внутренний экзамен курсов я сдал с блеском, а на экзамене в собственно ГАИ (Государственная Авто Инспекция, то что сейчас называют вроде бы ГИБДД) у меня вышел облом, пришлось потом пересдавать. Но в итоге сдал.
  
  Меня после этого стали запускать ездить на уже нашей машине под присмотром. После учебных Жигулей, конечно, Запор оказался брутальной машиной. Чтобы тронуться с места, на нем надо было давить газ в пол, он при этом производил громкие злопердячие звуки. Амортизаторы на них были какие-то очень убогие, так что он скакал на неровностях дороги как козел. Как я уже позже обнаружил, тормоза на них тоже были говно, все барабанные без усилителя, и наверное какие-то говенные колодки, так что тормозить до блокировки колес в нем было даже с небольшой скорости и при всем желании невозможно.
  
  Интересно, что при езде в сад выруливание по грязи, когда машина норовит пойти в занос и ее надо балансировать рулем, у меня вышло совершенно интуитивно. В книжках пишут, что типа если крутить руль в ту сторону куда кажется что надо, то занос будет еще хуже. Но это, видимо, при каком-то другом варианте интуиции. Моя интуиция сразу указывает в правильную сторону. Мне и сейчас на гонках гораздо легче чувствовать машину, которая пытается проявить чуть-чуть избыточную поворачиваемость.
  
  В 1992 году экономика России проходила смешанную фазу перехода от советской системы к рыночной. Очереди на автомобили на предприятиях еще существовали, но начали двигаться существенно быстрее. Причем иногда еще даже по старой, доинфляционной цене. Тётя у меня таким образом приобрела Москвич-2141 еще по старой цене, а вот родителям выделили Жигули, но уже по новой цене. На которую не было денег. Так что эту очередь продали какому-то цыгану - то есть, как бы купили машину и сразу перепродали на него. Но потом у папы пошла кооперативная коммерция.
  
  До того он участвовал в кооперативе где варили мыло. Тогда как раз в конце СССРа был большой дефицит мыла. А на заводе, где полно грязного производства, и рабочим надо мыться после смены, без мыла нельзя. Папа прочитал книжку и организовал производства мыла из технического пальмового масла, которое использовалось для смазки при прокатке, и едкого натра. Мылом этим мы дома тоже пользовались когда другого совсем не было, и оно честно говоря было хреновое - едкое и мылилось плохо, но лучше чем никакое. И хотя бы говном не воняло. С говном в позднесоветские времена было импортное индийское мыло "Махарани". Когда оно только появилось, я вымыл руки, чувствую - воняют говном. Откуда говно? В конце концов нашел, оказалось, что это у мыла такой врожденный запах. Уж не знаю, то ли это таковы индийские традиции, то ли СССР сумел добыть какую-то бракованную партию. В интернетах люди, бывавшие в Индии, рассказывают, что там говном воняет не только мыло, но и пиво, потому что там вода такая. Ну, может быть.
  
  Но с мыльного кооператива доход был негустой, и председатель кооператива там хитрожопил. Так что тут папа организовал свой кооператив. Он придумал технологию производства каких-то прокатных валков, которые до того покупали только импортные за валюту. И какой-то технологической краски, уже не помню, как она использовалась, но до того ее тоже покупали только импортную за валюту. И тут пошла некоторая коммерция. Расплачивался завод металлом, металл этот по бартеру обменивали в тогда еще может быть Свердловск (ныне Екатеринбург) на камвольный комбинат, оттуда получали ткани, которые уже и можно было продать за деньги. У меня, кстати, до сих пор (считай, 30 лет с тех пор) висит в шкафу сшитый в те времена костюм из той самой ткани, и я его даже изредка надеваю.
  
  В конце 1992 года папа сумел приобрести списанный грузовичок ГАЗ-52. Тогда вот только-только стало можно покупать грузовики в частное пользование. Он на самом деле был от рождения ГАЗ-51, когда-то проапгрейженный кабиной ГАЗ-52, то есть скажем в коробке передач там еще были синхронизаторы только на 3-й и 4-й передаче как у ГАЗ-51. Ездил он через пень-колоду и хреново заводился, но ездил. На нем мы ездили в Миньяр - туда по Уфимскому тракту, на какой-то завод, куда папа сумел тоже продать бартерный прокат, заодно туда же возили на продажу работникам ткани, а назад получали метизы - гвозди и тому подобное, которые потом сдавали на реализацию. Это было приличное расстояние на грузовике, который при большой удаче ехал 70 км/ч.
  
  В этом Миньяре, кстати, был интересный эпизод хитрожопления с их стороны. Папа с ними заранее договорились о бартере, что в каких количествах, и вот папа привез свой металл, а они говорят, что с их стороны выдадут только половинное количество гвоздей, потому что дескать у них поднялись отпускные цены (сделка хоть и была бартерной, но формально шел обмен по ценности в рублях). Ну не суки ли? Но папа быстро сориентировался: тогда, говорит, у меня тоже прям сейчас поднялись цены. Они поставились на место.
  
  Тогда же стало возможно купить место под строительство гаража без очереди. Это, опять же, то, за чего в советские времена ждали годами, стало доступно и недорого. Ну, плюс строить, но в советские времена точно так же сами строили, и купить кирпич стало тоже легче, чем в советские времена. Папа хапнул сразу четыре гаража, и на себя и на меня и в будущем на брата. От одного быстро избавились - план там был красивый, с большим размером и вторым этажом, и номинально типа как мини-ферма, но он был где-то уж очень далеко у конца трамвайной линии, огибающей завод, и уже лишний. А другие три (точнее физически два, один из них двойного размера по длине, а второй сразу размером побольше под грузовик) таки достроили.
  
  В начале 1993 года Запорожцы появились в свободной продаже. Поэтому мы купили новый Запор. На старом был не то что бы сильно большой пробег - 40 тысяч километров за 12 лет (по нынешним временам вообще смешной), но он уже активно ломался. Когда старый Запор продавали, у покупателя еще не было прав, так что я его довез до его дома, вслед за папой. По дороге от ГАИ, где регистрировали продажу, к дому покупателя, уже у самого дома продырявился глушитель, и Запор стал пердеть как бешеный. Но, к счастью, покупатель не сильно расстроился.
  
  Но еще до того у меня был первый опыт самостоятельной поездки. Новые гаражи тогда были еще не построены, платных стоянок тогда еще вроде не было, и один Запор стоял возле дома. Что вообще было чревато: могли спереть, или чего-нибудь открутить или отломать. У нас в институте был экзамен по чему-то схемотехническому, которое вели Винников и Ершов. То есть, это был конец весны 1993 года. И вот мы сдали работы, и нам сказали идите погуляйте, через часа два приходите за результатами. Ехать домой было без толку - это только еле-еле туда и обратно доехать если повезет. Но я рассудил, что если туда поехать на троллейбусе, а обратно на машине, то как раз можно и поесть дома и без суеты успеть. И вот я впервые сам поехал в институт. Был сильный дождь с глубокими лужами, но я доехал без приключений.
  
  Надо сказать, что новые Запоры делали гораздо хуже, чем раньше. Он и ржаветь начал очень быстро, буквально к следующей весне, и время от времени стартер отказывался работать. Как уже потом сильно позже выяснилось, они в стартер не вложили часть обмоток, так что когда он останавливался в неудачном положении, то потом не мог начать опять крутиться.
  
  В том же 1993 году, к концу, родителям выделили на заводе еще одну очередь на Жигули, и на этот раз денег было. То есть, вот когда я рассказываю, что в начале 1990-х жить стало гораздо лучше и веселее, чем в советские времена, это не так просто, вот это всё примеры вещей, которые по советским временам были немеряным богатством, за которым стояли в очереди десятилетиями и за коротые жестоко срались (вспомнить хоть фильм "Гараж"), а тут стали массово доступны и недороги. И это не то что бы где-то в банке - там у людей вообще все шло радостно, а просто на заводе, с масенькой побочной коммерцией. И в повседеневной жизни тоже улучшалось - то стало можно просто в киоске на остановке купить бананы, которые до того были большей редкостью при везении раз в год, и прочие Сникерсы и Амаретто, то на заводе распределяли американское масло (гораздо более вкусное, чем советское) килограммами и без талонов. И всякая пищевая коммерция раскручивалась: тогда же в районе построили замечательную мини-пекарню с немецкими технологиями - настолько вкусного хлеба я ни до ни после не ел (но они после кризиса 1998 года ссучились, перестали покупать немецкие разрыхлители, и хлеб стал обычным). Китайские куртки и пуховики, просто не сравнимые с советскими говнопальтами, электроника отовсюду - те же видики-телевизоры, и прочее. Ну, был и бартер, да, но в бартере как таковом ничего плохого. Мы так меняли яблоки из сада в деревнях на мясо - где-нибудь в начале зимы выменивали заднюю четверть свиньи. В деревнях почему-то яблок не было, и оно обходилось всего в несколько ведер яблок. Ну, то есть, понятно почему: это сейчас можно на Урале посадить хоть вингорад, а исторически яблоки на Урале не росли, это только в 1950-х годах стали появляться морозоустойчивые сорта фруктов. И городские садоводы (особенно если вспомнить, что в войну было большое переселнеие на Урал народа из теплых областей, которые были к фруктам привычны) их быстро прочухали, а в деревнях оно было не в традиции.
  
  В 1993 году я пошел учиться на права по-второму разу, уже на грузовик. Эти курсы были при местном ПТУ (или это техникум? фиг его знает, без разницы), где готовили водителей грузовиков.
  
  На грузовик требовалось еще прослушать курс лекций по устройству автомобиля, что в-принципе было интересно, там я несколько набрался познаний в этой области. Ну и инструкции к автомобилям раньше рассказывали про устройство. Даже для Жигулей было написано довольно много информации, а уж для грузовика книжка - там вообще было сплошное устройство и ремонт.
  
  А вот вождение было разительным контрастом с автоклубом. Машины были развалюхи, а инструкторы - распи.дяи. В качестве легковой машины был Москвич, который заводился отверткой - там под панелью уже все было выковыряно, и от замка зажигания остались одни контакты. Собственно зажигание было выведено на тумблер, а контакты стартера перемыкались отверткой. Грузовиков было несколько, разных видов, по ним распределяли согласно у кого какой. Курсы эти были в-основном для людей, которые купили себе грузовик, профессиональные-то водители шли учиться в ПТУ, такого чтоб потом самостоятельно выучиться в советские времена не существовало, да и в позднесоветские еще тоже не очень. Кооператорам в советские времена тоже не разрешали покупать грузовики. Это тогда только недавно разрешили, когда советская власть кончилась, и под этот спрос образовались курсы. Были ГАЗ-53, ЗиЛ-130, ЗиЛ-131. Мне достался Газон. Тут я лично оценил, насколько на нем сложно ездить. Тормоза у него были с гидроусилителем, как на Жигулях (у более крупных грузовиков они были с пневмоусилистелем), а вот рулевое управление - без (ну, тоже как на Жигулях). Поэтому руль на нем был очень медленный и очень тяжелый. Просто на месте его крутить (как делали при маневрировании на том же экзамене на автодроме на легковых машинах) было совсем невозможно, надо было начать потихоньку ехать (благо, ехать медленно он умел), и тогда руль делался нормальной легкости, и быстро-быстро крутить, потому что от упора до упора там было какое-то дикое количество оборотов. Примерно на половине моего обучения грузовик проапгрейдили до ГАЗ-3307. Усилителя на нем все еще не было, но зато руль передвинули: он стал более горизонтальным, как у троллейбуса, и большего диаметра, и более быстрым. Такой руль при отсутствии усилителя гораздо лучше, им рулить гораздо удобнее.
  
  Автодром выглядел так, что вот тебе площадка с вешками во дворе ПТУ- упражняйся, а инструктор пока пойдет выпьет водки с коллегами. По городу норовили то совсем не ездить, то ездить по каким-нибудь шабашкам - кому-нибудь мебель отвезти или в этом роде. Если б я до того не умел ездить, тут бы я точно не научился. Ну, совковое ПТУ, что с него взять.
  
  Пожалуй, главная сложность езды на грузовике - то, что спереди и с боков ничего не видно. Сидишь высоко, и что происходит рядом, ничего не видишь. Поэтому меня очень удивляет, когда люди, особенно женщины, жаждут джипы - они как полу-грузовик, и в них тоже спереди и с боков ничего не видно, даже в маленьких.
  
  Там тоже надо было отдежурить в ГАИ, и тут уже дежурство было по-простому - прийти в горГАИ, и провести день с нарядом гаишников. Гаишники звали идти к ним работать, и рассказывали, как им прилично платят. Цифры уже не помню, но платили и правда прилично, лучше, чем на заводе, ну и плюс опять же паёк продуктами.
  
  Экзамен был очень похожий на тот, что на легковой: теория, потом автодром на грузовике и по улице на легковой (у ПТУ для экзамена нашелся Москвич, который заводился не отверткой). Автодром для грузовика был очень похож на легковушку, только один элемент несколько отличался, но уже не помню какой, то ли гараж, то ли дворик. И горка была менее крутой. С горкой было полегче и в том плане, что у грузовика первая передача предназначена специально для троганья с места в горку с грузом, очень низкая, так что на ней трогаться легче. Главное было суметь в эту первую передачу попасть, поскольку она на Газоне несинхронизированная. Элементы автодрома в ГАИ были разных размеров для разного размера грузовиков. Ну, в-принципе, и для легковушек тоже - у них была отдельная более крупная площадка для Волги. Автодром я сдал успешно, а езду по городу - так и вообще. У меня уже был опыт, так что я как сел, так сразу пошел разгоняться до третьей скорости уже на рефлексе. Новые водители обычно боялись (или все еще боятся?) переключаться дальше второй. Гаишник оценил уверенность, сразу говорит: сдал, пусть следующий садится.
  
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список
Сайт - "Художники" .. || .. Доска об'явлений "Книги"