bash.im ithappens.me zadolba.li

Базы данных

1192

Два часа в позиции «Декомпиляция ядра»

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

Буквально через день в процессе доработки этого класса появилось желание вынести позиции полей данных в этой строке в константы во избежание появления ошибок в дальнейшем. Был выбран простой синтаксис: *Position обозначало позицию поля данных в строке, а *Length — её длину. Например, birthDatePosition и birthDateLength — всё просто и понятно.

Только по прошествии получаса до меня наконец дошло, что речь-то идёт о разборе данных о человеке. Теперь невиннейшие константы sexPosition и sexLength в коде навевают определённые мысли о собственном моральном облике.

1125

Неудачная маскировка и настоящая любовь

Будучи на старших курсах института, попала я на практику в одну фирму. Начальница отдела кадров превратно поняла смысл фразы «кафедра вычислительных машин» и направила меня к сметчикам. Опыта у меня было мало, поэтому меня посадили набирать «рыбы», которые опытные сметчики доводили до ума. Печатаю я быстро и легко «обеспечивала работой» аж трёх старших сметчиков: все женского пола, за 40, с компьютерами дружат, как я с переборкой автомобильного двигателя, то есть совсем никак.

Разумеется, дамы иногда вызывали своего компьютерщика. И так уж случилось, что он мне понравился. Он не был красавцем, но был обаятельным, воспитанным, неплохо, а главное, аккуратно одевался: отутюженный костюм-тройка, галстук, надраенные до блеска туфли. Айтишник всегда приходил на работу с гладко выбритой головой и приятно пах одеколоном, причём, в отличие от многих мужчин, он не «поливался парфюмом из тазика», а знал меру. Что ещё понравилось — он очень вежливо и обстоятельно объяснял причины возникновения ошибок и методику их устранения. Это помогало, только вот большая часть проблем шла от программы, написанной для сметчиков. А править ее ему не разрешали — дескать, «сторонний проект, на гарантии».

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

— Вот. Мышка. Не работает.

Админ хмыкнул, проверяя емкость мышиного аккумулятора и силу сигнала:

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

На второй день я «случайно» нажала F1, сидя в программе сметчиков. Та выдала «непонятное окно», на что я не преминула пожаловаться. Действительно, по какой-то странной прихоти программистов, практически каждое окно имело свой список горячих клавиш (как вам сохранение через Shift+F5 в одном окне и через Alt+F12 в другом?), а F1 вызывал не справку, а набор поправочных коэффициентов, корректировку концовок или выбор вида работ в зависимости от активного окна. Мало того, окно по Alt+F4 не закрывалось, «крестика» не было — надо было жать Enter на «нумпаде». Пришёл айтишник, я выпучила глаза в мольбе и беспомощно пропищала, тыкая пальчиком в монитор: «И-и-и…»

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

— Завтра меня не будет, я еду за оборудованием. Так что милые дамы, я был бы вам очень признателен, если бы завтрашний день прошёл без эксцессов.

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

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

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

Друзья потом долго шутили, что я вышла за него замуж только для того, чтоб понять, где же я прокололась?

1059

Сам шучу — сам смеюсь

Пришел однажды заказ: написать БД с web-интерфейсом для использования на нескольких машинах по локальной сети. Работа была выполнена, осталось установить систему у заказчика. Приезжаю, вливаю дампы, настраиваю конфиги — на серваке всё работает! Ну думаю, всё отлично.

Открываю браузер на клиентской машине, вбиваю IP сервера — не работает... Три часа танцев с бубном результатов не принесли: я и брандмауэр отключал, и винду обновлял, и от вирусов лечил.

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

Зачем?!
— Ну так... Развлекался.

980

Андеграунд-бухгалтерия

Недавно почувствовал себя настоящим Шерлоком Холмсом. Работаю в IT-отделе достаточно крупной конторы, устроился недавно одновременно с напарником. Решили провести инвентаризацию всего барахла, что на нас свалилось — начали, естественно, с серверов. По бумажкам их 23 штуки, все пингуются. Лезем в серверную, начинаем маркировать и находим только 22. Не хватает BSD'шного сервака с редко используемыми, но очень ценными базами данных. Чешем репу, спрашиваем у своих — никто не знает. Идём к начальству, получаем телефоны предыдущих админов — те говорят, что с проблемой знакомы, но этот сервак они так и не нашли. Вы его, мол, не трогайте, авось пронесёт.

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

Постепенно начинает доходить, что сервер подключен вайфаем. Начинаем проверять точки доступа — бинго! Сервак коннектится через точку, находящуюся в офисе площадью 300 кв. м. Ну, думаем, дело за малым. Выпили по этому делу и отправились искать. Осмотрели всё: потолки, сейфы, сортиры, простучали стены. Нашли местного электрика, угостили водкой и подключили к поискам. По пьяни появилась идея вырубить все компы и послушать. Обползали весь офис с кружками у уха — пусто. Посмотрели спецификацию точки — шарашит на 75 метров, с учётом стен выходит примерно 40–50. Электрик притащил схему помещений, на которой мы циркулем обозначили круг поисков. Пошли прочёсывать по второму разу.

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

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

971

Зелёный змий, истребляющий баги

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

С утра Костян был обнаружен за компом. Он сидел, держась за больную голову, и бубнил себе под нос одну фразу: «Как же я это написал?..»

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

966

Брутфорс и здравый смысл

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

Собственно, принципиальное отличие нового софта было лишь в формате БД. Контроллер в нём не определялся, но сигналы входа/выхода и ID карточки давал исправно. Я решил поправить таблицы вручную, благо, они были в формате Access, но столкнулся с проблемой — база была запаролена.

Тут же скачал несколько ломалок паролей «на попробовать». Как водится, утилиты заявляли: «Пароль я подобрала, купите меня, и я вам его скажу». Естественно, платить 20–30–80 единиц СКВ я никому не собирался, да и не пришлось — одна из программ добродушно выдала три первых знака пароля и 9 звездочек после, доказывая свою полезность и предлагая заплатить за остаток.

Выглядел пароль так: «1qa*********». Надеюсь, не надо объяснять, как я достроил его до полного?

965

В Советской России Гугл ищет вас!

Работаю веб-программером — делаем разнообразные сайтики и интернет-магазины. Очередной клиент попросил, чтобы к сайту была прикручена статистика от Google. Я прикрутил, а до кучи поставил сайт в очередь на индексирование.

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

Прошло некоторое время. В аську стучится админ сервера компании-заказчика: «Твой проект грузит на 103% процессор MySQL-сервера!»

Где-то час выясняли, что не так, и только потом сообразили посмотреть в логи. Выяснилось, что умный Google-бот без проблем отыскал поисковую страницу сайта и стал рекурсивно насиловать проект, отыскивая ключевые слова в результатах поиска по результатам поиска...

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

963

Не смешите начальника СБ, он лопнет

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

Как-то сидим, админим наши сервера. Работа достаточно скучная, так как настроены они по всем «фэн-шуям» и вероятность факапа минимальна. Внезапно сонное лицо руководителя группы администрирования Unix-систем, оживает, и он помпезно изрекает: «%Adminname%, я считаю, что употребление слов „жопа“ и „косяк“ неприемлемо при постановке служебного задания».

Через минуту хохота %Adminname%, Oracle-админ, начинает оправдываться, что он скопировал в задачу кусок из своих ночных записей — в них было отмечено, что старт инстанса Oracle с такими-то параметрами и с использованием такого-то массива приводит к жопе с производительностью, и это явно косяк в Solaris!

945

Профессиональный синхронизатор БД

В 2002 году я работал автоматизатором в городском отделении пенсионного фонда. Где-то в апреле пришла из Москвы БД с данными пенсионеров-участников войны с графической оболочкой на Visual FoxPro. Задача: открыть в одном окне эту оболочку, в другом — нашу пенсионную базу и сверить данные по всем имеющимся пенсионерам: ФИО, адрес и ещё около тридцати пунктов.

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

Посмотрев на этот кошмар, я понял, что задача проста: надо лишь вытащить из нашей основной БД (благо, тоже написанной на FoxPro) необходимые данные по этим пенсионерам и поместить их в столичную базу. За пару часов пишу программку, дампящую из одной базы нужные поля и заливающие их в другую. Через двадцать минут, когда винчестер перестаёт шуршать, открываю московскую оболочку — всё отлично!

Отдаю работу начальству со словами: «Давайте остальным отделениям мой скрипт отправим, чего они зря мучаться будут?» В ответ получаю гневную тираду о том, чтобы и мыслей таких не было — ни в коем случае нельзя никому рассказывать о том, как у нас всё быстро получилось.

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