bash.im ithappens.me zadolba.li
5759

Три приключения за одну зарплату

22 марта 2011, 11:00

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

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

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

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

Я бы не писал, случись всё по отдельности. Но сразу — это таки слишком.

5758

Особо служебный телетайп

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

5757

Кроссплатформенный геморрой

22 марта 2011, 09:00

Довелось мне купить Zii EGG. Всё в девайсе было хорошо, да только старая прошивка мне не нравилась.

Казалось бы, что может быть проще? Сходил на официальный сайт, скачал программу (благо и виндовые, и линуксовые версии есть) и запустил. Ха! Начнём с того, что последняя свежая версия пахнет гнилью — 04.08.2010. А та, что за 23.10.2010 — это так, старьё, которое, видимо, в качестве дани истории решили приложить.

Литр кофе выпит — разобрался. Скачал всё. Пошёл второй литр. Линуксовая версия сразу отказалась ставиться — нужна какая-то библиотека. Оказалось, что пакет плохо написан, и моя верная Убунту не даст дураку чудить. Не беда: ковыряемся, ищем ошибку, исправляем, ставим. Они не понимают «д», «да», «y» как подтверждение лицензии, даже «yes» не подходит — им только «Yes» подавай. Ладно, вроде осилил, но хренушки: девайс всё так же не виден.

Пробуем «оконную» версию. Просит бибилиотеку. Точнее, не просит — просто вылетает, а что просит, это я уже потом из манов узнал. Хорошо, идём на сайт, качаем библиотеку. Библиотека — только для линукса, который, если верить манам, в этой библиотеке вообще не нуждается. Сдаюсь, думаю.

Третий литр кофе налит в чашечки и греется в ожидании расправы. Библиотека поставлена, программа-апдейтер от «окон» замочена в Wine — и понеслась! Софтина запустилась, девайс нашла, предложила обновить, скачала файлы и вылетела с ошибкой: «У вас подключено более одного Android-девайса».

Тут-то я и сдался. Буду ждать новых версий и расскажу о том, что накурят индусы.

5756

Починили, обмыли, забыли

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

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

Поднял БД с помощью хекс-редактора и такой-то матери. Читаю логи и нахожу дату, когда эта ошибка всплыла впервые: 24 декабря 2008 года.

5755

Лопата — перфоратор солдата

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

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

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

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

5754

Ноль без палочки

У всех есть свои любимые и нелюбимые браузеры; у веб-разработчиков — тем более. В исходниках городского портала я наткнулся на HTML-код:

<div class="v5-submenu">
<div class="i-hate-opera"></div>

5753

Проходите, нечего здесь смотреть

Лет десять назад в нашем городе единственным приемлемым вариантом доступа в сеть был один из дайлап-провайдеров. Тарификация была поминутной — выходило более доллара в час, совершенно неподъёмная сумма. Провайдер предоставлял и бесплатный тестовый доступ. Зайдя под логином «guest» и паролем «sci», пользователь мог подключиться, поглядеть на сайт провайдера и зайти в личный кабинет для пополнения счёта.

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

Остальное было делом техники. HTTP-прокси принимал запрос от локального браузера на открытие страницы и, заворачивая его в POST-метод, передавал PHP-скрипту на рабочем сайте. Cкрипт разворачивал запрос, выполнял его, скачивая запрошенный документ, и возвращал ответ прокси. Мелкие завитушки вроде аутентификации пользователей — и в интернете стало можно сидеть бесплатно. Идиллия омрачалась только тем, что гостевой доступ разрывался каждые десять минут, но это мелкое неудобство никак не мешало наслаждаться халявой.

5752

В неизвестность со спецэффектами

21 марта 2011, 11:00

Повадилась одна система валиться, причём в каких-то левых местах, каждый раз в новой подсистеме. А поскольку программа должна была бить рекорды надёжности (что-то там на электростанции измерять), то по шапке получили все, в чьих подсистемах были замечены падения.

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

Итак, есть подпрограмма:

1. Объявляем массив для хранения имени файла.
2. Адрес этого массива передаём в другую подпрограмму, где в него заносится имя файла, файл загружается, и с ним довольно долго работают.
3. Выходим из всех подпрограмм наверх, в главное меню.

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

Заключительный аккорд: размер массива зарезал сам начальник. Молодость программистскую, блин, вспомнил. Программа-то 16-битная была, стек, соответственно, больше 64К быть не мог. Вот и оказал нам шеф свою посильную помощь, снизив нагрузку…

5751

Brain mismatch

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

a := 5;
b := a*2 - 6;
c := b > a;

Конечно, нужно было догадаться, что c — это переменная boolean. Преподаватель с удивлением наблюдал около двадцати листов, на которых в графе ответа стояло: «Error 23. Type mismatch».