bash.im ithappens.me zadolba.li

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

11853

Волей великого Рандома

Ходил я как-то с другом на олимпиаду по программированию. Было нам лет по пятнадцать.

На три хитромудрых задания давалось полтора часа. Первые два задания отняли у меня большую часть времени. На третье оставалось от силы пять минут, однако и этого мне хватило. Изюм в том, что программка должна была выдавать «ДА» или «НЕТ». Улавливаете ход мыслей? Генератор случайных чисел я вынес подальше с экрана, а для отвлечения внимания написал первоклассный индусский код. После окончания времени к каждому участнику по очереди подходили двое дяденек (явно гуманитариев) и диктовали с добрый десяток проверочных входных значений. За каждый правильный ответ начислялось по баллу. Дошла очередь и до меня, а точнее, до генератора, который угадал четыре из десяти. Четыре балла за пять минут — очень неплохо.

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

Так я занял второе место, а друг хорошо повеселился. Через год мы с ним, заняв уже первые места, поехали на республиканское соревнование

Мораль:

1) Ищите нестандартные способы.
2) Делайте бэкапы.
3) Никогда не сдавайтесь.

11851

Ночь, подушка и застава

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

Накатили новую версия на полигон — два десятка застав. Пререлиз. Если всё окей — делаем показуху высокому руководству и пилим (зачёркнуто) получаем деньги.

Для быстрой связи оставил номер своего мобильного. И не зря. В три ночи звонок от дежурного:

— Такой-то Такойтович?

— Ну да, а что?

— Вы оставляли свой номер, если в такой-то системе будут проблемы. Диктую текст сообщения…

И дальше динамический select на полтора экранных листа.

Конечно, сразу сообразил, что не все отладочные месседжбоксы удалил, и в ближайшие минут десять соображал, что делать.

Так рано я не приезжал на работу ни до того, ни после. Уже в семь утра был в своём кабинете, искал все «левые» сообщения, удалял их, пересобирал проект, выделял обновлённые библиотеки, создавал апдейт, выкладывал его на сервер обновлений…

Успел! Проект был принят на ура, все остались довольны, и только у меня поседела грудь.

11838

Паровозик мчится, времечко идёт

Раз уш пошли комментарии, всуну и я пять копеек из личной коллекции.

//АААААААА!!!8E

//Да, я употреблял вещества при написании этого кода

//Паровозик мчится, времечко идёт. А за мною едет долбо#бов взвод…

//Я боюсь этого кода. Я не хочу его открывать. АААААА

//HEAVY METAL RULEZZZ. P. S. %name% ты мудак

//В рот мне ноги

//Кто-то курит, кто-то пьёт, а мы вот разгребаем говнокод.

//Это код. ДА, Б@Я, ЭТО КОД!!!

//Это писал мой кот. Я не отвечаю за действия моего кота.

//Куда вы меня ведёте? Что вы делаете? Какой топор???

//Что значит на#ер???

/*
* C говно
* Java говно
* Python твой говно
* А ты, б#я, дизайнер, вообще на @#й иди!!!
* Б@# вы работать будете? Развели тут, б#я, чат в исходниках либы
*/

{
Он не спит
Он не ест
Он за день не присядет
Говнокодить сразу сядет
}

//С облегченьем

//В root мне логи… Released!

//Эти п@#$расы хотят возможность удаления файлов? Будет им удаление файлов!

{
1. Я доволен своей работой.
2. Я доволен своей зарплатой.
3. Если я не напишу это, меня уволят.
4. А ещё мне е@#т мозг все, кому не лень.
5. И мне это нравится (см. пункт 3)
}

//См. рис. 1
//_|_

//0xNAHUY

//WTF???

//О, косячок! О, попёрло. О, а давай напишем CMS, енот?

//Строка этого кода… б@я

//NOOOOOOOOOOOOOOOOOOOOOOOOOOOOO!!!

//Что значит «Б#я, ты кто???»

//ЛАМЕР, ПИШУЩИЙ НА АСМЕ??? ВЫ ЧО, УКУРИЛИСЬ???

//Вы кто? Куда вы меня несёте? Что это за рубашка с длинными рукавами? Что вы мне колите, мать вашшшш…

11830

Хочу на C — пишу на C!

Представляю вашему вниманию комментарии из кода наших любимых программеров.

//Прости Господи

//Do not edit. This code is written using magic. И я не знаю, как эта х@#$я работает.

//А здесь мы ждём, пока в порт прилетит байт… Или п#$дюли.

//Этот метод одержим Ктулху

//Я не хотел называть их GetHuy и SetHuy, оно само…

//Что? Я? А я ничё…

//!@#$%^&*()_+ Это не мат, это напоминание.

//10 WTF/час

//Вообще, здесь бы хватило и byte, но тимлид сказал зафигачить int64, поэтому я зафигачил smallint…

//КААААК??? 0_0

//Неизвестно, на каком языке написан этот код, но он компилится… Хм…

//А это кто, з@#упа конская???

//Слыш компилер @#я! Ты чё такой борзый? Код гони!

//Вася придурок!!!

Чуть ниже:
//Б@#, Вася — это ж я
//Блин, а чо делать

/*
* Б#@ чё это за прога?
* Б#@ ну мне кто-нибудь ответит
* Аууу… это точно прога для чата?
*/

/* Как Дельфи?
Почему это «какого @#$ на C???»
Хочу на C — и пишу на C, идите в пень!
*/

//Этот код биоразложимый

11785

Эксепшн по температуре

Я не программист, но появилась необходимость упростить работу, ибо однообразные действия задолбали. Беру пару книжек, интернет (спасибо добрым людям, что помогают разжевать сложные вещи простым языком), запускаю VB и начинаю вникать. Так пару месяцев — затянуло.

Выхожу из дома, на пороге слышу диалог жены с сыном:

— Переставь сковороду на маленькую конфорку.
— @#$!
— Ты чё, идиот, полотенцем не мог взять? Ручка алюминиевая!

Голос в башке:

— Баг! Начинаю отладку!

У меня-то пройдет через пару недель, а вот как вы, программисты, с этим живёте?

11745

Пластилином по текущей памяти

Вспомнил себя в молодости — начинающим программистом. Родилась забавная аналогия. Итак, представьте себе начинающего аквариумиста, который делает свой первый аквариум.

— Так-с, аквариум… Что может быть проще: стекло, вода, рыбы. Поехали!

Берёт четыре куска стекла, ставит друг к другу.

— А чего это мы разваливаемся? На фотках вон ровно стоят. Тут, никак, клей нужен!

Клеит по очереди одну стенку к другой, последние не сходятся.

— Ах ты ж гадкое стекло! Ничего, ща тут подгоним, тут больше клея, тут прижмём… и вуаля! Авось никто присматриваться не будет.

Насыпает гравий, кладёт водоросли, рыбок, начинает лить воду.

— Клёпаный понтон! Какого вообще творится?!

Гуглит: «В моём аквариуме падает уровень воды».

— Доливать по мере высыхания? Не очень похоже на высыхание, но попробуем.

Доливает с тем же результатом.

— Ну этот Гугель и кривой, ни одной толковой ссылки! Ща будем вычислять проблему.

Льёт воду в центр, по углам, с разной силой потока. Извращается всеми мыслимыми и немыслимыми способами довольно продолжительное время, пока не кончаются моральные силы пробовать что-либо вообще. И тут осеняет.

— «Как делать аквариум. Гайд с картинками»… Ах, вот оно что! Тут дно нужно!

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

— Ну, вроде всё стабильно, только маленькие струйки местами.

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

— А если подложить полотенце, то всё, что накапает, успевает подсыхать! Гениально, и не нужно возиться с отдельными капающими местами.

Читает гайд дальше.

— Отстаивать двое суток? Ещё чего. Муть быстрее оседает.

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

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

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

— Переклеивать? Да проще застрелиться! Воду постоянно менять?! Ну его в пень!

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

11726

Тотчас же

Прогерская контора. Пятница. Пять часов вечера. Приходит доброе сообщение от заказчика. Речь идёт о фиче:

I want you to apply the following actions immediately or as soon as possible and probably not later than today.

11725

Семеро на одного

Сдаёт команда проект. Я запускаю программу, замечаю небольшой тормоз интерфейса при старте. Удивляюсь, лезу в код. Нахожу подтверждение своей теории. Пишу программку набивки данных. Запускаю программу не «с нуля», а с 12 ГБ данных. Программа виснет намертво при старте. Зову тимлида, тыкаю его носом в это дело.

Через неделю приносят «исправленное». Теперь при запуске ни хрена не работает всего две минуты и висит незакрываемое окошко: «Пожалуйста, подождите». Понятно, баг не исправили, поставили костыль. Генерирую 200 ГБ данных и наблюдаю ошибку выделения памяти. Тимлид чешет в затылке и уходит.

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

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

Спустя ещё два месяца наконец-то сделали отдельный поток загрузки данных и отдельный — под интерфейс. В конце попросил у тимлида карту потоков. Оказалось, её нет. Смотрю на дату — да нет, конец 2013-го, не ошибся. А он до сих строит однопоточные приложения…

11690

А он — сын тимлида

Добрый день, айтишники! Пишет вам восьмиклассник.

Итак, относительно небольшой город (450 тысяч жителей), столица автономной республики. Городская олимпиада по информатике. Получасовая «консультация» о том, как войти в WinXP с логином «гиа2013», столько же — объяснения, где лежат Паскаль и Бейсик и что на Си писать нельзя. Задачи — наипростейшие, на парсинг строк и работу с массивами. Сдал в полной уверенности в победе, но не тут-то было.

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

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

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