#11092: Капиллярам некуда спешить
12:15 19.06.2013, IT happens
Упросил один раз клиент включить его мегасеть на два компа по воздушке эзернетом. Бригаду-то он никогда бы не упросил, а начальство как-то поддалось на уговоры. Ну, технически всё укладывается. 80 метров строительной длины. Бойцы матюкаются, но кидают.
— Куда включать-то будем?
— А можно прямо в свитч?
— Легко.
И бригада вонзила кабель в древний то ли Compex, то ли C-Net на 16 портов.
Спустя полгода, весной, этот клиент утром звонит: интернету нету. Вечером бригада у него. Порт сгорел. Ну, есть ещё 13 свободных. Кабель пересовывается. Всё работает.
Через месяц — то же самое. По тому же сценарию. И ещё. И ещё. Выяснили, что после грозы или дождя дохнет 100%, но спустя день-два. Поставили грозозащиту на всякий случай. Не помогло.
Спустя полгода в свитче осталось два или три порта. И тут по накатанному: утром не работает, вечером бригада — произошёл сбой. В момент звонка этого клиента я оказался в двух шагах от его здания, и ресепшн меня припряг. Добираюсь до свитча.
— А откуда, — спрашиваю, — лужа вокруг свитча на полу? Уборщица не вытерла?
— Нет, мы тут сами убираемся. Нам уборщица не по карману. Но уже неделю не убирались.
Беру свитч, а из него вода выливается. Вытряс остатки. Беру в руку кабель — тяжёлый такой. Мацаю его, а из разъёма вода. Ох ты ж ёжик! Помацал кабель ещё. Выдоил ещё грамм пятьдесят водицы. Больше нет вроде. Втыкаю в новый порт. Всё работает.
Назавтра приезжаем с бригадой. Монтажники скачут по кабелю. Находят. На спуске с крыши жестянкой порезан, и водица в дождик туда точненько заливается. Потом сутки «фитилит» до разъёма, заливает порт, а к приезду бригады успевает высохнуть.
Дальше — как обычно. Синяя изолента. Дополнительный дюбель. Устранение контакта с жестью. Клиент на оставшихся портах ещё года два проработал и сгинул.
#11093: Не жилец, но есть нюансы
12:15 19.06.2013, IT happens
Источниками быдлокода являются не только неопытные программеры, но и люди, прямого отношения к программированию давно не имеющие.
Отучился я на специальности «Программное обеспечение ВТ и АС», но потом подался в ремонтники железа. Полученные знания потихоньку утрачивались, а новые касались совершенно других проблем. В один прекрасный момент хорошие знакомые попросили в сжатые сроки написать диплом по специальности, на которой я учился. Тема: «Сетевая реляционная БД». Отмазаться не получилось. Так как на работу отводили неделю, об изучении чего-то нового речи быть не могло: на одну пояснительную записку и плакаты ушло бы три-четыре дня. Писать предлагалось на Delphi 6. Надо отметить, что во время моего обучения на предмете «Базы данных» мы проходили досовский FoxPro 2.6, соответственно, про SQL я только слышал, а о сетевых БД знал только то, что они есть.
Поставленная задача была выполнена. Результатом стал клиент-серверный программный комплекс. Программа-сервер открывала файл MDB через ADO и ждала запросов от клиентских приложений. Клиентские приложения общались с сервером через DirectPlay (компонент DirectX, предназначенный для простой реализации сетевых игр), используя самопальный язык запросов. Получив от клиента запрос, сервер мог искать в БД данные методами FindFirst/FindNext либо создавать новые записи из полученных данных. Все запросы попадали в некое подобие FIFO-буфера, в котором происходила «сборка» фрагментированных запросов, а также отбрасывание огрызков. Контроль доступа к базе осуществлялся методами всё того же DirectPlay. Защита от одновременного редактирования записи была реализована путём добавления специального поля в корневой таблице: если значение в нём равно единице, то запись уже кто-то редактирует.
Как ни странно, весь этот кошмар работал. Тест проводили четыре добровольца. За десять минут активной манипуляции данными сбоев не было, а для диплома больше и не надо. Диплом был сдан на отлично, так как в текст программы никто не заглядывал, а на экране всё выглядело вполне пристойно.
Самый смак был после диплома: человек, сдававший эту работу, додумался действительно внедрить её на предприятии, где проходил практику. По его словам, всё работало; единственное — иногда приходилось пользоваться интерфейсом прямого редактирования данных в серверной части программы, чтобы снимать признак редактирования записи при повисании клиента (механизм транзакций я реализовать не успел).