5792

Червивые киви

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

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

5791

Белая бумажная горячка

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

На третьей копии по комнате разошёлся устойчивый аромат спирта. Зашедшие в комнату родственники, морщась от запаха, обнаружили меня рядом с бутылкой водки напротив принтера, который увлечённо выплёвывал белые листы.

5790

И незаряженный false стреляет

Работаю в совершенно замечательной конторе, занимающейся веб-разработкой на базе коммерческой CMS на букву «Б». Понадобилось нам создать дополнительную примочку к административной панели. Важную миссию доверили вашему покорному слуге.

— А вот такой-то вариант вызова функции может быть? — поинтересовался я, когда продумывал алгоритм.

— Нет, что ты! Согласно концепции проекта такое невозможно. У нас всё будет по-другому, — ответил мне senior developer, сидящий за соседним столом.

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

Прошло три недели. Сижу, ковыряюсь в коде, и тут справа от меня раздаётся проникнутый удивлением вопль на весь офис:

— Что это?!

Подлетаю к «сеньору» и вижу на экране открытую админку, где вместо полей с данными для заполнения виднеется заветное сообщение об ошибке: «Горшочек, не вари!»

5789

Новое слово в интерьерном дизайне: фигурное выкидывание

Вышла (и сразу попала в мои руки) TES IV: Oblivion — любой фанат серии поймёт мою радость. Купила я в игре домик, накопила на мебель. Встал вопрос: а как расставить всякие бутылочки-баночки-скляночки? Без предметов, с пустыми полками и столами домик терял львиную долю обаяния.

Что поделаешь, в каких вьетнамских подземельях кулхацкеры не пропадали? Начался длительный процесс выкидывания предметов из инвентаря рядом со столами и полками. Длился он два или три дня; в итоге я получила:

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

— книжный шкаф, заполненный фолиантами (правда, они лежали горизонтально, но это было уже не принципиально);

— полку на кухне с расставленной в лучших традициях советских стенок посудой — всё идеально ровно и приятно глазу.

Стоит ли повторять слова, произнесённые мной в изрядном количестве, когда в прошлую субботу подруга показала мне волшебную клавишу «Z»?

5787

Chaotic/Lawful

Ставим систему наблюдения на удалённом объекте.

Утро. Генеральный директор объекта:

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

Вечер. Старший смены охраны объекта:

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

5786

Задницей с разворота

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

5785

И носом крутит

Есть у меня квартира просторная, сервер на лоджии и, естественно, кот. Куда же без кота? Одним прекрасным летним днём примерно в десять вечера я решил посмотреть фильм и лечь спать. Ушёл готовить попкорн, а пока ходил, открыл балконную дверь — жарковато стало. Прихожу, сажусь на диван, пульт от телевизора в руки, сеть, и…

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

5784

Ну-ка мечи файлы на стол

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

— Открывайте в терминале «Мой компьютер».

— Открыла.

— Есть ли там в списке сетевых дисков ваш диск C:?

— Не-е-ет, нету. Но есть какой-то диск C: на «Крейзи».

— Это не ваш ли?

— Не знаю.

— Откройте этот диск, посмотрите, ваши ли папки с файлами там лежат?

— Нет, знакомого ничего нет.

Ладно, выходим из сеанса. Смотрим имя удалённого компьютера — Crazy.

— Это же ваш компьютер!

— Ну не знаю, молодой человек, вот если б вы мне его рабочий стол показали — я бы сразу узнала!

5783

Игра в свои ворота

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

Будучи обычным студентом обычного вуза, мой брат Саша помимо обычных студенческих увлечений уважал две вещи: программирование и хоккей. Именно поэтому в качестве обязательной для любого студента халтуры была выбрана полставочная должность инженера-системотехника в местном ледовом дворце. Да, в нашем уездном городке была своя хоккейная команда (назовём её «ГазМяс»), которая играла хоть и не на высшем уровне, но с довольно стабильной периодичностью занимала призовые места в своём дивизионе. Тренер «ГазМяса», дядя Вася, пользовался огромным уважением в кругах болельщиков.

Сашкина работа была довольно творческой и в основном заключалась в лечении внезапно глюкнувшего электронного оборудования. Особенно любимым занятием на рабочем месте была пляска с бубном вокруг электронного табло. Монохромная светодиодная панель через пень-колоду была подключена к гордости завхоза ледового дворца, старенькому 286-му с 640 килобайтами памяти и 30-мегабайтным винчестером. Работой табло управляла писанная на Сях программка, сопровождение которой передавалось по наследству от одного инженера-системотехника к другому. Жил мой брат да не тужил, но в один прекрасный день пришёл домой сильно пьяным, а наутро подал заявление об уходе. О причинах такого поступка он рассказал мне только через десять с лишним лет, и то после очень хорошего количества совместно принятого на грудь алкоголя.

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

Идея была простой и гениальной. Большинство очков «ГазМяс» терял, лидируя в конце матча с разницей в одну шайбу и пропуская гол за несколько секунд до конца встречи. Соответственно, если как-нибудь уменьшить время игры, то и вероятность неблагоприятного исхода была бы меньше. Помимо судьи-хронометриста, контрольный секундомер которого благополучно пылился в ящике стола, единственным источником точного времени было пресловутое табло. Идея Саши заключалась в следующем: модифицировать табло так, что если «ГазМяс» ведёт, то смена секунд происходила бы не через одну секунду реального времени, а приблизительно через 0,9 секунды. Разница для человеческого глаза во время игры практически незаметная, но для игры — довольно критическая.

В программу было внесено следующее условие:

for (i=0; i<2; i++) { // Мы не знаем, в каком порядке команды будут на табло

if (startswith(lower(team[i]), "газмяс") { // Пусть мелочь из «ГазМяса-2» тоже порадуется

teamindex = i;

}

}

if (score[teamindex] > score[1 - teamindex]) {

quantifier = 0.9;

} else {

quantifier = 1;

}

Изменения были успешно протестированы на второй команде. Наступил день рождения уважаемого тренера, по совпадению ставший и днём очередного матча «ГазМяса». Саша, предвкушая радость дяди Васи вечером, отправился сдавать последний экзамен сессии. Только вот препод попался на редкость въедливый, и освободиться брату удалось только часов в восемь, аккурат к окончанию третьего периода. В нетерпении он зашёл на трибуну и обомлел. «ГазМяс» проигрывал одну шайбу, до конца игры оставалось десять секунд. Вбрасывание, пас назад, к левому борту, в центр, бросок… Шайба вошла в ворота соперника «ГазМяса» на мгновение позже сирены. Судья покачал головой и развёл руки в стороны, показывая, что взятие ворот засчитано не будет. Сашка посмотрел на табло. Местный «ГазМяс» встречался с «ГазМясом» из другого города. Украденной десятой доли секунды не хватило до ничьей.

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

5782

Ископаемые чудеса

Есть и в наше время люди, которые о памяти не забывают. Игра в 56 байтах и компилятор в 20 — это, конечно, хорошо, но вот использует ли их кто-то реально?

Есть такой человек — Ричард Хипп, дай ему Бог здоровья и долгих лет жизни. Он знаменит созданием БД SQLite. Конечно, она занимает несколько больше — двести с чем-то КБ в архиве. Но в эти килобайты втиснута полноценная система управления базами данных с поддержкой SQL-синтаксиса, агрегатных функций, запросов с переменными и многого прочего. Используется SQLite кучей крупных компаний по всему миру.

Другой продукт Хиппа — система контроля версий Fossil. В архиве — полмегабайта, один файл. В этот файл влезает собственно система контроля версий, баг-трекер, вики-движок, а заодно и веб-сервер. Каждый раз, когда я использую эту систему, задумываюсь: как это всё удалось туда запихать? Любая из этих систем от других производителей в установочном файле будет занимать десятки метров. Может, этот загадочный файл изнутри больше, чем снаружи?