5365

Это исключено

Недавно друг попросил посмотреть кое-какую программу на Паскале по теме «геометрия на плоскости». Сел ковырялся и обнаружил ужасное выражение:

if (A and B) or (not (A) and not(B))

then writeln('...');

Когда я сказал, что условие можно выразить через XOR, друг изрёк гениальную фразу:

— А нам в школе сказали, что мы XOR не знаем.

5364

Источник бесперебойного интернета

Дома периодически пропадает инет, поставляемый по сетям КТВ. В очередной раз после часа без сети звоню в техподдержку:

— Нет инета по такому-то адресу.

— Сколько лампочек на модеме мигает? Телик работает?

— Мигают две правые, телик пашет.

— Отсоедините все кабели от модема, включая питание, подождите пятнадцать минут и включите. Если не заработает — позвоните и оставьте заявочку.

(подавляя хохот) Простите, а почему именно пятнадцать?

— Ну, чтоб не десять. Там конденсаторы — пока разрядятся…

Дальше я говорить не смог. Поблагодарил, пожелал удачи, ничего, естественно, не отключал. Ещё через часик инет появился.

5362

Весь в напряжении

Не знаю, то ли обидел ли я чем свой компьютер, то ли законы физики всё это подстроили, но произошла со мной давеча такая история.

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

Через полчаса мышь отваливается вновь. Лезу за корпус, снова получаю разряд и с удивлением наблюдаю нормально функционирующую мышь. Так и пошло дело: раз в полчаса мышь отваливается, я глажу корпус, получаю разряд, мышь оживает, работа продолжается. Через несколько часов, разумеется, мне это надоело, поэтому я воспользовался альтернативой по имени PS/2. Но комп, видимо, решил не сдаваться без боя.

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

Страшно предположить, от какой комплектующей в следующий раз я получу разряд. А вообще мораль простая: заземляйтесь!

5361

О бесполезной красоте сложных решений

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

По закону Мёрфи под «семёркой» устройство не запустилось. Ладно, попробуем из-под пингвинов. Зря я так ядро оптимизировал! Модем юзается только как кардридер. Подумал и запустил соединение с сетью из-под винды, которая коннектится к прокси на виртуалке с ХР, настроенной из-под линукса, к которой по виртуальному USB-порту подключён модем.

К концу пятичасовой настройки я вспомнил, что в трёх минутах ходьбы от дома есть кафе с вайфаем.

5360

Инверсионный след быдлокодера

Привет! Я тот самый быдлокодер. Судя по всему, я разбудил нехилый флейм со стороны обиженных тру-программеров, и все бросились поучать, как надо писать код. Смешно. Во-первых, это одна из основных отличительных черт тру-программеров: с пафосом учить других. Заметьте, я не учил, а констатировал факты. Ну, а во-вторых… Поехали по пунктам.

Человек — девайс аналоговый. При обработке информации оным девайсом часть информации замещается белым шумом. То есть косяки и баги будут всегда, пока нам не вставят чипы вместо мозгов, и никуда от этого не денешься. Поэтому рассказы о том, что 25-летний программер нашёл 40-летнюю багу, ничего удивительного не содержат. За каждым программистом остаётся след, как за сбитым самолётом, только из багов.

Специальная математическая подготовка не спасает. Скажите, какого хрена учить рекурсии на примере факториала? Это красиво только математически. После такого обучения любая тривиальная задача решается рекурсивно с переполнением стека и прочими прелестями.

Если быдлокод — это непонятный, слабо логичный, замусоренный лишним и ненадёжный код, то любая программа рано или поздно переходит в эту категорию. Меняются требования, задачи, программисты, дописываются костыли и так далее. Нет кода, кроме быдлокода, а быдлокодер — отец его.

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

Наконец, вопрос «как писать код?» лишён смысла: программер, как правило, имеет дело с уже написанным кодом. Солдат в бою живёт три минуты, а на марше — несколько часов, поэтому в уставе армии США маршам уделено в несколько раз больше места. Прагматично.

Вот и выходит, что (по крайней мере для меня) единственный способ не писать фигню — не писать вообще. А если писать — то по минимуму, тупо до дебилизма и исключая «творческую и эстетическую составляющую». То есть писать как автомат, ремесленник, чернорабочий. Быдлокодер.

5358

Стопроцентный русский

К сожалению, если при установке Убунту с Alternate CD выбрать русский язык системы и только русскую раскладку, то в ходе инсталляции английский будет, а при первой же загрузке никакого варианта, кроме русского языка, не останется, и войти в систему будет невозможно.

Именно в таком «абсолютно русифицированном» состоянии я застал больше пятнадцати машин в родной конторе в один прекрасный день прошлого года. Рядом в состоянии, близком к помешательству, сидел свеженанятый помощник админа. Парень решил показать, какой он хороший и легкообучаемый, и вечерком накануне установил Убунту на технику для 20 новых рабочих мест. Надо заметить, что это был его первый опыт установки линукса вообще. Записал он 20 копий Alt-CD, почти синхронно поставил систему на все машины и решил проверить. Обнаружил «глюк», переустановил начисто — и ещё раз, и, наверное, ещё… Каждый раз он, ориентируясь на опыт инсталляции винды, упорно выбирал русские язык и раскладку. Поскольку пользователей с русскими именами создавать было строго запрещено, выхода «герой» не видел.

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

Парень, вероятно, будет помнить эту особенность Убунту до конца жизни, а остальные из техотдела запомнили надолго: над чужой бедой смеяться нехорошо. Минут пятнадцать сдерживаться, равно как и работать, не было ни малейшей возможности.

5357

Первичный профессиональный признак

— У меня принтер наконец заработал, — делится радостью дизайнерша, вернувшись от админов. — Раньше мне его ставил мальчик без бороды, а сейчас другой, с бородой, и принтер заработал!

Даже юзеры признают силу бороды.

5356

На заборе тоже написано

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

Хард-ресет, вход в настройки контроллера, стук сердца: зеркала больше нет. Какой-то шутник перепутал номера дисков на корзине и подписал их наоборот. В итоге из работающего зеркала сперва вывели штатно один диск, а затем выдернули второй на живую…

История завершилась удачно, но с чужой маркировкой я теперь осторожен.

5353

Утеря военно-морским способом

Я не Настоящий Одмин. Об этом мне сообщили свалившиеся на голову «коллеги», но обо всём по порядку.

Жила-была наша конторка, один из многих филиалов в нашем городе. 70 человек персонала, в основном бухи и юристы, и один админ — я. Потом Большие Боссы решили свести несколько филиалов в одну контору побольше, сняли шестиэтажное офисное здание и начали туда всех подселять. Соответственно, я дружно влился в общий отдел IT. Вот тут всё и началось.

Оказалось, что Настоящий Одмин ни под каким соусом не признаёт этажных кроссовых и готов глотку перегрызть проектировщикам СКС, лишь бы они завели ему все коммуникации в серверную. И плевать, что до самых дальних узлов более 100 метров, а провод — самый паршивый из возможных категории 5е.

Настоящий Одмин никогда не опустится до знания других операционных систем, ведь всё можно решить творениями дядюшки Билли. А я, значит, просто лошара, раз настраивал файлопомойку на «фре» и прикручивал туда сетевую корзину, ведь если пользователи потеряли файл военно-морским способом, значит, это их проблемы, а если сам Большой Начальник это сделал, то не грех сервак остановить и анделитом побегать. А под шлюз надо заказывать непременно двухпроцессорный сервак с 8 ГБ ОЗУ и четырьмя банками по 2 ТБ, ведь на нём будут крутиться Керио и 2003-й сервер, а «фрибздя» — выбор лопухов вроде меня.

Настоящий Одмин никогда не объясняет пользователям причину неисправности или сбоя и уж тем более никогда не унижается до объяснения этих самых причин на пальцах.

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

Настоящий Одмин никогда не потратит свободное время на доводку серверов, ведь это время можно потратить на «квейк» и «контру».

Настоящий Одмин никогда не разбирается в проблемах, главное — отвести всё от себя. И если компьютер теряет сетевой адрес из-за криво настроенного DHCP, то в этом виноват, конечно же, цисковод, который «всё не так настроил».

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

Настоящий Одмин никогда не приходит на работу раньше 10:30 и не уходит домой позже 15:30 — и пусть рабочий день с 9:00 до 18:00. А если вдруг что-то необходимо сделать с серверами, то пользователи потерпят, ведь Настоящий Одмин соизволил заняться делом.

* * *

Как же хорошо, что я не Настоящий Одмин, что мы живём в разных виланах, что приказом по предприятию я закреплён за своими 70 пользователями и четырьмя серверами, два из которых на лоховском FreeBSD. Почему-то мне совсем не хочется становиться Настоящим Одмином.

5350

Летите, плывите, ползите

Давным-давно прикручивал по заданию руководителя к сайту целителя-шарлатана форму обратной связи и первое время модерировал входящие письма. У целителя на все вопросы ответ был один: если вы ходячий, приходите, мол, вылечу. Как-то наткнулся на письмо: «Уважаемый Анатолий ***ович! Если вы ходячий, идите на х#й!»