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

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

5126

Re: Требую запасной PgDn

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

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

Я поглядел код, разобрался, добавил одну строчку:

$Data['message'] = nl2br($Data['message']);

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

Так и есть: в спешке я добавил эту строчку в цикл по пользователям. Желаю, чтобы в 2011 году в жизни каждого человека было меньше пробелов!

5087

Что вы, право, как маленький

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

— У меня тут почтовый ящик пароль требует.

— Сейчас посмотрю... Так, всё верно, мы его вам только сегодня создали.

— И где мне взять мой пароль?

— Как где?! Мы его выслали на ваш новый почтовый ящик!

5055

Компайл, шатдаун — а там уже не наше дело

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

Была на хлебзаводе проблема с огромной базой данных на Oracle. Конфигурация, написанная местным разработчиком. Десятки программистов, в разное время дописывавших для неё свой код. Тысячи заплаток... Когда в один прекрасный день всё это набрало критическую массу, было принято решение обратиться к самому разработчику. Разработчик покрутил пальцем у виска и сказал, что «проще новых народить, чем этих отмывать». Взяли мы двоих погромистов, чтобы те потихоньку вытаскивали данные и создавали новую базу.

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

— Что случилось?

— Новобранцы-придурки ушли домой и сервер выключили...

5041

Начнём с чистого листа

Логика юзеров часто может быть непостижимой. Давно я работал на одном предприятии, где секретарше было далеко за 50, и пережила она на этой работе не один десяток директоров и владельцев. Работала тётушка по-своему: все приказы по предприятию, служебки и прочие документы она хранила в одном вордовском файле. Страниц там было за пятьсот. Если надо было что-то распечатать, она всё удаляла, кроме нужных страниц, а после закрывала файл, не сохраняя изменений. В таком бредовом режиме работала она годами, пока комп не заглючил. Пока админ шёл, тётушка куда-то удалилась. Приходит — на экране вордовский файл на один листик. Админ, как культурный человек, сохранил всё и закрыл, прежде чем чинить глюк с почтой.

5039

Код-самоед

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

Из последнего: обратили внимание на неполадки с памятью в стандартной конфигурации. Запустили тест памяти — всё зависло. Посмотрели размер адресного пространства: 64 МБ, а на плате физически присутствуют только 32. Тут у нас возникли некоторые подозрения. Оказалось, что в примере от производителя, кроме неверного размера памяти, ещё и банки памяти адресованы вперемешку. Выходит, что тест памяти стирает из неё сам себя, и процессор исполняет какие-то случайные инструкции. Интересно, что будут писать о глюках через десять лет, если подобная технология станет повсеместной?

5037

Извилистые дорожки и стройные ножки

Благополучно отучился на отделении информатики физфака. Был и курс «Введение в системы автоматического проектирования радиоэлектронных устройств» (разводка печатных плат, проще говоря), и с микросхемами элементарной логики мы знакомились как в теории, так и на лабораторных. В дипломной работе я использовал микроконтроллер, то есть был не понаслышке знаком с тем, что можно получить, накодив на C несколько сотен строк. Одногруппник, которому больше нравилось высокоуровневое программирование, взял меня в напарники для разработки светоматрицы — платки 8×12 светодиодов, которая должна была управляться с компьютера. Ни у него, ни у меня не было абсолютно никакого опыта, не считая вышеописанного обучения в университете, поэтому неудивительно, что даже с чисто организаторской стороны было много факапов. Однако я хочу рассказать о моих программно-железячных косяках. Мало ли, вдруг кому пригодится.

Free Serial Port Monitor — хорошая программа. Но показывает она не то, что пришло в буфер COM-порта, а то, что прочитала использующая его программа. Поэтому надо было не покупать новую микросхему MAX232, решив, что предыдущая сгорела, а просто добавить в отладочную программу чтение.

Altium Designer — тоже хорошая программа. Только вот все библиотеки в ней созданы в расчёте на английскую систему мер. Если вы используете десять деталей из стандартной библиотеки и одну свою, подумайте о том, обязательно ли делать её в СИ. На чертеже очень трудно заметить, что четыре проводка к пятивыводному разъёму подцепились, а один остался в полупикселе от положенного места. В итоге на плате не оказалось одной дорожки. Хорошо, что использовалась она только для программирования! Спасла конструкция «проволока, с одной стороны прикрученная к штырьку для программирования, иголка и рука, тыкающая в малюсенькую ножку микросхемы».

От аппаратных глюков никто не застрахован, даже если микросхемы покупались у поставщика, работающего напрямую с производителем. Прежде чем десятый раз просматривать собственный код, который идеален, пишите тестовые программы. В моём случае проблема была в том, что при замыкании одной из ножек на землю микроконтроллер начинал слать в USART мусор (точнее, циклический мусор: каждые три байта всё повторялось, но от этого не легче). Хорошо, были свободные ножки, так что ситуацию спасло припаивание проводка, разрезание дорожки и исправление программы.

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

А ещё источник постоянного тока (5 В, 12 А) не любит, когда от него требуют то 0 А, то 2 А (не говоря уж обо всех двенадцати) с частотой всего полкилогерца, да ещё не по синусоиде, а ступеньками. Нет, сам источник не сгорел. Но вот напряжение от таких скачков чувствовало себя нестабильно, а вместе с ним и блютус-модуль, в результате чего связь с компьютером терялась. Эта проблема оказалась самой лёгкой: я впаял перед модулем диод, чтобы заряд обратно не утекал, а падение напряжение на полвольта скомпенсировал уменьшением токоограничительного сопротивления, и всё заработало. Интересно, что микроконтроллерам ATmega16 скачки были нипочём, хотя по документации они должны были отключаться раньше модуля.

Это, конечно, далеко не все трудности, с которыми пришлось столкнуться (или придётся: работа ещё не совсем закончена). Надеюсь, своим рассказом я уберегу какого-нибудь начинающего разработчика от нескольких дней битья головой о стену.

5006

Сделай паузу, выпей чаю

Несу поставить на зарядку КПК и на подходе к компу выпускаю девайс из рук. КПК падает на клавиатуру, я за ним. В процессе сбиваю со стола и клаву. КПК падает аккурат на кнопку выключения сетевого фильтра, начинает орать источник бесперебойного питания. Через долю секунды клавиатура приземляется на выключатель ИБП. Комп мгновенно гаснет.

Матерюсь, оглядываю стол, вижу стоящий на краю чай и понимаю, что легко отделался.

4982

Чё, самый умный?

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

Ковырялся примерно час. Уже сонный мозг выдал логическую цепочку: «Тест по учёбе → учёба → старенькие машинки в аудиториях → Internet Explorer». Решил проверить догадку. Открываю противный Эксплорер, ввожу адрес, логин, пароль и всё такое — работает!

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

4971

Смешная горячая палочка

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

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

Не знаю, что сейчас с этим компом — может, списали давно. Но с тех пор я больше ничего не паяю: при виде паяльников смех разбирает.

4900

Стыдно сказать

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

Я нашёл багу в сайте, который поддерживаю потихоньку, и спросил у падавана:

— А парель-то вы сменили?

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

Всё началось очень спокойно:

— Что за парель?

— Парель?!

Не буду копировать весь чат, а вставлю концовку:

— ААА!!! БЛ#$Ь!!! ЧТО ЗА ПАРЕЛЬ!?!?! ГДЕ ОНА! ЧТО МЫ ДОЛЖНЫ БЫЛИ СМЕНИТЬ!?!?!?

— O_о! Пароль! Ёпт, чувак, что ты так нервничаешь?

— Ну ты даёшь...

Так вот, уважаемые рыцари, джедаи и мастера кунг-фу, будте внимательны в общении с учениками и падаванами, а то их может хватить инфаркт.