Как мы программировали в 90-е. Часть #03
Предыдущие главы:
Как мы программировали в 80-е .
Как мы программировали в 90-е. Часть #01
Как мы программировали в 90-е. Часть #02
Итак, у меня появился мануал по Клипперу – увесистый том, настоящая библия, внушавшая и шок – методом своего изготовления, и трепет – объёмом полезных, бесценных знаний и ответственностью за утрату.
Первая же задача – загрузка (импорт) текстового файла в базу – сам по себе был интересной задачей.
Файл с котировками приходил с биржи по итогам еженедельных торгов, внутри была текстовая таблица с повторяющимися каждые 50 строк заголовками – в этом угадывался след и дух большого ВЦ с большой машиной, большим принтером и перфорированной по обеим сторонам бумаги согласно ГОСТу.
Таблица состояла из столбцов в следующем порядке (это важнецки важно!):
| № | Наименование товара | Артикул | Цена единицы| Количество | Расположение |
Были ещё какие-то поля – общим числом около 10-12. Каждый столбец таблицы нужно записать в соответствующий столбец таблицы – и с этим я справился довольно быстро.
Следующая задача – поиск и выборки по БД принёсла множество открытий.
К примеру – насколько я был самонадеян в тех сроках, о которых мы договорились с Денди. А ещё открытия были самые чудесные:
- города Николаев и Новосибирск при сортировке оказывались выше Алапаевска и Барнаула;
- поиск упускал все слова, в которых была прописная кириллическая «р». Какие-нибудь шины он находил, а, скажем, перфоратор – игнорировал, хотя в файле котировок он был.
При выводе выборки на экран «р» так же отсутствовала. Если у Остапа Ибрагимовича машинка печатала с турецким акцентом, то у меня появлялись целые новые лингвистические сущности - «тубы» вместо «труб», «ейки» вместо реек и прочие «каны», «убильники», «писсуаы» и даже «отоы».
Пояснение. В машинке, купленной героем книги «Золотой телёнок» Шурой Балагановым отсутствовала буква «е», поэтому Остап Бендер был вынужден заменять её на «э»:
— Вот послал бог дурака уполномоченного по копытам! — сердился Остап. — Ничего поручить нельзя. Купил машинку с турецким акцентом. Значит, я начальник отдэлэния? Свинья вы, Шура, после этого!
Это была загадка, об которую мы сломали всю нашу коллективную логику. Тут, на удачу у одного из наших программистов случилась короткая командировка в Москву. Он-то и привёз ценные знания.
Пояснение. Времена были доинтернетные. Уже появились на досках BBS и форумы в FIDO – мы же были от них отрезаны секретностью, был строгий запрет на модемы. Лавки с литературой на тему компьютеров и ПО только появлялись, книги в них были в категории «Как включить компьютер в розетку для чайников». Поэтому главный канал информации – это командировки в центры вычислительной жизни – Москву, Новосибирский Академгородок и т.д.
В первую же свободную минуту вокруг вернувшихся из командировок всегда собирался круг особоприближённых — услышать новости из первых рук первыми:
— Поговорил я там с знающими людьми за чашкой чая... — примерно так начинался «доклад» просветлённого возвращенца.
В этот раз знающие люди передали весть персонально мне:
— Заглавная кириллическая «Н» в первых версиях файлов формата СУБД dBase была служебным символом – знаком окончания строки в мемо-полях. Ушлые люди хитрят и меняют её на латинскую «Н» – на заглавную эйч. В таблице кодов ASCII латиница выше региональных (относительно США) алфавитов, поэтому в кириллических базах Николаев оказывался выше Артамонова.
А прописная кириллическая «р» была служебным символом в теле языка Си. Поэтому большинство программ, написанных на Си эту букву «не видели». Norton Commander, например.
Клиппер, как дальний родственник СУБД dBase, написанный на Си, хромал на обе буквы.
Коллективный кириллический разум уже придумал костыли и даже их с разным успехом их использовал – именно с разным.
Дальше – больше. Самые важные поисковые функции с региональными алфавитами либо работали ограниченно, либо отказывались работать совсем. Опции поиска «все заглавные», «все прописные» и «игнорировать регистр букв» – работали только в латинице.
Поэтому приходилось писать аналоги этих функций на языке Клиппера, и это страшно замедляло всё — и разработку программы, и её работу с базами. Там, где операция легко выполнялась штатной функцией за доли секунд, рукописная занимала иногда десятки строк и поиск на тестовой базе в 1000 записей происходил в течении нескольких минут.
Аванс, полученный от Денди, я уже значительно подъел, ещё больше её подъела, сгрызла, гопнически отожрала инфляция. Спасали небольшие леваки, в том числе – и по написанию небольших баз данных. Котировочная же программа заполнила все мои мысли – и на тему её написания, и на тему – какими могут быть последствия, если я нарушу условия договора.
Я созвонился с Денди о встрече.
— Вот эта часть уже работает, — показал я на офисном компьютере работу импорта.
— Прекрасно! — удовлетворённо откинулся в кресле Денди. — А поиск?
— Тут такое дело... — и я честно изложил весь список случившихся откровений.
Мы договорились о продлении договора ещё на месяц, я выдохнул – Денди принял ситуацию спокойно. К тому времени я уже знали истории, когда малиновые заказчики оперировали в подобных ситуациях другими аргументами, некоторые мои коллеги изрядно настрадались.
— Будь проклят тот день, когда я сел за баранку этого пылесоса! — всё чаще звучало в голове.
И тут из очередной командировки кто-то привёз дистрибутив FoxPro! Это был совершеннейший прорыв – это и среда программирования, и возможность строить архитектуру баз данных и работать с ними из командной строки – с моментальным отображением результатов в окне отладчика! Самое главное – Фокс понимал кириллическую «р»! Решение о миграции с Клиппера на Фокс было моментальным и неоспоримым, работа над программой значительно ускорилась.
Пояснение. За давностью лет какие-то подробности уже прочно забыты. Припоминаю – был какой-то хак от наших умельцев – программа, которая меняла какие-то значения внутри Фокса – и он начинал нормально работать с «р» или даже и с Эйч тоже. Ещё была резидентная программа, которая подменивала их «на лету». Потом, вроде, это решилось на версии 1.2, когда компания Fox Software обзавелась дистрибуторами в России? Если вы знаете этот нюанс лучше – прошу поправить, а готов проапдейтить свою историю, самому стало любопытно!
В тот период случился ещё один забавный момент.
У меня было ощущение – алгоритм поиска и выборки можно значительно упростить и сделать быстрее. Я уже сделал две БД – одна была заполнена кириллическими записями, вторая – латиницей, так я имел возможность сравнивать время работы поисковых операций. Из-за всех вышеописанных подлостей от отцов-разработчиков и моих трюков по их преодолению кириллический поиск занимал минуты там, где «родной» пролетал в секундах, в долях секунд. Я перепробовал несколько методов – поиск немного ускорился, порядки отставания во времени остались. И чем дальше – тем больше я концентрировался на этой задаче.
И однажды решение мне - приснилось! Такое уже было у меня на третьем курсе – во сне я увидел свою ошибку, которую я повторял в своём курсовике, выложу эту историю позже, она великолепная!
В этот раз мне приснилась стандартная функция Фокса, только её использование было необычным - «с приподвывертом». Утром я в нетерпении ворвался в кабинет, заменил огромный блок текста программы на эту функцию и две дополнительные текстовые переменные. И произошло прекрасное – таймер поиска по кириллической базе показал почти равное время с эталонным значением по нативной базе!
Я позвал коллег – это был один из великолепнейших моментов в жизни!
Сам тот период вспоминается как время огромных прорывов и открытий – новый софт, новые знания, каждый день, каждую минуту.
Однажды мы с приятелем-коллегой, изрядно задержавшись у компов, каждый за своими задачами, шли от КБ к заводской проходной. У меня заработали нужные связи между базами, он запустил процесс, над которым работал несколько месяцев.
— Знаешь, — сказал он мне тогда, я до сих пор помню эту фразу, сказанную на каком-то очень возвышенном выдохе, — по-моему, это, примерно так же, как в первый раз залезать в трусики девушке...
Где-то так, да...
Аванс закончился, писал я программу уже на сухарях – тем понятнее моё нетерпение, с которым я доделывал завершающие пункты в ней – и ехал в офис Денди!
— Вот, как раз свежие котировки прислали, посмотрим! — мы сели за компьютер, я установил программу, запустил импорт нового файла...
...И тут...
...многократно проверенный импорт – слетел!!!
СЛЕТЕЛ!!!
Преодолевая шум в голове, пытаюсь понять – почему? Наверное, изменился формат файла? Лезу в него – а там!!! Всё по-другому, всё! Другая структура заголовка и, самое главное, другой порядок столбцов! Мало того – цена записана с десятичными пробелами (у меня - без!), вместо точки – запятая и так – во всём!
В изумлении поворачиваюсь к Денди:
- Это же совсем другая таблица?
- Да они все, примерно, одинаковые – товар, количество, цена...
- Все? Примерно?
Оказалось, Денди получает котировки не с одной биржи, а с разных. У каждой – свой формат таблиц. В некоторых (опять ощущается дух большого ВЦ!) все наименования написаны КАПСЛОКОМ, в некоторых – и вовсе CYRLAT – это когда кириллический текст написан латиницей! У кого-то артикул был после количества, у других он шёл до наименования товара, у третьих он отсутствовал. И так далее!!!
У меня просто потемнело в глазах. Я делал импорт под один формат – а их тут уже с десяток, а брокеры, как оказалось, постоянно заключают договоры с новыми биржами! И везде – везде! – программисты писали базы в своих форматах!
Продолжение следует.
P.S. Каждый раз сажусь за продолжение этой истории с желанием решительно её закончить в новой главе. И каждый раз - вылезают новые действующие лица, ситуации и подробности, с ними связанные. Их уже сейчас повылазило на могучее повествование о том времени.
Поэтому уже сложно прогнозировать - когда и чем закончится этот цикл. Обнаружил - многие технические подробности, которые тогда были частью моего мира, утратили детали, размылись в очертаниях. Поэтому буду признателен за дополнения и поправки.





