Истории с тегом: факапы

Всего историй: 744

7425

Кучка с горкой

Выполнял лабораторную работу по программированию под DOS (чтоб не забывать историю, наверное) на старом компиляторе, который в прогу добавляет проверку на присваивание нулевому указателю. Начали появляться сообщения об этом ошибочном присваивании. Для локализации ошибки закомментировал часть кода. Всего осталось примерно 800 строк кода на C++, в которых могла быть ошибка. Перечитал весь код, исправил пару ошибок. Ошибка пропала. Начал убирать комментарии — появилась опять. Ясно, что где-то глюк с указателем, и на ход выполнения программы влияет её размер. Ещё два раза перечитал весь код, нарыл пару мест, где можно было бы добавить проверки. Ошибка осталась. Под отладчиком в режиме ассемблера начал изучать код. Узнал подробности работы конструкторов и деструкторов классов, начал исследовать структуру хипа…

А потом что-то дёрнуло меня посмотреть, какого размера файл. 70 КБ при модели памяти в один сегмент. Код + данные + стек + хип > 64 КБ. А компилятор хоть бы предупредил…

Программисты, не забывайте русскую пословицу: «Доверяй, но проверяй».

7402

Что русскому download, то немцу upload

Было это ещё тогда, когда интернет оплачивался по трафику. Безлимитные тарифы уже были, но скорости их на офис в сотню машин не хватало ну никак. Так вот, в какой-то момент счета за трафик выросли в полтора, а потом и во все два с половиной раза за несколько месяцев. Мы всем отделом сначала отбрыкивались от бухгалтерии, списывая на всевозможные естественные причины потребления гигабайтов: вышли новые сервис-паки на Windows, или дополнительный офис что-то выкачивал с основного, или кэш на прокси-сервере переполнился, или, в конце концов, смешной ролик на Ютюбе прошёлся по офису, или… Но в какой-то момент решили всё-таки разобраться, потому что счета стали приближаться к числу с пятью нулями.

Проверили журналы WSUS. Убедились, что все компьютеры смотрят на него, а не качают обновки самостоятельно. Приостановили загрузку новых заплаток. Позакрывали соцсети, файлообменники и видеохостинги. Проверили конфигурацию и статистику на прокси — выяснили, что скачано фиг да маленько. Поругались недельку с провайдером, поискали ошибку в их биллинге. Не нашли. Снимали статистику через NetFlow со всего офиса.

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

Во внутренней сети у нас имелся FTP-сервер, опубликованный наружу, для обмена большими файлами с заказчиками. С открытым доступом, чтобы заказчики не задавали глупых вопросов. Какие-то засранцы сервер обнаружили и облюбовали, сливая туда всякий крупногабаритный варез. А через NetFlow сервер не нашли, потому что на нём же расположена основная конторская файлопомойка, и для неё много трафика — это норма. Хотелось долго биться головой об стену.

7382

Поверь, дело не в тебе

Устроился админом. Пока оформлялся, половина рабочего дня уже прошла. Прихожу в серверную. На полу лежит какой-то системник, собранный из остатков списанного оборудования. К нему подключён монитор от сервера. На экране «Press any key»: при загрузке не прошла проверка доступного оборудования. Какой-то мужик (позже оказавшийся водителем) смотрит на эту надпись, нажимает одну клавишу, вторую, третью… На экране всё та же надпись. Он начинает нервничать, уже долбит по целым комбинациям. В числе нажатых кнопок на клавиатуре была и Power off. По-прежнему никакой реакции на экране.

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

Сервер стоял под Windows 2000, рабочий стол не был залочен, а клавиатуру переставить мужик не догадался.

7380

Бобровые плотины и кротовые мосты

Работаю в интеграторе, устанавливаю и сопровождаю различные решения в области Networking & Security. По роду службы общаться с конечными пользователями мне не приходится — Бог миловал.

Поставил весьма уважаемому и крупному клиенту брандмауэр. Через некоторое время начались проблемы:

— Пользователи в зоне вайфая получают через DHCP адреса внутренней сети!

Ну, думаю, где-то забыл проброс bootp выключить — ан нет.

— С устройством всё в порядке. Пришлите мне топологию вашей сети.

Из-за сети этого быть не может, я проверял!

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

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

— А мне знакомый сказал, что это решит все мои проблемы!

И в Европе есть свои юзвери.

7377

Я не рекламщик, я партнёр!

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

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

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

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

Продолжаю ломать голову. Это что ж получается, даже не хочет исполняться вполне обязательный код? Услужливо найденная Гуглом информация на заданную тему сообщает, что всё я пишу, как надо, и всё должно работать. Уже хочется протяжно петь: «Why?!», словно траурный хор в песне Бреговича — Игги Попа «In The Deathcar». На часах уже больше десяти вечера, прямой эфир матча «Металлист — Галатасарай» безнадёжно пропущен, и тут меня осеняет: может, это расширения Мозиллы?

Первым делом мучается NoScript, но эффекта это не приносит. Потом обновляется всё до последних версий, но и тут результаты тщетны. Наконец-то я догадываюсь глянуть на список заблокированного упомянутым выше AdBlock. По известным лишь ему алгоритмам (небось, из какой рассылки взял) в самый низ блокировочного списка, отработавшего на данной странице, он поместил любые вызовы со словом partner.

7368

IL happens

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

На одном из репортов софтина вдруг начала умирать, выжирая всю память. Тестеры три дня искали и обнаружили, что в одном из полей одной из таблиц есть значение «Wheelchair user», и если его поменять на «abc», то всё работает. Кто, блин, запрограммировал ненависть к людям с ограниченными возможностями? Стали пробовать разные варианты. Выяснилось, что «Wheelchair u» всё ещё падает, а вот «Wheelchai u» уже работает. Пошёл запускать локально — out of memory error. Нашёл метод. А там перед циклом, в котором и происходит переполнение, стоит коммент:

// FIXME: Infinite looping happens

7346

Метод прерванного транзакционного акта

Торговая сеть, принимая кредитки через Сбербанк, решила принимать ещё и локальные карты банка «X». Конфигурация: кассовое ПО — DOS; ПО Сбера и банка «X» — DOS-модуль на кассе и Windows-сервер в ЛВС.

Для исключения случайностей были устроены тесты. Диалог кассового ПО с программным комплексом банка «X» во время крэш-теста изрядно повеселил. Восстановлено по логам ККМ и процессинга.

Кассовое ПО — DOS-модулю: «Провести покупку на сумму 50000 руб. по карте N!»

DOS-модуль — Windows-серверу: «Провести покупку на сумму 50000 руб. по карте N!»

Windows-сервер — процессингу: «Провести покупку на сумму 50000 руб. по карте N!»

Транзакция идёт около трёх секунд, и у нас есть время вытащить RJ-45 из кассы.

Процессинг — Windows-серверу: «ОК!»

Windows-сервер, поместив в свой буфер «ОК», DOS-модулю: «ОК!.. Эй, кассовый модуль! ОК, я тебе говорю!»

Касса молчит.

Windows-сервер — процессингу: «Отменить покупку на сумму 50000 руб по карте N!»

Процессинг — Windows-серверу: «ОК!»

И тут мы втыкаем RJ-45 обратно в кассу.

DOS-модуль (читает из буфера Windows-сервера): «Оплата — ОК!»

DOS-модуль — кассовой программе: «Оплата — ОК!»

Кассовая программа печатает чеки и слипы. Покупательница уходит с товаром и при своих деньгах.

DOS-модуль (читает из буфера Windows-сервера): «Отмена предыдущей операции — ОК!»

DOS-модуль — Windows-серверу: «Какая ещё операция? Что-то с буфером у тебя не то. Очистить буфер!»

Три раза проверили (главное в результате — воспроизводимость). Хорошо, что сервисы, висящие на тестовых портах, снимают с карты лишь тестовые рублики…

7311

Плохо ловится рыбка-бананка

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

Задействовал давно пылившуюся в слоте сетевуху. Сетевуха чихает, кашляет и время от времени флудит по UDP на рандомный адрес рандомною фигнёй в огромном количестве, DoS’я саму себя и окружающих, а если рандомный адрес оказался внешним, то ещё и файрвол. По сети сервер доступен урывками; команды пишу в аське и быстро копипащу, когда SSH удаётся ненадолго пробиться. Еле вырубил. Как такое вообще может быть — полнейшее ХЗ.

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

7300

С юзерским рылом в калашный ряд

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

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

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

Кореец скачивает дистрибутив на рабочий стол, а он не запускается: у наших пользователей нет прав на запуск из профиля. С умным (наверное) видом пытается скопировать файл в корень диска C:, чтобы получить права «Создатель/владелец» — а вот хрен ему: нашим пользователям нельзя ничего создавать в корне системного диска, только в своём профиле. Копирует на второй диск — с него тоже не запускается.

Сжалился я над корейцем и дал права на запуск того файла. Запускает. Программа требует права админа для установки. Запускаю дистрибутив от имени администратора и устанавливаю. Не всё так просто: дебильная программа устанавливается в профиль администратора, включая все ярлыки. Перетаскиваю установленные файлы и ярлыки из администраторского в пользовательский профиль, копаюсь в настройках, меняю пути, а программе пофиг: не запускается, и всё тут. Завелось только после того, как я дал пользователю права админа, сделал первый запуск программы, а потом вернул старые.

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

* * *

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

7258

Семнадцать факапов весны

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

Дальше — больше. Некоего Альберта Шпеера отстранили от работы в ночную смену, указав в комментарии: «Подозревается в связях с Гитлером». Работа спорилась, геноцид шёл. Целый отдел был уволен с пометкой на немецком языке: «В газенваген».

Апогеем стало разжалование директора в завхозы, введение должности «Оберштурмбанфюрер» и принятие на неё (как вы уже наверняка догадались) Макса фон Штирлица.

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