На днях поставил на пробу новый комплексный антивирус с андроидом на логотипе. При установке ткнул галку на поиске нежелательного ПО. Очень удивился, запустив быстрое сканирование и увидев «угрозы», которые нашёл этот терминатор. Два установочника ему не понравились: первый, видимо, пропагандировал алкоголизм, а второй противоречил христианскому мировоззрению авторов антивируса, сажая в систему демона.
Спроси о море у рыбака
В силу своей профессиональной деятельности пришлось писать инжектор текстового слоя в PDF. Задачка проста: есть PDF, состоящий из сканов страниц; под эти картинки надо подложить распознанный текст, чтобы поиск работал.
Первым этапом надо было написать парсер PDF. Скачали спецификацию и набрали тестовую базу — аж 200 тысяч PDF-файлов. Итог всей этой опупеи был таков: 30–35% тестовой базы не соответствует спецификации PDF, но 95% открывается в Adobe Reader без проблем. Поэтому парсер писали не по спецификации, а по результатам тестов. Если Ридер открыл, то и мы должны открыть. Почему? А ты объясни юзеру, что данный файл не соответствует пункту 5.5.7 спецификации PDF 1.6. И так каждому юзеру по каждому файлу 100500 раз в день.
После этой задачки стали играть c открытием PDF на других ОС. Что делать — продукт кроссплатформенный. Под маком Preview валился как раз на генерации превью-картинки на корейском PDF, а под юниксом Ghost давал очаровательные психоделические разводы на всю страницу, если файл содержал картинки в формате JPEG-2000 и кодеке JasPer. И это не всё, а только что, что вспоминается на раз.
«О море надо спрашивать у рыбака», — гласит японская мудрость. То есть у тех, кто в теме. Таки вот: на сегодняшний день PDF-файл — это то, что открывает Adobe Reader, RTF — то, что открывает Word, а HTML — то, что открывается в IE и Firefox. 40% интернет-страниц, кстати, имеют несбалансированные теги и, по идее, не должны открываться в принципе. Поэтому ничего удивительного, что человек из недавней истории справился cо своим PDF только на винде. Смешно как раз морали про PDF читать.
Установить мозги?
Пригласили починить бук.
— Что не работает?
— Ничего! — отвечает хозяйка машинки.
Тут я понимаю, что пользователь от силы год пользуется ноутбуком, причём это первый компьютер в её жизни. На расспросы, что же именно не работает и как это проявляется, ответ один: компьютер куплен «для учёбы».
Хозяйка просит переустановить ось. На машинке крутится банальная «семёрка» и пара антивирей с Яндекс-барами и шестью защитниками с оптимизаторами. Вычищаю хлам, накатываю новые драйвера и попутно спрашиваю, что ещё установить: городской справочник, скайп, прочие плюшки?
— Я не знаю, что нужно. У меня был Пайнт, он был красивый, а тут некрасивый. Сделайте мне Пайнт!
Я подвисаю. Добивает фраза:
— Я не хочу учиться на нём работать! Сделайте мне кнопку, чтоб нажать — и работало сразу.
Затем хозяйка замучала вопросами: дескать, хочет новый ноутбук, чтобы «учиться», только ей не нравится, что приходится часто переустанавливать программы.
— Это же из-за того, что я с собой его постоянно ношу?
Я поинтересовался: зачем покупали ноутбук «для учёбы», если не хочется учиться? Ответа так и не дождался.
Цвет отчаяния
Разрабатываемую нами программу внедрили в некой конторе. Всё было замечательно, пока в конторе не обновили технику. Закупили чуть больше десятка абсолютно одинаковых компьютеров с Windows 98, а потом позвонили и сказали, что наша программа виснет.
Приехали, стали разбираться. В ходе опроса выяснилось, что речь идёт только об одном-единственном компьютере из новых. Оказалось, дело было в цвете!
В нашей программе есть возможность настраивать в таблицах выделение строк цветом фона и шрифта в зависимости от различных условий. И вот клиенты для одной комбинации (кстати, достаточно редко встречающейся) назначили цвет. При появлении этого цвета (с точностью до бита в RGB) на мониторе винда висла наглухо. Проблему решала замена видеокарты, но проще было слегка изменить цвет.
Показан постельно-онлайновый режим
Утро. В офисе интернет-провайдера проверяется автоответчик и входящие SMS. Одно из сообщений:
%useraddress% приболел.
И его продолжение:
Через пару дней проплачу.
Добавили кредит: у абонента уважительная причина просрочки.
Неисповедимы глюки софтверны
Используем в качестве корпоративного мессенджера Миранду и Openfire в качестве сервера. Настроен LDAP, пользователи по группам тянутся из AD. Всё красиво и беспроблемно.
Но вот у одного из пользователей внезапно перестала проходить авторизация и подключение к серверу. Обычно это лечится перелогиниванием в систему, но не в этот раз. Подключиться не получалось даже с админской учётки, но с другой машины этот пользователь успешно выходил в сеть. И переустановка клиента с удалением локального профиля, и рестарт сервера не помогли. Когда варианты кончились, решено было выдать человеку Миранду через Remote App с ближайшего терминального сервера до выяснения причин.
Спустя некоторое время эта проблема постигла уже мой собственный рабочий комп. Никакие танцы с бубном не помогали, и очевидных причин для возникновения, казалось, не было. Плюнул и переустановил систему: давно хотел мигрировать с x86 на x64. Всё сразу заработало, и я был почти счастлив до тех пор, пока по поручению бухгалтерии не взялся обновить ЭЦПшки для электронной отчётности. После очередной перезагрузки нарвался на пустоту в списке контактов и невозможность подключения к серверу.
Начал прикидывать, кто бы мог наслать на меня порчу. Свежеустановленной системе меньше недели, ничто не предвещало беды. В процессе вспомнил, что до последней перезагрузки я установил КриптоПро — довольно старенькую, но честно купленную. Как она может влиять на работу протокола XMPP, неясно. Ради проверки теории удалил, перезагрузился — всё работает! Решил проверить: может, в новой версии проблемы не будет? Никаких упоминаний беглый поиск не выдал. Попутно вспомнил проблему пользователя, с которого всё началось. Обновил — всё заработало.
После этого случая я начал серьёзнее воспринимать советы вида «машина не едет — попинайте по колесу».
Мастер-ломастер
Попросила меня мама починить ей электрогрелку: около четырехпозиционного ползункового переключателя интенсивности нагрева переломился провод питания. Разобрал я переключатель, а оттуда детальки повыпрыгивали. Советский инженер спроектировал мозаику контактных площадок на платке, по которой ползунком двигаются медные пружинящие полоски, а под самим ползунком шарики — фиксаторы положений. Провод я обрезал, зачистил, припаял. Стал собирать это чудо обратно — не встают детальки на места! Медные полоски перекашивает, пока крышку прикладываю.
Вроде получилось с пятнадцатого раза. Завинтил, стал ползунок двигать — туго идёт ползунок, застревает. Разобрал опять — мама родная, платка с контактами пополам переломилась! Прессованный пластик двадцатилетней давности. Ладно, думаю, соберу как есть, крепление там жёсткое, может, прокатит.
Собрал опять. Ползунок двигается как надо: легко, со щелчками. Пошёл на лоджию в розетку воткнуть, чтобы проверить. На лоджии жена цветочки ковыряет. Ползунок на ноль. Воткнул в сеть. Ползунок на единицу — должен пойти слабый нагрев. Ждать долго — ползунок на тройку… Сильный хлопок, красивое пламя сантиметров на пятнадцать из пластиковых щёлок.
Через три секунды горе-грелка была обесточена. Испарились медные полоски с контактными площадками, зато пробки даже не успело вышибить. Вонища, чёрный оплавленный пластик. Будет у мамы новая грелка.
Казалось бы, при чём тут IT? Просто следующим в очереди на починку был нетбук жены с похожей неисправностью: отошёл контакт в штекере блока питания. Тут я ей и говорю:
— Давай теперь тебе нетбук ремонтировать!
* * *
С нетбуком всё в порядке, как и с наушниками дочки, которые чинил после. А мораль известная: будешь ремонтировать старьё — одно починишь, другое сломаешь. Иногда не стоит времени. Но я-то хоть развлёкся.
В темноте, да не в обиде
— Зайду к тебе сегодня, поможешь собрать комп?
Приятель делал первые шаги в освоении PC, но уже сподобился на некоторый апгрейд. Окей, договорились.
Мы развернули все винты, разложили железяки и открыли пиво. Тут погас свет. Во всём районе.
— Тащи свечи!
Свечи нашлись. В их тусклом мерцании почти вслепую вовсю шла сборка высокотехнологичного железа.
Собрали. Электричество ещё не появилось. Заканчивался XX век.
Кома клизмами не лечится
Был в департаменте соцзащиты по делам, а там терминал, выдававший талоны, проглючило: не талоны выдаёт, а сообщение об ошибке. Толпа народа стоит и не может попасть на приём. Местная работница попыталась реанимировать аппарат вручную, даже бумагу от усердия сменила — ноль эффекта. Кома, как говорится, клизмами не лечится. Ушла.
Кто-то удалённо открыл менеджер процессов Windows, подтвердив мою догадку, почему Бобик сдох. Убили какой-то процесс, запустили одноимённую программу, перезапустили связь с сервером, явилась на свет консоль, побежали надписи — красота… Только результата нет как нет, а время-то идёт, а дела-то стоят. Со скуки сообщил сотрудникам, что если на их технике «хрюша», то она скоро как таковая вымрет — поддержка скоро заканчивается. А другую Windows железо и не потянуть может, да и вообще, в Германии, к примеру, на линукс переходят — и правильно делают. В общем, завёл светский разговор — время-то убить надо. В ответ меня вежливо послали… в кабинет, куда мне и было нужно. Сказали, что туда никого всё равно нет, может, и примут, а талон постфактум возьмётся, если терминал воскресят.
Приняли, попросили подождать минут пятнадцать, покуда оформят нужные документы. В итоге починили систему, голос из динамиков начал вызывать клиентов по кабинетам, только, видимо, глюк был и со звуком: вместо «Клиент номер X, пройдите в кабинет Y!» звучало: «Ент номер X, пройдите в кабинет Y!» А я сидел в ожидании бумаг и представлял себе толпы пронумерованных энтов, расходящихся по кабинетам…
Ну что ещё?
Мне 17 лет. Недавно участвовал в школьном туре всероссийской олимпиады по программированию. В этом году впервые экспериментируют с полностью автоматизированным способом проверки работ (то есть живые проверяльщики вообще не привлекаются, вся ответственность ложится на могучие плечи серверов). Процесс проверки таков: кидаешь на сайт исходник, он там компилируется и кормится заготовленными входными данными (20 разных вариантов).
Вся олимпиада состоит из четырёх заданий. Пишу на C++. Всё решил, заливаю на сайт — ошибка: «Превышено время компиляции». Странно. Пробую отправить исходник, сохранённый в другой среде. «Превышено время компиляции». Решаю ради прикола попробовать прикрепить собранный бинарник (чушь, конечно, но просто уже не знал, что делать). «Превышено время компиляции», твою мать!
Когда наконец дошло, в чём тут дело, полусонные родители сбежались посмотреть, что случилось: я ржал, как полоумный. Оказалось вот что: я по привычке в конце каждого сорца наставил пустых приглашений на ввод (типа cin.get()). У бедного компилятора был ступор: что ещё от него хотят?
В итоге написал на 380 баллов из 400, долго радовался.