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

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

5473

Верховный Некромант и знамёна поиска

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

Захотел лич квадрат магический найти. В принципе, он и сам бы справился, но Верховный Некромант сказал, что процесс надо распараллелить. Тогда лич призвал скелетов. Каждый призванный скелет отправлял личу почтовым голубем присягу о верности и готовности приказам следовать. Призвал лич нескольких скелетов и решил, что этого достаточно будет. Тогда поднял он знамя поиска и разослал всем скелетам почтовых голубей с заданиями. И начал каждый скелет поиск квадрата магического. Скелет ищет-ищет квадрат да на знамя поглядывает — надо ли искать ещё? А как только найдёт — знамя поиска опускает и бежит к своему господину ответ докладывать. Так и ищут квадраты: стоит на поле памятном лич, флаг подле него развевается, да скелеты вокруг толпятся, приказов ждут. Как только флаг поднимется да голуби полетят, так сразу скелеты за поиск и принимаются.

Некоторые вопросы некромантии.

В:: Говорят, что в методических указаниях Верховного Некроманта есть ошибка.

О:: Да. Верховный Некромант считал, что письмо можно отправить почтовым голубем. Но почтовый голубь-скелет летает плохо (попробуй полетай без перьев), поэтому может отнести только короткую записку, не больше трёх слов.

В:: А чем плохо относить письма лично?

О:: В задании Верховного Некроманта написано: распараллелить. Нескольких голубей можно отправить одновременно, а вот лично разносить письма придётся от одного скелета к другому, то есть последовательно.

В:: Как почтовый голубь знает, куда лететь?

О:: Голубю говорят адрес. Свой адрес лич сообщает скелету в заклинании призыва, потом этот адрес скелет передаёт голубю. А адреса скелетов лич узнаёт из их присяг о верности и готовности и тоже говорит их голубям.

В:: А в методических указаниях было написано по-другому.

О:: Ага, в методических указаниях предлагалось, чтобы скелет сам искал лича. Представьте картину: бегает скелет по полю памятному и пристаёт ко всем встречным деревьям, зайцам и другим скелетам с вопросом: «Вы лич или не лич?» — и так, пока лича не найдёт.

В:: Зачем нужен флаг поиска?

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

В:: Что это вообще такое?

О:: Лич — главный процесс,

скелет — вызванные процессы,

Верховный Некромант — преподаватель IT %PrepodName%,

призыв скелетов — команда ShellExecute,

почтовый голубь — команда PostMessage,

лично принасти — команда SendMessage,

записка — произвольное сообщение Windows,

письмо — сообщение Windows WM_COPYDATA,

флаг поиска — событие синхронизации (еvent),

поиск лича — команда FindWindow,

поле памятное — оперативная память,

процессорная мана — процессорное время.

5467

Тактика обнуления

Никогда не забуду свой, так сказать, первый грязный битхак. Учился я ещё в школе, английский знал на отлично и, как это сейчас говорится, был самоуверенным пользователем ПК.

Попал ко мне от друга диск с англоязычной версией Fallout Tactics (версии с «только полным и качественным переводом» в нашем городе к тому времени не наблюдалось), скачанной неизвестно откуда и залитой на болванку. Радости моей не было предела: это же продолжение того самого легендарного Фолаута! И вот, весь в предвкушении действа, поставил я это чудо на свой ПК. К моему глубочайшему разочарованию, после запуска сразу вылезло окошко «Please insert CD», кряка на диске обнаружено не было, а на дайлап надеяться было бессмысленно: связь рвалась с завидной частотой. Я уж было совсем загрустил и скорее со злости, чем от большого ума, открыл экзешник в хекс-редакторе (тогда я имел весьма смутные представления об ассемблере), через поиск нашёл «insert CD» — и давай занулять байты справа от этого сообщения в порядке очереди.

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

5462

Как цветок в проруби

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

Пару недель назад товарищ пишет:

«Всё, сделал! Теперь, когда директор входит в офис, автоматически исчезает шара с фильмами, и избранным рассылается письмо».

Сегодня история обрела логичное продолжение.

«Помнишь привязку, удаляющую шару с фильмами при входе директора? Так шеф третий день болтается, как цветок в проруби, и зачем-то вламывается на этаж после пяти, а по первоначальному замыслу шара создаётся по расписанию как раз в пять. Последние два дня ухитрялся отметиться в 17:01! Волевым решением скрипт теперь науськан поднимать шару при выходе директора с этажа».

Не обижайте инженерский состав.

5460

Не знаю пароль, но вижу ориентир

Попросили помочь с программой по одному околокомпьютерному предмету. Как всегда, программа уже кем-то сдавалась, «там уже всё работает, ты только подправь чуток, чтобы выглядело по-другому».

В двух словах о самой задаче: необходимо рассчитать матрицу значений, которая затем ломаным контуром делится на две части, имеющие некий экономический смысл. В зависимости от того, в какой из частей находится элемент, делается вывод.

Открываю проект, вижу привычную уже картину: полное отсутствие форматирования, однобуквенные переменные и имена компонентов по умолчанию, комментариев нигде нет. Благо алгоритм самой задачи нехитрый, так что разобраться, где в этом коде что, было не шибко сложно. Форматирую, правлю — и в самом конце программы нахожу настоящий шедевр.

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

a := Canvas.Pixels[n-10,k-10];

if TColor(a) = clRed then begin otvet := … end else otvet := …

Окончательное решение программа принимала на основе цвета ячейки таблицы! Ей-богу, я окосел. Объявить массив и занести в него номера ячеек, образующих контур, наверное, слишком скучным показалось — лучше потыкать в пиксели на форме. Особенно весело было нажать на кнопку «Рассчитать», потом на секунду свернуть окно программы и наблюдать девственно чистую белую таблицу, о перерисовке содержимого которой, разумеется, никто не позаботился. Разумеется, сделать вывод после этого программа уже не могла.

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

5429

90% кода и 10% кофе

Вчера я был официально обращён в быдлокодера. А как всё хорошо начиналось…

Один хороший знакомый работает дизайнером в небольшой конторе по разработке сайтов. Но вот беда: на JavaScript у них никто профессионально не пишет; постоянно приходится нанимать людей под проект или искать уже готовое решение и вписывать, как получится.

На очередной проект решили пригласить меня. Всё бы ничего — проект хороший, оригинальный, красивый, но с одним изъяном: директором «я сам лучше и быстрее сделаю».

Работал я по вечерам. Писал, настраивал — всё красиво, грамотно, качественно и без тормозов. Сказка длилась до момента «А что, ещё не готово?»

Две ночи, банка кофе — проект сдан. Но что там понаписано в конце… В общем, хотел я проект этот себе в портфолио, а теперь кто спросит — чур-чур, не я писал.

5419

Дело не во мне, дело в тебе

Внедрение продукта. Словарный запас резко сократился.

Постановка задачи:

Я ничего не знаю.

Я не понимаю, о чём вы.

Что вы от меня хотите? Не приставайте ко мне.

Нет постановки задачи. Ставьте задание.

Я в вашей постановке всё равно ничего не понимаю.

Разработка:

Капец! Бред какой-то.

Кто тебе сказал такую глупость?

Раньше здесь этого не было.

Сдача:

Я очень рад.

Это не я.

Вы что-то неправильно делаете.

У меня всё работает.

Так было написано в постановке.

5418

Одним глазком посмотреть

Принесли мне как-то «посмотреть» скрипт из соседнего подразделения — сказали, вроде как работал местами. После детального «просмотра» выяснилось:

— во всех условных операторах пропущены фигурные скобки;

— соединения не обнулялись, а повисали после запроса к базе;

— функцией для извлечения колонок извлекались строки.

После «просмотра одним глазком» скрипт заработал как положено и в четыре раза быстрее.

5417

Блок-схема и лист-программа

Не понимаю я преподавателей со встроенным в голову компилятором, хоть головой о стену бейся! А дело обстоит так: моя девушка учится на технической специальности, не имеющей ни малейшего отношения к IT. Есть у них общий предмет с гордым именем «Информатика», на котором учат всему, от создания папки до азов программирования на бородатом паскале и VBA. Ей, естественно, программирование надо, как юниксу BSoD. Кто все домашние задания делает? Верно, я.

Стандартный случай: пять простых задачек по три массива, четыре цикла и десяток-полтора переменных. Я, эникейщик-самоучка, глянул на это всё, на минутку задумался, за 15 минут написал, ввёл тестовые данные, проверил ответ — отлично. Можно сдавать, скажете? А вот тут и прикол. Моя любимая берёт ноут, тетрадку и… верно, переписывает туда код.

Цитирую преподшу: «Блок-схема — самая важная часть программы! Без неё вы никогда не напишете ни одной программы!» Ну да… Можно подумать, что я за минуту в голове нарисовал пять этих блок-схем. Кстати, внешность этой преподши полностью соответствует её манере преподавания: уже за сорок, старомодная юбка, очки и полное нежелание идти на коннект со студентами, какого бы это вопроса ни касалось.

Так вот, рисую блок-схему. Любимая смотрит, говорит, что неправильно. Начинаем рыться в её конспекте и смотреть, что им на лекциях диктовали. Нашли, сделали. Ура! Курсор в верхний правый угол, «Закрыть», «Нет». Я фигею: «А как же сдавать программу, если ты ее не сохранила? Заново писать?» — «Нет», — отвечает мне любимая, и показывает на тетрадь: «Вот так». Мда… XXI век!

Видел я идиотов, видел людей, которые умудрялись планку DDR2 вдавить в слот DDR, видел, как, не зная об отверстии для извлечения диска, привод зверски раскурочивали отвёрткой, не вынимая из корпуса, но чтобы работоспособность программы проверялась на листике…

И это я молчу, что переменная, содержащая сумму, должна называться S, и не иначе, счётчик — n, вводимые данные — x и т. д. О «говорящих переменных» им никто не рассказывал; мало того, по словам преподши, так делать неправильно!

Завтра у девушки контрольная. Как студенты будут писать программы? Вы снова правы! На листочке, не подходя к компьютеру. Я же, в свою очередь, буду сидеть в ближайшем интернет-кафе с ноутом, открытым редактором VBA и включённой аськой. Если такие преподаватели учат людей грамотно разбираться в вопросе, то, простите, я тогда страус!

5395

Первокурсные перфокарты

Я, наверное, типичный быдлокодер: как правило, приходится мне в минимальные сроки править то, что уже написано суперспециалистами.

Когда моя жена училась на программиста, писала она курсовую. Не помню суть ошибки, но она была. Бессонная ночь для меня — и ошибки нет. Всё на мой взгляд красиво: код читается легко, комментарии есть.

Пошла жена сдавать. Получила «отлично», но с комментарием, что использовала то, что они ещё не проходили. Программа была написана на VB, который они закончили изучать на втором курсе. Вопрос: чему их там, собственно, учили тогда?

5387

Противьтесь соблазну

Тестирую программу своей студентки. Она обрабатывает текст и сбрасывает результаты потихоньку в файлы. В какой-то момент на диске появляются файлы с названиями:

Изменение регистрировалось в журнале

Может быть, ошибок и нет

Нет

Но внесение изменений нужно производить квантами

Прежде всего, кто-то должен быть ответственным

Проделанная работа будет отброшена назад, если эта среда изменится

Противьтесь соблазну

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

Пока писал эту историю, появились новые файлы:

Маша и Гвидо с немалой степенью озабоченности посмотрели друг на друга

В это день было убито 1700 поляков

Все дворы были разграблены и сожжены

И это не всё, что она мне пообещала. Кого мы создали?