bash.im ithappens.me zadolba.li

Факапы

12556

Стопроцентный фибергласс мы спрядём для вас сейчас

Три админа под окном
Пряли оптоволокно.
Старый шредер на полу
Мирно ел картон в углу.

Кот Фортран лежал на лавке
И сметаной тихо чавкал.
Тараканы на столе
Шустро ползали во мгле.

Непростое это дело —
Пряли долго, но умело.
Не без риска окосеть
Доплели большую сеть.

Тут админы подустали
И за пивом побежали,
Придавив углы сети,
Чтоб по новой не плести.

Потекло рекою пиво
(Может, ровно, может, криво),
И админы напились
Да под лавкой улеглись.

А наутро, как поднялись,
Минералкой похмелялись.
Потому что весь рассол
Программист себе вколол.

Протрезвели — и в субботу
Снова взялись за работу.
Похватав углы сети,
Снова принялись плести.

— Стопроцентный фибергласс
Мы спрядём для вас сейчас! — 
Заявил один админ
И сказал: — Адынадын!

Два других тотчас заржали,
Волокно в руках разжали…
Нити сразу расплелись
Да на землю улеглись.

И расстроились админы,
Волокно сожгли в камине…
Шредер грустно проскрипел —
Волокна он не поел.

В тусклом свете мониторов
Шли пустые разговоры:
Как теперь дебажить код,
Если пряжа не идёт?..

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

12420

В начало константу ставить хочешь ты

Не особо давно мне надо было написать программу, суть которой в том, чтобы на основе введённых данных рассчитать некую конструкцию на заказ. Данные выводились в таблицу с последующей распечаткой на принтере.

Был там чекбокс «Монтаж». Если стоит галочка, то в таблицу вносится «Да»; если нет, то «Нет». Когда я запустил программу, то заметил, что даже если не ставить галочку, в таблицу всё равно вносится «Да».

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

Самое смешное, что за месяц до этого я читал про «условия Йоды» и подумал: «Ха-ха, тупые! Кому это надо?» Оказалось, надо. Конечно, проблема была в том, что я написал = вместо ==.

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

12358

Лавировали и выигрывали

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

Будучи ещё «малолетним школием», я обзавёлся компьютером. Это было восемь лет назад, и конфигурация была соответствующей. Однажды после продолжительного заруба в Day of Defeat с ботами компьютер внезапно отрубился. ПК был запаролен в BIOS, следовательно, игры на сегодня были окончены. Но я всё-таки решил попытать удачу и побрутить пароль, благо я примерно знал длину и символы пароля. Но компьютер не отозвался на кнопку включения ни в первый, ни в десятый раз.

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

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

Второе происшествие случилось годом позже. Я сбросил пароль биоса и научился заходить под незапароленным «Администратором», когда «User» был под паролем. Игры продолжились, но установленный Far Cry тормозил даже на минималках — как оказалось позже, из-за отсутствия PCIe-видеокарты. Но выбить деньги на новую видюху было почти нереально, и я решил рискнуть и заняться разгоном.

Pentium D уверенно держал увеличение множителя частоты с 133 до 140 без перегрева — спасибо инженерам Intel и неизвестному сборщику за это. Но когда я по ошибке набрал вместо 145  189 и применил параметры, я с удивлением увидел тактовую частоту 4 ГГц. Far Cry летал, но недолго: перегрев делал своё дело. В итоге пришлось копить на видеокарту — на процессоре много не поиграешь.

Третья оказия случилась с моим новым ПК, купленным четыре года назад. На нём в упор не работал *nix, а я пробовал поставить и Debian, и Arch, и Ubuntu, и даже FreeBSD. Никсы либо валились на запуске графической оболочки, либо сразу после GRUB. Помучившись и вволю наплясавшись с бубном, я забил на это неблагодарное дело и поставил себе Arch на виртуалку — до сих пор пользуюсь.

И четвёртая, весьма извращённая ошибка, с которой мне пришлось бороться. Решил я сыграть в MechWarrior, но столкнулся с сотнями глюков. Перепробовав все имеющиеся патчи (игра — ещё та поделка), я решил забить на игру вместе со всеми багами и развлечься в Microsoft Flight Simulator, и подключил джойстик. После игры я его не отключил, но решил напоследок зайти в MechWarrior. Ни одного глюка. Оказалось, что игра приняла мою аудиокарту за джойстик и вешалась при проигрывании определённых звуков.

Мораль:

  1. Лавировать между багами и исправлять их надо учиться с детства.

  2. Проблема сидит там, где ты её не ищешь.

  3. Самое важное: от игр — одни неприятности.

12283

Да не довиртуализировал

Приучился я работать на одном сервере сразу с консоли VMware, так как SSH-порт был закрыт. Для удобства включал полноэкранный режим.

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

12243

Ёлочка, не гори

Сижу, никого не трогаю, починяю примус. В соседней комнате жужжит комп 2009 года сборки: «корка-два» Е8500, пара гигов памяти, Радеон 4850, винт на терабайт, 450-ваттный Чифтек — и всё это в красивом акриловом корпусе. На улице собирается дождь.

Слышу краем уха, как что-то начинает трещать. Думаю, хороший дождь спустился! Чуть позже треск несколько утихает. Потом снова возобновляется, с каким-то звоном. Моргает свет, пищит упс. Решаю пройти посмотреть, что же такое происходит.

Вхожу в комнату — и наблюдаю картину открытия врат в преисподнюю: на столе в углу стоит полуоплавившийся системник с огнём над ним сантиметров в тридцать высотой, под потолком чёрная туча дыма. Пластик с компа отваливается на стол чёрными ломтями. @#$@#%$#@#$@#!

За пару минут пожар залил водой. В системнике предположительно могли уцелеть винт (несколько оплавился разъём), проц (закоптился, испытал тепловой удар, но вероятность выживания ненулевая) и кулер с передней панели; остальное спеклось и ушло в мусор. Оплавился сбоку и сзади монитор (вероятнее всего, пережил успешно); немного испорчен стол, испорчены обои и потолок, отвалилась штора и подплавился пластик на жалюзи. Ну, и сгорел и потрескался висевший над компом ночник — источник звона.

Предположительная причина сего файр-шоу — коротыш в цепях питания видяхи, который БП не почувствовал, а дальше — провода, пластик…

Сделал несколько выводов:

  1. Никогда не брать пластиковых корпусов. Только металл, только хардкор!

  2. Никогда не брать БП с большим запасом мощности без реальной на то необходимости.

  3. Завести ещё одно место для резервного копирования данных (сейчас для этих целей пыхтит сервачок, который постепенно стал несколько мощнее компа).

  4. Завести огнетушитель и задуматься о тепловых аварийных выключателях для компов (поставить в БП термопредохранители?) и датчиках дыма.

12239

Сингулярность своими руками

Создавая собственный мод к игре X²: The Threat, я задумывался над тем, что изюминкой моей модификации должны стать не только графические изыски, дотягивающие игру 2000 года до уровня почти современной графики, или, к примеру, скрипты, создающие уникальные события или миссии для игрока. Хотелось внести в игру ещё и какой-нибудь совсем уж нереальный элемент вроде черной дыры.

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

Графически планета должна выглядеть соответственно общим представлениям о прожорливом брюшке вселенной. Нарисовал в 3ds max модель — вернее, составил её из уже имеющихся в игре стандартных элементов, несколько модифицировав их размеры и список текстур. Получил вполне смачную сингулярность с тёмным ядром, аккреционным диском из пыли и падающими к ядру облаками газа. Удовлетворившись визуальным результатом, решил сразу поэкспериментировать, как это будет смотреться в игре.

Процедура внесения объектов в игру проста. Складываем модельку в папку с моделями, в INI-файле назначаем новый тип планеты (к примеру, копированием параметров взятого за основу элемента) и заменяем номер модели на свою.

Я никогда не декомпилировал ядра игр. А это возможно, и многие это делают — честь им и хвала! Мои же модификации всегда опираются больше на возможности простой подстановки или скриптового программирования.

Для внесения графических изменений и для проверки самописных скриптов в игре нет дебаггера. Или ядро воспринимает добавленную информацию, или укладывает игру.

Вот здесь я, собственно, и споткнулся. Забыл, что, в отличие от всех прочих объектов вселенной Х², помещаемых в игру по цепочке «INI-файл — сцена — модели в сцене», планеты помещаются иначе: INI-файл ссылается на головную модель самой планеты, к которой привязывается сцена, состоящая из нескольких слоёв: модели с текстурой ночных городов, полусферы тумана и ночного затенения, слоя облаков, слоя свечения атмосферы.

Процесс творения так меня завёл, что, прозевав вышеописанные обстоятельства, я внёс в INI-файл строку планеты а-ля Сатурн и задал головному элементу номер модели своей чёрной дыры. То, что к модели ещё прилагается неизвестная мне сцена, не остановило меня как экспериментатора.

Игра благополучно запустилась, проглотив изменения.

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

Неладное я заподозревал в момент создания объекта. Резкие броски корабля по крену и дифференту были обусловлены не то торможением программы, пропихивающей сбойный объект в математику ядра, не то заранее заданными создателями эффектами. Но через несколько секунд всё успокоилось. Забыв о том, что можно в другом секторе просто создать корабль или станцию игрока и за счёт внешнего контроля за собственностью осмотреть окружающее пространство, я решил сунуться туда сам. Разогнался, прошёл врата… Грандиозный «бабах» был ответом на мои изыски.

То, что клюкнула сцена, понятно. Но почему ядро игры вместо красивой сияющей сингулярности поставило по координатам просто чёрный шар, а заодно разнесло все рукотворные объекты сектора, для меня пока загадка. Однако, когда та же самая математическая сила разнесла в щепу и мой кораблик, а игра, продолжая правильно отрабатывать, вывела на экран надпись «The End» и корректно завершила работу, я вдруг вспомнил Оппенгеймера:

— Какая интересная физика!

12233

Глоток свежего воздуха

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

Я матёрый линуксоид, красноглазик со стажем. Меня не напугает полная «пересборка мира» пару раз на дню и зловещий пустынный вид рабочего стола Опенбокса после запуска иксов. Шелл — мой дом родной, компилятор заменил мне друга.

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

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

В интернетах много разных рецептов, как выделяться из толпы домохозяек и бороться с копирастией (и различными другими методами агрессии на нашего брата) более извращёнными способами. Моя паранойя в этот раз привела меня на Википедию. Решил я, значит, написать скриптик по удалению «нежелательного материала». Открываем vi, тыкаем i, #!/bin/bash — и поехали… Получился скрипт следующего содержания:

anakata@jail> cat delete_flash_cookie.sh
#!/bin/bash
# заходим к гаврикам в логово
cd ~/.macromedia/Flash_Player/
# и устраиваем травлю
rm -rf *
# тем, кто сдох не сразу, для надёжности ещё и
rm -rf .*
# домой
cd ~
# и дверь закроем
exit

У каждого уважающего себя админа в системе есть джобы, пусть даже банальный get_last_pron.sh, но есть. Суём этот костыль в крон:

mitnick@at_t> crontab -e
# раз в три часа паранойя будет отступать
0 */3 * * * /home/mitnik/evil/delete_flash_cookie.sh
# ну и на всякий, если что вдруг пойдёт не так
@reboot /home/mitnik/evil/delete_flash_cookie.sh

Ну, как-то так. Написали, забыли — обычное дело. Огромная работа проделана, ЧСВ зашкаливает — нужно срочно себя вознаградить. Иду бегать, но перед этим, чтобы совсем не думать об Агентах Смитах, долблю на клавиатуре:

stallman@macbook> cd ~/.macromedia/ && rm -rf *

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

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

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

И тут мне понадобился большой глоток свежего воздуха. Пробитая дыхалка не дала мне этого сделать, удалось только посопеть. Тот, кто внимательно читал текст скрипта, может вернуться по стеку и найти место, где тут вылетел эксепшн. Кому лень, могут просто подумать, что будет, если не найдётся директории с именем компании, которая написала движок для «Фермы». Ответ верный: мы потеряли всё, что нажито непосильным трудом. Тут вообще можно было сразу рубить от самого корня, что там уже мелочиться. Помимо отсутствия паролей наблюдалось ещё много всяких аномалий. Всё в один момент стало вести себя и выглядеть как-то по-другому.

Люди делятся на две категории: одни делают бэкапы, другие будут делать их. К счастью, не всё так плохо, и где-то в закромах на хардах у меня лежит сильно предыдущая версия всего добра. Я совсем не горюю, честно.

Мораль:

  • курите ман rsync почаще;

  • западло хранить что-то, кроме настройки и котиков, в /home;

  • git push — как почистить зубы утром, a лучше ещё перед и после еды;

  • относительные пути — это не к добру, к гадалке не ходи;

  • не только изредка читайте, что вы пишете, но и хоть немного думайте при этом.

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

Двигайтесь больше и дышите полной грудью.

12230

Видит Грека — в файле бакс

Сегодня произошло то, чего не должно было произойти. Я уничтожил все данные на своей 128-гиговой загрузочной флешке, на которой было всё, что нужно системному администратору (да и просто хорошему айтишнику). Но ещё, похоже, создал реинкарнацию патча Бармина.

Как?

Надо было удалить множество файлов с названиями типа filename$date.zip, разбросанных по множеству папок в корне флешки.

find /media/USB -type f -name "*$*" -delete

И всё. Новый патч Бармина успешно применён и работает. Хорошо хоть в /home или / не запустил.

12218

Значит, можно дунуть

Слушайте, дети картриджей и одноразовых зажигалок, сказку.

Примерно до 1991 года каждый копировальный аппарат стоял на учёте в КГБ, включая пишущие машинки, с которых в КГБ сдавался образец оттиска шрифта. И тут Горби развалил страну, и ксерокс «стало можно». Естественно, каждая конторка, особенно из зарождающейся тогда касты грантососов, захотела обзавестись ксероксом.

Тогдашний ходовой агрегат представлял собой сумрачную тумбу со стеклом А3, а то и А2, весом под центнер. Занимал стол, требовал достаточно высокой квалификации оператора, не говоря уже об обслуживании. И самое главное — никаких картриджей. Тонер отдельно. Девелопер (порошок, приваривающий тонер к бумаге) отдельно. Банки по кварте (946 грамм). Под крышечкой сбоку две горловинки, куда полагалось время от времени засыпать того и другого quantum satis. А там, в нутре, оно как-то хитро смешивалось.

После каждых десяти банок тонера надлежало делать неполную разборку и чистку. Вот на этом-то мы и погорели.

За «десятибаночное» обслуживание ксерокса нам был назначен весьма солидный гонорар. Устоять было невозможно. Внимательное чтение инструкции показало точную последовательность снятия панелей. На картинке для конченых идиотов стрелками было нарисовано, где почистить, где смазать, где протереть. Смущало лишь одно. Если инструмент part number X был обычной кисточкой, а part number Y — обычной крестовой отвёрткой, то part number Z был каким-то хитрожопым пылесосом. А меж тем использованию этого пылесоса было посвящено аж несколько абзацев. И мой опыт обслуживания больших ЭВМ подсказывал: не зря, ой, как не зря!

Но мы ж программисты, народ плечистый. Ксерокс был разобран. Созерцание внутренностей, покрытых толстым слоем тонера с девелопером, заставило нас задуматься. Десять банок, в реальности все двадцать. Это ж под миллион копий. Это ж полсантиметра грязи.

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

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

Облако жирного тонера вылетело наружу и, увлекаемое электростатикой, ринулось на новые, необжитые места. Напарник извлёк голову из ксерокса. На меня смотрел негр. На 1/16, но негр. Негр смачно отхаркался куда-то в сторону аппарата и снял очки, став похожим на грустную сову. «^&%^@&#^%&!!!» — сказала сова и грязно выругалась.

Дети, если вы засрались тонером, никогда, слышите, никогда не мойтесь горячей водой. И пол тоже не мойте. Но кто ж это знал в 1992 году?

Тонер отошёл от моих рук дня через три, от морды напарника через неделю. Одежду пришлось списать.

В том кабинете я был спустя десять лет. Линолеум всё ещё был чёрным.