#1362: Игрушки с толкача
13:00 22.10.2009, IT happens
Знакомство моё с компьтерами началось в девяностых (я был в девятом классе) с «пня» с довольно стандартным набором устройств, среди которых был восьмискоростной сидиром. Примерно через год эксплуатации начались трудности — драйв с трудом жевал «палёные» диски с моими любимыми игрушками, а в конечном итоге отказался читать что-либо вообще. Перспектива остаться наедине с «Сапёром» и пасьянсами мне не улыбалась никак — надо было срочно что-то придумать.
Решение пришло, как это часто бывает, случайно и было нетривиальным. Опытным путем было установлено, что сидюк отлично читает единственный лицензионный диск в квартире с дровами и софтом от принтера. Процедура была следующая: в сидюк вставлялся лицензионный диск, служивший «разгонным». После того, как сидюк начинал уверенно жужжать, быстренько нажималась кнопка Eject, лицензионный диск извлекался и вставлялся любой другой. Драйв продолжал думать, что вставлен качественный диск, и уверенно его читал. Единственным обязательным условием была скорость исполнения. Через неделю по скорости я не уступал механикам команды Ferrari на гонках Формулы-1!
Чуть позже отец разобрал сидюк и протер линзу одеколоном — помогло, но ненадолго. В итоге процедуру вскрытия пришлось повторять каждые три месяца, от чего сидюк спился и скоропостижно умер.
#1363: Подождите, я записываю
13:00 22.10.2009, IT happens
Программил я несколько лет назад в фирме, занимавшейся выпуском приборов с хитрыми датчиками. В одно прекрасное утро главный инженер поставил задачу реализовать в ПО поддержку нескольких датчиков на одном COM-порту. На первый взгляд всё было просто:
1) устанавливаем бит чётности в настройках порта в 1;
2) пишем в порт адрес нужного датчика;
3) устанавливаем бит чётности в настройках порта в 0;
4) пишем в порт команду;
5) читаем ответ.
Пишу (очистки буферов и очереди после операции записи в порт, все как положено), компилирую, несу в соседнее здание на флешке инженеру, запускаю на его древнем ноуте с COM-портом — всё работает! Несу датчик к себе, запускаю на своей мощной машине — облом!
Вставляю в код проверки результата каждой функции, запускаю, все функции отрабатывают правильно, но датчик молчит. Меняю порты, датчики, провода, машины — везде облом, кроме одного убитого ноутбука.
Иду к инженеру в соседнее здание, прошу осциллограф. Получаю отказ: «Это единственный осциллограф с памятью, он мне тут нужен». Не беда! Приношу версию программы с максимально подробным ведением логов, цепляюсь осциллографом на вход микрухи датчика, запускаю, медитирую... Порт открывается, бит чётности становится в 1, идёт адрес, идёт команда, порт закрывается. В логах все солнечно: судя по ним, бит чётности перед отправкой команды таки 0, а вот судя по осциллографу — 1. Естественно, датчик команду не воспринимает. Я больше верю осциллографу. Спрашиваю у гугла, форумов и знакомых спецов — ответа нет.
Нервы, психологическое давление со стороны инженера, ожидание Нового года на работе... На третий воскуривания даташита Super-IO-чипа, установленного на «волшебном» ноутбуке, всё становится ясно. Микруха на моей и других новых мамках по каким-то причинам не успевает переключить чётность, а на древнем ноуте успевает благодаря врожденной тормознутости последнего. Загадочным образом при этом API на обеих машинах сообщает, что все переключилось. Вставляю в код задержку в 1 мс — датчик радостно мигает индикаторами на любых компах!
Читайте мануалы. В них сила.
#1364: Пингвин против пингвина
15:00 22.10.2009, IT happens
Два раза с большим перерывом и в разных группах я наблюдал «линуксовые войны».
Война первая состоялось, когда я еще был несмышлёным школием. На информатике нас припахали ставить линукс на все машины в классе — про Ghost и прочий мирроринг учитель слыхом не слыхивал. Рутовый пароль был везде одинаков. Суть игры была простой: выключи машину противника раньше, чем он выключит твою. Атаковали, зайдя по SSH на чужую машину и сказав системе shutdown -h now. Блицкриг-вариант (halt) мы выучили позже. Была и возможность уйти в глухую оборону: init 1 с отключением сети.