bash.im ithappens.me zadolba.li

Программизмы

1233

Мир 2.0: четырёхдневку за одни сутки

— Ты где такую Солнечную систему видел? Кто их так делает? Cоздай себе другой экземпляр системы и экспериментируй на нём.

— У тебя гравитационное поле есть?
— Есть, 36 на 36.
— Мне так много не надо.
— Сколько надо — столько и возьмёшь.

— Ты куда Юпитер дел? Что? Это Юпитер? Это дерьмо, а не Юпитер, совсем не похоже!

— У тебя с Марсом проблемы — скачет по небу.

— Куда ты дел звёзды и как их включать?

Шёл только первый день творения. До сдачи новой версии виртуального планетария оставалось целых шесть дней.

1209

Экстренное прерывание

В последнее время я сконцентрировался на программировании микроконтроллеров на Си и ассемблере. Столь глубокое погружение в новую тему не могло не сказаться на психике.

Итак, раннее утро, часов шесть. Должна приехать родственница жены; я сквозь сон слышу звонок в дверь. Супруга просыпается, идёт встречать гостью. В сонный мозг приходит мысль: «Прерывание от звонка в дверь сработало». Мысленно представляю себе текст программы, понимаю, что до следующего прерывания еще куча тактов, и спокойно ухожу в sleep mode c пониженным энергопотреблением.

Через какое-то время просыпается мелкий, и не обнаружив рядом мамы, начинает пинать меня ногами в живот. Возвращаюсь к листингу — это не прерывание по звонку будильника. Если это не прерывание, значит, меня пинает главный цикл. А как он меня может пинать, если я в sleep mode? Он обязан подождать следующего прерывания!..

С мыслью о найденном баге я окончательно просыпаюсь.

1206

Секс-менеджмент

SexPosition, говорите? Мне как-то довелось заниматься рефакторингом модуля, работавшего с системными таблицами нашего приложения, среди которых была и пресловутая «Sex».

То, что, разбираясь с этим делом, я осуществлял в проекте поиск по известному ключевому слову и чувствовал себя злобным, начинающим и неопытным др^H^H искателем порнухи — это полбеды. Гораздо интереснее было обнаружить сопутствующий класс SexManager — видимо, что-то вроде офис-менеджера по особым вопросам.

Cреди находок были переменные и функции animalSex, SexPanel и sexModel.getSex(). А что вы хотите — система медицинская, тут понятие пола порой к одному биту не свести. Вот и приходится работать... секс-менеджером.

1203

Мечты, мечты...

Талантливый препод объясняет продвинутым школьникам алгоритмы.

Преподаватель: Еще задачка на динамику. Сейчас мы узнаем, как сгенерировать все последовательности длины N из нулей и единиц так, чтобы рядом не стояло трёх единиц.
Голос с задней парты: А зачем все это нужно?
Преподаватель: Нужно. Вот представь — гуляешь ты с девушкой, и вдруг она тебе говорит: «А сгенерируй-ка мне все последовательности длины N из нулей и единиц так, чтобы трех единиц не стояло рядом!»
Голос с задней парты: ...и я покажу ей исходники решения, а она сама сгенерирует.
Голос с первой парты: (мечтательно) Да-а, девушка-компилятор — это круто!..

1193

Hello, computer!

В конце 11 класса мы с двумя друзьями из класса сдавали ЕГЭ по информатике. Один из них испытывал трудности в подготовке к экзамену и обратился ко мне за помощью. Дело происходило в июне, в школу мы уже не ходили, поэтому алгоритмы решения задач я объяснял ему по аське. Это было крайне неудобно: задачи были нетривиальными, поэтому печатать приходилось очень много.

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

Представьте: сижу я и вдумчиво излагаю, как определить, сколько чисел в двумерном массиве после выполнения алгоритма на Паскале примет отрицательные значения. Входит мать и видит картину: её сын сидит, смотрит на пустой рабочий стол (все окна я свернул для концентрации внимания) и о чём-то разговаривает со своим компом. Крику было!.. С трудом отговорил маму вызывать психиатра, объяснив, что я ещё не успел сойти с ума от многочасовых бдений за клавиатурой.

1192

Два часа в позиции «Декомпиляция ядра»

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

Буквально через день в процессе доработки этого класса появилось желание вынести позиции полей данных в этой строке в константы во избежание появления ошибок в дальнейшем. Был выбран простой синтаксис: *Position обозначало позицию поля данных в строке, а *Length — её длину. Например, birthDatePosition и birthDateLength — всё просто и понятно.

Только по прошествии получаса до меня наконец дошло, что речь-то идёт о разборе данных о человеке. Теперь невиннейшие константы sexPosition и sexLength в коде навевают определённые мысли о собственном моральном облике.

1180

6 x 9 = 42

— Пятачок, нам прислали десять горшков меда, по восемь каждому!
— Но как это, Винни, по восемь каждому?!
— Не знаю как, но свои восемь я уже съел.

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

1157

Как ни суйся, не ворочай

В 2007 году я училась в физико-математическом интернате для 10–11 классов при одном из лучших московских университетов. Нам читали материал первого курса, и на информатике мы усиленно изучали Delphi. Надо сказать, что процесс обучения был построен весьма интересным образом. Выдаваемые нам задачки, которые обычно пишут на Паскале, мы писали в консольном приложении Delphi, и сдавали их не преподавателю, а серверу, который прогонял прогу через 10–20 автоматических тестов.

Однажды нам попалась простая на первый взгляд задачка:

Даны числа A, B, C, D. Если кирпич размерами A х B пролезет в отверстие C х D, то вывести «Да», в противном случае — «Нет».

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

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

if (A=...) and (B=...) and (C=...) and (D=...) then writeLn ('Да');

Для каждого теста, который прога не проходила, студенты написали по «затычке». Какие из них потом вырастут программисты?

1129

Не изобретая велосипедов

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

Студент не растерялся и настрочил строк 40–50 полного бреда, однако, включающего в себя честный ввод массива чисел и вывод его после сортировки. Естесственно, написанный им алгоритм ничего хорошего с данными сделать не мог, если бы не вставленный в самом конце через несколько десятков «табов» стандартный sort(). Студенты — берите на заметку!