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

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

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(). Студенты — берите на заметку!

1110

Faceteabag.jpg

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

«Так-так-так... Ага... Вот же блин!» — найдя глупейшую ошибку, я хлопаю себя по лбу левой рукой.

Обычная реакция? Всё бы ничего, только оказалось, что в процессе сосредоточенного поиска багов я машинально наматывал на палец верёвочку от пакетика с чаем.

1091

Точка, точка, запятая — вышла рожица кривая

Работаю в известной геймдев-студии уже больше года. Когда я только устроился, народ в основном занимался 2D-проектами. Проработал я месяц-полтора, поднабрался знаний от местных мэтров и внезапно был переброшен на новую 3D-разработку — аркадный шутер. Под него купили движок Lithtech Jupiter (на нем в 2000 году делали NOLF 2). Движок, к слову, для своего времени был очень хорош — все тулзы на месте и пайплайн удобный. Поскольку препродакшн только стартовал, много народу на него не перекидывали, и по счастливому стечению обстоятельств именно меня с тремя старшими специалистами отрядили поковыряться в заморском звере. Пока старшие спецы копали исходники и расширяли функционал под наши нужды, я начал пробивать возможность создания минимальными усилиями конструктора города — строить все по-честному на таком старом движке было почти невозможно.

Поначалу всё шло нормально — я сделал первую тестовую комнату, раскопал референсную систему моделей, и вроде как всё начало вырисовываться. Тут я заметил, что на моделях начала слетать развертка, да и сами модели порой начинали «ломаться» в самых неожиданных местах после экспорта в движок. Покопавшись три-четыре дня в настройках экспортера и покурив мануалы я так и не понял, что к чему. Старшие товарищи были заняты более важными делами и только отмахивались от меня: «Проверь ещё разок настройки экспорта, покрути там, плюнь здесь». Рукава засучили только в пору масс-продакшна, когда проблема вылезла у моделлеров.

Месяц боев с экспортером, попытки расковыривания исходников, переустановка дистрибутивов — не помогло ничего. Время поджимает, пора уже игру контентом набивать, а модели в движок всё не лезут. Что интересно, на машине у одного из старших спецов все проходило как по маслу. Ну, думаем, пора писать в заокеанскую техподдержку. Разработчики только плечами пожимают. Подходит время «Ч» — надо срочно что-то решать, игры-то может и не быть...

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

— А зайди-ка в панель управления.

— ???

— Зайди-зайди. Там, где региональные параметры. А теперь разделитель целой и дробной части смени с запятой на точку.

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

1084

Метод плоскогубцев

Всё же айтишник — не профессия, а образ мышления. Учился я тогда на четвёртом курсе и подрабатывал на кафедре учебным мастером. В обязанности входило обслуживание учебных лабораторий и компрессора. Однажды кто-то из студентов «поигрался» с регулятором (в выключенном состоянии) и сбил все настройки. Когда начались занятия и на стенды было подано давление, выяснилось, что вся система «регулятор — исполнительный механизм» пошла вразнос, издавая при этом громкие шипяще-свистящие звуки, которые мешали вести занятия и действовали на нервы.

Меня вызвали для решения проблемы. Конечно, можно было бы просто перекрыть доступ воздуха, но проектировщик стенда клапан не предусмотрел. Отключить подачу можно было лишь выключив компрессор, чего делать было нельзя, поскольку пришлось бы остановить занятия и в других лабораториях — включение и выключение заняло бы значительное время. Преподаватель начал рассказывать, какие теоремы и формулы надо использовать для рассчёта новых настроек, которые стабилизируют систему. Думать над этим мне было лень. Я взял в мастерской плоскогубцы и зажал ими шток исполнительного механизма, тем самым прекратив и колебания, и ужасные звуки. После долгой паузы преподаватель сказал: «Ну или так...»

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