Истории с тегом: программизмы

Всего историй: 896

8763

Идите индийским путём

В 1994-м подарили мне старенький «Агат». Подключил я его к телевизору «Рубин» и давай учиться программировать. Впрочем, программированием это было назвать нельзя — так, баловство. Команда GOTO встречалась чаще остальных, вместе взятых. Только потом я узнал, что это называется «спагетти».

Затем «Агат» был задвинут во встроенный шкаф. А недавно решил я ностальгию потешить — достать, пропылесосить и включить. Сказано — сделано. Заработало с полпинка. Теперь на видном месте стоит, включаю иногда.

Пока пылесосил, обратил внимание, что у компьютера в Индии сделан процессор, а у телевизора — кинескоп. А на полочке встроенного шкафа лежала пачка индийского чая, который я так любил пить за «Агатом».

И откуда столько GOTO?

8754

Петух свинье товарищ

Мне очень сильно надоело, что проектированием новых фич в системах занимаются люди, которые даже не потрудились как-то разобраться в уже имеющихся возможностях и в том, что вообще это за система.

Вот пример. Разводим мы кур. Приходит такой грамотей:

— А давайте теперь будем ещё и кроликов разводить в той же клетке!

— Кролики хорошо рыть умеют, они из этого курятника выроют себе выход на волю. Здесь клетки нужны.

— Клетки?.. — грамотей призадумывается. Не-е, сейчас у нас на клетки нет времени, не будем кроликов селить пока.

Через некоторое время он возвращается и, воодушевлённый прочитанной в интернете статьёй, говорит:

— Свиньи — новая фишка! Они не особо роют, не вылезут из курятника. Всё, завтра заселяйте свиней!

— Погоди-ка. Свиньи нечистоплотные, им пространство нужно побольше курятника, да и плотоядные они, всех кур слопают!

— Давайте оградку поставим, чтобы они друг с другом не контактировали.

— Оградка ещё больше уменьшит жизненное пространство кур и свиней. А куры тоже иногда помахать крыльями любят и перемахнут эту оградку с лёгкостью.

Опять грамотей уходит думать.

— А давайте коров! Они травоядные.

— Ну что ж ты, уважаемый? Мы же тебе только что объясняли, что нужно больше места. Да и доить корову нужно, и пастись выводить.

Опять уходит. Возвращаясь, предлагает завести оленя. И доить не нужно, и вроде пасти тоже не нужно… Мы уже крутим пальцем у виска. Тут грамотей расстраивается, обижается — все его идеи режутся на корню! — и уходит жаловаться начальству.

Ещё эти грамотеи часто любят, казалось бы, простые задачи описывать целыми поэмами: «Покрасьте забор курятника зелёной краской. Не белой, не чёрной, не красной, не фиолетовой, а именно зелёной. #00FF00 — вот такой! Землю вокруг курятника и в нём не нужно красить. Сарай и гараж тоже не нужно. Это мы через месяц будем менять и всё перекрасим. А курятник — в зелёный».

А сложные — двумя словами: «Отремонтируйте курятник». А что в нём ремонтировать? Дверь скрипит, лампочка сгорела или недостаточно ярко светит? Может, окружить колючей проволокой?

Вот так и работаем.

8746

My name is the law

Специальность «Программная инженерия», 1-й курс. Пример кода из методички про константы :

Const

PI = 3.14; { Real constant }

KOEF_1 = 9; { Integer constant }

KOEF_2 = KOEF_1*PI − 1; { Real constant }

MY_OPINION = True; { Boolean constant }

Компьютерщики всё-таки захватят мир. Когда-нибудь…

8712

Когда все принцессы спасены

Одни так мечтают вместо обучения программированию баловаться играми, что для них приходится программы типа SuperPuperAntiGame писать. А у меня в детстве, когда мне «Денди» подарили, наоборот, через две недели возникло острое желание попрограммировать. Моя фантазия рисовала клавиатуру, подключающуюся вместо джойстика, и картридж с Бейсиком. О том, что для оригинальной NES всё это уже было реализовано, я не знал, а «Сюбора» тогда ещё даже в проекте не было.

Проблема решилась годом позже, с покупкой «Спектрума». Ох я и напрограммировался тогда — год почти не играл!

8702

Послушай клиента и сделай наоборот

Приходит к сапожнику клиент.

— Сделайте мне перчатки.

— Но я ведь сапожник!

— Ну правильно, я их на ноги надевать буду, но чтобы перчатки!

— Хорошо, сделаю.

Проходит день. Сапожник делает сапоги и ставит на полочку. Проходит ещё два дня.

— Знаете, я тут прикинул, у меня ведь пальцы на ногах короче, чем на руках. Мне нужны перчатки для ног, но чтобы пальцы короче. И нужно, чтобы они надевались через голову, так ведь куда удобнее!

— Хорошо, сделаю.

Сапожник отдыхает. Проходит пять дней.

— Сегодня я надевал шапку на ноги, и знаете, мне было гораздо теплее. Теперь я думаю, что если пальцы совместить в один рукав, то будет лучше, правда? Давайте вы так сделаете.

— Хорошо, сделаю.

Сапожник отдыхает. Проходит ещё полтора месяца, за которые заказчик убеждает сапожника сделать перчатки из кожи, с функцией надевания только через ноги, а также дополнить их дополнительной защитой в виде шнурков.

— Заказ готов?

— Да, конечно.

Сапожник снимает с полки сапоги и клеит на них бирку: «Перчатки для ног».

— О, самое то! То, о чём я мечтал!

— Всегда пожалуйста — я же профессионал.

8693

SuperPuperAntiGame, или Гонка вооружений

В 1990 году поступил я в МВТУ им. Баумана и попутно устроился работать оператором в местный вычислительный центр под названием «Аквариум». Только-только появились первые персоналки, и к нам как раз завезли суперсовременные компьютеры IBM PC XT. Как водится, студенты сразу же вместо занятий стали на них играть.

Начальство поставило задачу игры запретить. Сначала пытались бороться словесно — не помогало. Тогда я решил бороться программно и взялся за изучение ассемблера. Через пару месяцев появился первый продукт под названием AntiGame. Программа резидентно висела в памяти, перехватывала запуск программ через функцию 4Bh 21 прерывания и имела базу сигнатур различных игр — просто читался кусок данных размером 32 байта из файла со смещением 1000h. Если запускаемая программа совпадала с одной из сигнатур, то считалась игрой. Запуск обрывался, в буфер клавиатуры посылалось echo y|del., проигрывалась веселая мелодия. Через месяц мелодию знали все.

Пару месяцев всё шло хорошо, база сигнатур пополнялась, студенты ходили злые и вынуждены были заниматься делом. Но тут группа студентов тоже села за ассемблер и через месяц хакнула мою программку. Хак быстро распространился среди посетителей «Аквариума», студенты снова стали довольные, играли повсеместно, а мелодии было не слышно. Отловив и изучив хак, я выяснил, что там тупо восстанавливался оригинальный вектор 21 прерывания, и моя программка обламывалась.

Покумекав, я взялся за клавиатуру. Спустя пару месяцев родился шедевр под названием SuperAntiGame. Это была шедевральная программа, написанная с использованием всех современных технологий, включая вирусные. Частично она даже использовала неизвестный тогда механизм «стелс», чем я до сих пор горжусь. Программа перехватывала 13 и 21 прерывания, причём не обычным способом, а путём внедрения в точки входа в области DOS, что делало бесполезным восстановление оригинальных векторов прерывания. В функциях поиска, открытия и записи файлов делалась проверка на имя файла antigame.exe и в случае совпадения возвращалась ошибка «File not found», так что ни один из «коммандеров» программу не видел. Также перехватывалось прерывание таймера 1Ch — на нём висела функция, постоянно проверяющая код в памяти. Если хотя бы один бит был изменён, то отключалась клавиатура, запускалась мелодия, флаг read only со всех файлов в текущем каталоге снимался, а в буфер клавиатуры отправлялось так любимое студентами echo y|del.. Помимо этого, там было ещё множество новаторских решений. Полный исходник занимал около 300 КБ текста, откомпилированный файл — 9 КБ.

Около года лучшие студенческие умы безуспешно бились за право играть в игрушки и пытались взломать мою программу. Почти год я ходил королём, пока в один прекрасный день не увидел нагло ухмыляющегося студента, демонстративно играющего в тетрис и смотрящего на меня с ехидцей. Моя программа была повержена.

Я, конечно, не питал иллюзий и знал, что рано или поздно это случится. К тому времени подходила к концу разработка бета-версии нового SuperPuperAntiGame, работающего в защищённом режиме только вышедшего тогда процессора 386SX, первые компьютеры с которым появились в нашем «Аквариуме».

Жаль, не удалось тогда довести задуманное до конца — увлёкся другим делом и AntiGame забросил. Но и сейчас, спустя два десятилетия, я вспоминаю эту гонку вооружений и думаю, какой же стимул для изучения программирования дала и сколько же талантливых программистов вырастила жажда игр.

8690

С миру по нитке, с программера по байту

Получила как-то раз одна госконтора федерального подчинения крупный программный продукт. Написан он был под заказ столичными спецами, и заплачено им было весьма и весьма много. По факту оказалось, что программа сырая и много жрущая — потребляла ресурсы нескольких серверов, а чуть позже оказалось, что некоторые заявленные функции просто не работают, а некоторые хоть и работают, но очень криво. Разработчики выслушали все замечания и претензии и пообещали через год выпустить апдейт.

После того как региональные пользователи запросили совершенно новую функциональность в рамках того, что делала московская программа, было принято писать новую программу своими силами. За пару месяцев айтишники госконторы поговорили со всеми пользователями, на основе их рассказов спроектировали базу данных и выдвинули требования к будущей программе.

Начали писать. За полгода сделали. Кое-что работало кое-как, кое-что важное работало отлично, кое-что так и осталось в стадии идей и разработки. Но программу приняли в промышленную эксплуатацию, провели по всем документам и похвастались перед департаментом в Москве о том, что и в провинции сидят классные разработчики. Получили премии.

Прошло ещё полгода. Москвичи выпустили обещанный апдейт, который закрыл ряд багов и добавил функций, но так и не перекрыл очень специфические возможности местной программки. Радостный ведущий разработчик выпустил ещё пару обновлений и свалил в коммерческую фирму заниматься цисками.

Прошел ещё год. Московские разработчики выпустили ещё одно обновление и официально сказали: то направление развития функциональности, о котором им писали из провинции, некритично, и думать надо по-другому. Согласовали своё мнение в главном департаменте госконторы и получили ещё денег по госконтракту. В региональном филиале пользователи возмутились и заявили, что неправильно отказываться от хороших возможностей автоматизации, и вообще, москвичи неправы. Потом оформили все новые идеи в письмо о необходимости разработки и отправили начальству.

Начальство подумало, вспомнило о премиях за новые идеи, согласилось и приказало программу доработать. Вот только старая версия была на C# и MSSQL, а разработчик, которого наняли взамен старого, знал PHP и чуть-чуть SQL. Благо все идеи о доработке сводились к созданию пары запросов. Однако срок доработки по приказу был месячный, потому разработчик перекрестился и сделал новую программу на PHP. Да, она выводила только результаты этих двух запросов. Да, оформление было просто никакое, но программа работала — и работала очень быстро. А ещё она использовала старую базу и была веб-ориентированной. Потом разработчик предложил перевести всё на веб, потому что так модно, и через полгода ушёл работать в крупному региональную контору.

Когда вышло новое обновление большой программы и новые замечания по местной, на должности разработчика сидел вчерашний студент, который знал Firebird и Delphi, а ещё очень любил линукс и открытое ПО. Примерно тогда же выяснилось, что давно используемый MSSQL нелегальный, и денег на его легализацию не предвидится. Так как разом отказаться от старой базы было невозможно, то пришлось для начала писать скрипт, который копировал данные каждую ночь из старой базы в новую, и потихоньку переписывать функциональность двух старых программ в новую разработку. Естественно, прежде всего студент написал то, что требовало начальство, и в тестовую эксплуатацмю ушла третья программа, которая работала с одной задачей, но выполняла новые функции. Пользователям под роспись полетели новые инструкции о работе с программным продуктом, и на рабочем столе каждого из них появился очередной ярлычок.

Через полгода к разработкам подключились безопасники и потребовали внести множество изменений. Московский разработчик отказался от проекта, предоставив госконторе развивать его дальше своими силами, а студент уволился с тоски.

8668

Из чего же, из чего же, из чего же сделаны эти игрушки?

Когда я учился на технической специальности, нам дали задание, расплывчатое чуть более, чем полностью: «Разработать собственный программный продукт».

Ну, я не поленился. Всё же игры пишем с друзьями достаточно давно — дай-ка исполню мечту детства, проведённого в Total Annihilation! Решил создать RTS в стиле известного детского конструктора. Выбрал изометрическую проекцию, нарендерил зданий, деревьев и упорно работал четыре месяца.

Конец февраля. С торжеством смотрю на получившуюся игру, провожу за ней часы, придумываю планы по дальнейшему развитию и лелею нескромные надежды сделать из неё что-то коммерческое. Решаюсь наконец-то приняться за написание реферата, знакомлюсь с местными правилами оформления списка источников.

Вопрос месяца: к какому типу источников относится друг-программист, кто автор статей по C# на MSDN и что теперь делать ещё с четырьмя необходимыми источниками?

8659

Ошибок не может не быть

Тестирую свой код.

1. Пишу юнит-тест.

2. Прога выдает на нём не тот результат.

3. Проверяю юнит-тест — не, прога вывела правильный результат, это у меня неправильный юнит-тест.

4. Исправляю.

5. Запускаю — ну надо же, проходит! Как так вдруг?!

6. Пишу новый юнит-тест.

7. Возвращаюсь к пункту 2.

Последние полчаса из такого цикла не выходил. Алгоритмами мыслить проще, чем частными случаями. Наверное, поэтому я программист.

8654

Пусть из сарая вырастет дворец

Все, наверное, читали знаменитое «Если бы программисты строили дома». Однако тут есть и другая сторона. Осталась за кадром привычка заказчиков менять ТЗ на ходу, а также взаимодействие с пользователями.

Заказ на строительство пятиэтажки. Стандартная пятиэтажка, ничего сложного. Спрашиваю, нужен ли лифт. Нет, говорят, не нужен. Отлично, мне же проще.

Через полгода дом построен. Приходит заказчик:

— А почему лифта нет?

— (Вашу мать!) Так сами же сказали, что не нужен!

— Ну да, сказали… Оказалось, нужен.

Куда я вам лифт пристрою? Ладно, присобачу шахты снаружи, прям рядом с подъездом. Вместо окон на лестничных площадках пробьём двери. Шахты уродуют внешний вид дома, а лифты останавливаются между этажами, зато относительно быстро и без кардинальных перестроек. Месяц отладки (то застрянет, то трос оборвётся, то напряжение в доме проседает — электросеть не рассчитана на такую нагрузку) — всё вроде заработало.

— Жильцы верхних этажей жалуются. Когда они выходят из дома в окно, а не в дверь, очень больно бьются об асфальт.

— А какого хрена эти идиоты в окна выходят?

— Ну, так быстрее. И вообще, привыкли они так. Придумай что-нибудь.

Хрен с вами — растягиваю под окнами сетки и подстилаю надувные матрасы. Жильцы всё равно набивают синяки и шишки, а иногда умудряются промахнуться мимо сетки и сломать ногу или шею, но жалоб становится меньше.

— Знаете, мы тут подумали: лифты — это всё прошлый век! Вот я был вчера в торговом центре, там вместо лестниц эскалаторы!

Кое-как объясняю, что эскалаторы не влезут ни по габаритам, ни по массе, стоить будут, как вся эта пятиэтажка, а энергии жрать, как целая улица. И вообще, ТЦ — это одно, а жилой дом — другое, и нефиг извратом заниматься. Вроде отстали.

— Жильцы жалуются, что в подъезде постоянно посторонние, а у многих квартиры часто грабят!

Домофоны стоят во всех подъездах, только это без толку, потому что жильцы по доброте душевной сами пускают посторонних, а код домофона не знает только ленивый или глухой. А замки все жильцы ставят себе сами, только у половины замки, которые можно открыть отвёрткой, а у второй половины нормальные, но запасной ключ всегда под ковриком.

— Пять этажей — мало. Давайте ещё штук двадцать добавим!

Кое-какой запас, конечно, есть — не зря же я в своём строительном ПТУ учился. Этажей пять фундамент ещё выдержит, а на пределе прочности — и все десять, но от двадцати точно конструкция сложится, как карточный домик, клянусь своим мастерком.

Сторговались на четыре дополнительных этажа. Через полгода дом готов. Правда, лифты по прежнему ходят только до пятого, а вода в последних этажах бывает только поздно вечером, но да ладно. Заказчик всё равно ноет, что девять этажей — мало.

Решил построить рядом новый фундамент, попрочнее, с запасом. Ночью аккуратно переставляю дом на новый фундамент — и у дома обваливается одна стена. Кроме того, забыл впопыхах, что все коммуникации идут в старом фундаменте, поэтому дом остался без света и воды.

— А вот я вчера видел рекламу президентского бункера. Сказали, он выдерживает прямое попадание мегатонной боеголовки. А наш дом выдержит?

— Нет, конечно.

— А почему? Надо, чтобы выдерживал!

Вот так и живём.