bash.im ithappens.me zadolba.li

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

11318

Кто сказал «мяу»?

Отдали нам в отдел тестирования программу. Внезапно во время одного из тестов из колонок раздалось громкое и протяжное «мяу», после чего на экране выскочило сообщение об ошибке:

Необработанное исключение CatMeowException.

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

11259

Вперёд в прошлое

Дело было в мае. Наткнулся я на очень интересный язык программирования и начал его изучать. Писать классическое Hello World я не стал и взял быка за рога: появилась на свет утилита, отключающая через реестр распознавание USB-устройств. У нас в школе все компьютеры на Edubuntu; что это за зверь, я не знаю, поэтому в качестве полигона для испытаний выбрал компьютер с Windows XP нашей учительницы химии.

Сказано — сделано. Притаскиваю флешку с прогой. Вставляю, запускаю. Странно: флешка читается. Достаю, вставляю обратно — не распознаёт. Ура! Работает. Стоп, а как включить распознавание, если прога осталась на флешке, а флешка не читается?

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

11250

Цитирую на языке оригинала

В 1995 году, будучи студентом и истосковавшись от безделия и сна на парах после бурных ночей, решил устроиться на кафедру лаборантом. Прихожу, а там, оказывается, конкурс. Балбесов не берут. Завкафедрой, строгий дядька, ставит задачу. Вот тебе кусок кода на ассемблере, завтра принеси аналогичное творение на Borland C. @#$! Ассемблер понимаю, долбаный Паскаль и Бейсик вроде тоже, а с Си что-то не сложилось. Книги читал, а вот писать никак не получалось.

Решение родилось моментально. Ошалевшему завкафедрой сразу же пишу:

asm — и дальше растакой код в ассемблере.

Препод фигеет на ходу. Зовёт другого. Смотрят на это безобразие и друг на друга. Начинают тащиться.

Взяли меня. За находчивость.

11243

Стук в закрытую дверь

Разгребая свои старые исходники, нашёл такой шедевр:

fclose(f_log);
fprintf(f_log, "Файл закрыт");

Долго думал.

11241

Ракеты Голдберга

Ракеты и лошадки, говорите?

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

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

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

Потом заменили галочки на ползунки ON/OFF. Всё бы ничего, но теперь вместо одного клика их нужно перетягивать из одного положения в другое.

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

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

И зачем?

11226

Сохраним вымирающих кракозябров

Если кто ещё помнит, было время, когда существовало множество кодировок кириллицы: стандартная, досовская, виндовая, юниксовая, маковская. Сейчас, казалось бы, этому зоопарку пришёл конец: появилась UTF-8.

Но не всё так просто. Если кто встречал, иногда UTF-8 выглядит кракозябрами, при этом от «нормальной» она отличается значением первого байта: 0xD0 вместо 0xC2, например. Причём и то, и другое довольно часто в разных программах называют UTF-8, и тогда в их настройках сам чёрт ногу сломит.

Так вот, понадобилось как-то в этом разобраться, чтобы настроить нормальное отображение русских букв. Поиск выдал ссылку на форум, где кто-то как раз пытался выяснить этот же вопрос. А вот ответы убили:

— Не парься, скачай Штирлица.
— Не парься, подключи библиотеку iconv.
— Не парься, набей соответствие в табличку.

Люди, блин, программисты, вы что, с катушек совсем того? Проблема явно в неверном выборе кодировки, в путанице терминологии. Это неудивительно — в конце концов, авторы всех этих библиотек в большинстве англоязычные и вопрос русских букв их касается сугубо теоретически. Но вы-то программисты или быдлокодеры, готовые тупо наляпать десяток энкодеров один поверх другого вместо того, чтобы разобраться наконец, что есть что?

На фиг. Пошёл читать документацию в оригинале.

11216

Тончайший баланс костылей и затычек

Позвонили мне как-то из Челябинска. Предложили работу, помощь при переезде. С квартирой проблемы были, поэтому согласился.

Фирма в числе прочего занимается продажей туров в Азию. Есть сайт c поиском туров, управлением продажами, регистрацией клиентов и т. д. Движок на C++, так как всё делалось давно и должно было держать большую посещаемость. Требуется поддержка и доработка. Если что непоятно, есть главный программист, можно обращаться к нему. Испытательный срок — месяц. Зарплата на уровне начинающего программиста. Это то, что сказали на собеседовании.

Первый день. Главный программист показал рабочее место. Сделал svn update. Конфликт, ещё конфликт. Позвонил кому-то. Оказывается, предыдущий программист по какой-то причине просто копировал файлы на сервер.

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

— Так давайте настроим нормально.

— Да мне сейчас некогда…

Второй день. Директор сказал, что компьютер на ночь можно не выключать — рабочее время программиста ценнее. Оно, может, и ценнее, но экономить пару минут на включение… Что ж тут за работа такая?

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

— Кстати, давайте SVN настроим.

— Да мне сейчас некогда…

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

— Как вот это работает?

— Да я сам не намного больше тебя знаю, лучше сам разбирайся.

Разбирался до вечера.

Ещё четвёртый день. Из-за того, что вчера кончилось место, не построился поисковый индекс для туров. Поиск не работает. Директор и главный программист запустили построение ещё раз, оно уже завершилось, а поиск всё равно не работает. Нужно разобраться почему. Оказывается, время кеширования запросов было три часа. Пока разбирался, это время закончилось, и всё заработало.

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

— А что вы делаете? Пойдёмте-ка в переговорку.

— Знаете, мне кажется, я не пройду испытательный срок.

(Удивлённо, немного изменившись в лице.) Как так? Почему?

Долго разговаривали. Решили, что я доделаю форму регистрации и могу увольняться.

Восьмой день (после выходных). Добавил поле в форму регистрации. Ради интереса посчитал — изменения были в 16 местах в 9 файлах плюс небольшой костыль в виде триггера в базе.

На следующий день мне подписали заявление об увольнении. Ну её на фиг такую работу!

11116

Ввод в небытие

Редактируя очередной код, я вдруг понял, почему у многих программистов есть привычка что есть силы ударять по клавише Enter. Этим ударом, подобным хлопком тапка по таракану, программист давит багов!

11115

С нуля и до нуля

В середине девяностых мне исполнилось десять лет. На мой первый юбилей родители купили 386-й комп — краса и гордость нашей улицы!

Первое время я честно играл. Потом играть честно надоело, захотелось полегче. Решил посмотреть, как устроены игры изнутри, чтобы понять, как можно их поломать. Итогом стали добытые книжки по ассемблеру и компилятор FASM.

Счастье длилось целых три дня, пока я писал учебные программы. На четвёртый день решил написать свою и с нуля. Короче, после запуска моей программы комп начал показывать девственно чёрный экран, а после перезагрузки не смог найти DOS. Так я переписал нулевую дорожку винчестера и похерил бухгалтерию моей мамы. Впрочем, это не отбило у меня желания программировать, а родителей научило держать все важные данные на дискетах.