4796
Сдаю курсовую по программированию, причём, как всегда, в последний момент. Суть курсовой: написать на Турбопаскале программку, которая сортирует слова из текстового файла двумя методами: примитивным и продвинутым. С первым я справился с лёгкостью, а вот со вторым не повезло. Мне одному в группе достался столь непонятный метод, и реализовал я его не ахти. Если по-правде, косячил он сильно, так что шансов выйти на сессию вовремя у меня было мало.
Момент сдачи. Первый метод отрабатывает без проблем, приходит время запускать второй. Я начинаю мямлить, что, дескать, не полностью разобрался, и метод не совсем работает. Преподаватель отрезает: «Запускайте!»
Нажимаю Ctrl+F9. Во всём здании института гаснет свет, компьютер издаёт затухающий звук останавливающегося винчестера, а преподаватель ставит «отлично» со словами: «Ну вы и написали программу!»
4783
Сегодня участвовал в олимпиаде по программированию. На входе встретили, проводили.
— Какой язык?
— С++.
— А у нас такого нет.
Предложили Бейсик и Паскаль — но они же инвалиды, в современном-то понимании...
Три часа я писал код в Блокноте. Застрелиться: компиляция в уме, старательно вспоминаем параметры функций, море фигурных скобок... Оп-ля: кусок кода, который должен работать. Подходили поинтересоваться многие:
— Так это ж С! А компилятора нету!
Ой, правда? А я в Блокноте собрался компилировать, ага. С трепетом жду результатов...
4770
...жара разъела мозг и делать ничего не хочется...
Задача: набрать и распечатать более девяти тысяч (на самом деле, около сорока) грамот с одинаковым текстом, но разными Ф.И.О. Сидеть и копипастить как-то лениво. Ни Visual Basic, ни Access никто не знает.
Создается одна грамота в .docx, файл переименовывается в .zip и распаковывается в папку, папка заливается на сервак с линуксом.
Далее перловый скрипт подставляет фамилии из текстового файла в определённые места в .xml, на выходе готовый .xml со всеми фамилиями подсовывается вместо .xml в папку с начинкой распотрошенного .docx, пакуется зипом!, переименовывается в .docx!, печатается!
В следующий раз планируем брать фамилии из базы данных (как-то сразу не додумались, они ж там все есть). Может быть, даже замахнемся на разработку веб-два-ноль-приложения с аяксом и RSS для генерации файлика из шаблона и списка фамилий.
...жара разъела мозг и делать ничего не хочется...
4757
Общение txt-файлами в Дропбоксе? Берите выше! Недавно всей академической группой мы открыли для себя этот чудесный сервис и сразу же создали общую папку для одногруппников — ну, лабы, курсовые, электронные варианты конспектов. Тут же (это, наверное, у всех пользователей Дропбокса случается) появился текстовый файл с чатиком, но душа будущего системного инженера требовала пива и оптимизации.
Открываем Дельфи, создаём на форме два текстовых поля на никнейм и текст сообщения, объект TMemo, который по таймеру с периодом в секунду обновляем из этого же текстового файла, и кнопочку «Отправить», которая пишет в конец файла новое сообщение с ником автора. Двадцать минут — и готов вполне себе рабочий чатик. Сбои случаются, лишь когда два человека одновременно отправляют сообщение, — но это уже проблемы не программы, а процедуры сохранения на сервер Дропбокса. Уведомления о новых сообщениях? А об этом сам Дропбокс заботится, ведь при пересохранении файла любым юзером у всех остальных всплывает сообщение. Теперь вроде бы удобнее; надо только следить за размером файла истории. Душа успокоилась. Изобретать свой велосипед с го и гейшами — это же так приятно!
4747
1989 год, четыре ленинградских «Спектрума» (железные корпуса, герконовые клавиши), четыре советских цветных телевизора, магнитофон «Весна». Практически всегда — аншлаг. В разгар рубилова я зевнул, и кто–то из трудных сп#$%ил единственную кассету с играми. Оставив хозяйство на доверенных, я отправился в забег по конкурентам. Конкуренты кривились и морщились, но отслюнявили пару кассет чего поплоше методом тупой перезаписи: программы–копировщика не было ни у кого.
Вернулся к себе и вижу: все компьютеры заняты. Мой напарник и компаньон научил хулиганов основам Бейсика, и молодёжь вовсю рисовала круги и квадраты, будучи очень собою довольна. Очередь волновалась, но зря: машинное время было оплачено.
Из двадцати, что ли, программ прочиталась в итоге только одна. Неделю или две, пока какая–то добрая душа не нашла мне копировщик, все играли в Pyjamarama, а особо продвинутые так и рисовали круги за свои денежки. Я тогда понял, что разнообразие, по большому счёту, нужно немногим; главное — возможность щёлкать герконами внутри железной коробочки.
4715
В прошлом подрабатывал немного, создавая небольшие скрипты под заказ на PHP. В обязанность входила и поддержка скриптов после установки. Бывало всякое, но один случай запомнился особо.
Приходит сообщение от клиента, которому перед этим я написал баннерную сеть: «А-а-а! Ничего не работает! Спасай сеть!» Любые объяснения о том, что я не имею никакой возможности и доступа ни к компу, ни к скрипту, не помогают. С огромным трудом нахожу комп у соседа по общаге, договариваюсь за литр пива, настроение никакое.
Ошибка более чем странная: сайт работает, но не происходит вывод картинки. Начал проверять. Час упорного дебаггинга — картинки так и не работают, ошибка так и не проявляется. Бегаю курсором по коду. Приходит озарение. Оказалось, в самом конце главного файла, который подключал всю систему, невнимательный заказчик поставил после ?> всего лишь один незаметный пробел. Именно это и нарушало работу всего скрипта и его главной функции — вывода картинки. После таких ошибок и начинаешь понимать, что следить надо даже за тем, что мы не видим.
4680
Как-то раз понадобилось мне на пару с одним нашим контрактором (хорошим другом фирмы и меня лично) поработать над проектом у клиента в большом американском городе. Контрактор — латиноамериканец (предположим, из Перу), женат на русской, свободно владеет пятью языками. Между собой мы общаемся по-английски — так удобнее. Говорим свободно, но с акцентом, естественно. Руководитель проекта у клиента из России. Приезжаем, начинаем разговаривать о том, что и как надо сделать; в процессе выясняется, что работы много, и проект сложнее, чем изначально предполагалось. Перуанец мой говорит, что если делать всё по правилам, то понадобится ...дцать месяцев на написание, отладку и всё прочее.
— Ну сделайте быстрее, что вам стоит? — говорит клиент.
— Быстрее никак не получится, — сетует контрактор. — Надо обратить особое внимание на то-то и то-то.
— Да ладно, эти штуки можно сделать по-быстрому, без отладки, пропустить такие-то и такие-то этапы. (Внезапно переходит на русский.) Ребята, вы же можете, что вы, не русские, что ли?
— (спокойно) Нет, я не русский, я перуанец. Поэтому будем делать по правилам.
4671
Знаете ли вы, что такое компилятор с травмой мозга? О, вы не знаете, что это такое, если не использовали C-компилятор для микроконтроллеров Microchip от некоей якобы высокотехнологичной фирмы.
Суть алгоритма, поставившего компилятор на колени, состояла в передаче подряд двух байтов данных. После отправки очередного байта необходимо было подождать, пока не установится флаг завершения передачи, и затем сбросить его. К концу дня аппаратный отладчик бессильно мигал огоньками, симулятор в иступлении прыгал от одной строчки к другой, программатор дымился от перепрошивок, осциллограф из последних сил цеплялся щупом за плату, а наш славный компилятор упорно продолжал генерировать код, который отправлял первый байт и перед отправкой второго наглухо подвешивал микроконтроллер.
Пришлось звать на помощь царя Ассемблера. После изучения листинга дизассемблера у некоторых по спине побежали мурашки от осознания того, насколько ужасающе чудовищна была та извращённая логика, которой следовал компилятор при оптимизации кода. Увидев, как программа, только что записав во флаг нолик, ждёт появления там единички, компилятор приходил в ярость, так как искренне считал, что такое невозможно в принципе. «Ну что за идиоты написали этот код?» — думал он про себя, после чего выкидывал из кода проверку флага и вставлял вместо неё бесконечный цикл.
4640
Принял заказ на небольшую программу. Что особенно приятно, я в студенческие годы такую писал — точно помню. Ну, думаю, интерфейс прикручу «професиональный», пару свистелок — и денежку получу.
Откопал в архивах исходники, немного украсил интерфейс, начал смотреть, куда бы свистелки прикрутить. Одним из основных модулей программы являлся враппер для класcов .NET-фреймворка IO.BinaryReader и IO.BinaryWriter, который превращал двоичный файл во внутренние данные програмы и наоборот. Называлось это чудо техники clsResEx, а прокоментировано было следующим образом:
' clsResEx (RESource EXtender), расширитель ресурных файлов
Следующая строка, видимо, была добавлена где-то в середине процесса написания кода:
' возможно, правильнее: clsReSex — перетрахиватель ресурсных файлов
И верно: переписать clsReSex оказалось гораздо проще, чем разбираться в нём, не говоря уже о том, что новый вариант работал почти вдвое быстрее и весил в три раза меньше вместе с свистелками (анимированными прогресс-барами).
4617
Прислали от одной госконторы-монополиста программку для учёта и создания всероссийской базы кое-каких данных. Программа даже не сетапится, а просто запускается экзешником. Собственно, делает простое: из заполненных табличек формирует XML-файл. Сама программа весит полметра. Но, блин, чтобы её запустить, надо установить .NET-фреймворк 3.5, который весит 240 метров и загружает проц чуть ли не на 100%. И как после такого назвать человека, что писал этот код? Индусы нервно курят в сторонке и завидуют.