bash.im ithappens.me zadolba.li

Факапы

9510

Трёп: фотохроника

5 июля 2012, 11:33

Поручили сфотографировать плакаты на телефон и отправить их по почте. Места было сотни на три кадров.

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

На третий раз решил разобраться, в чем все-таки дело. Оказывается, накануне вечером я назначил на нажатие клавиши «5» скриншот, а в перерывах между фото сидел в асе.

9507

Кто первый встал, того пакет

5 июля 2012, 11:18

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

Дома у меня три компьютера. Один из них — старенький системник, раздаёт интернет и файлопомойкой работает. А на других двух мать и брат сидят.

Как-то раз полетела у меня на сервере система. Полдня заливания образа на флешку (дисковода нет), ещё полдня установки. Сервер заработал — и тут же появилась проблема: на двух компьютерах примерно половина пакетов постоянно пропадала. Переобжимка не помогла. Стал думать, что это могло быть.

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

9420

Вспомним всё

20 июня 2012, 08:00

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

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

— А где все мои ярлыки, программы, Лотус, почта и всё остальное?

Смотрим вместе с айтишником. Действительно, что-то не так. На рабочем столе девственно, в «Пуске» девственно, Лотус делает вид, что он вообще всех присутствующих впервые видит. Сетевые диски есть, но вообще не такие, как обычно, да и не пускает на них. Ни один сетевой принтер не определяется. В общем, как-то не айс.

Айтишник пробурчал что-то насчёт того, что профиль, наверное, на домене слетел, пошёл ковыряться, потом пришёл обратно, что-то покрутил, ушёл обратно. И так полдня.

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

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

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

9333

Дискотека объявляет перекур

5 июня 2012, 10:00

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

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

9283

Чужими мозгами

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

Итак, вот он, комп, вот он, диск. А воткнуть-то диск некуда. Материнка старая — Abit NF7, SATA поддерживает только на бумаге, на плате разъёмы не распаяны. Поиски винта на замену ничего не дали — старые винты уже стали редкостью. Даже если в прайсах есть, в наличии уже нет, а время поджимает. Что ж, открываю старую кладовку, роюсь, нахожу плату расширения VIA на два SATA-порта — то, что надо!

Разочарование приходит примерно через два часа: винда ни под каким соусом не желает видеть диск, подключённый к контролеру. Поисковик подсказывает, что можно перепрошить BIOS, включив поддержку данного девайса. По трагической случайности буквально за пару месяцев до событий сайт Abit перестал существовать (самой фирмы нет уже давно). Прорвавшись сквозь кучу сомнительных сайтов, нахожу какую-то версию BIOS, вроде как выше имеющейся.

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

Уже в процессе я задумался, что если прошивка будет неудачной, рабочей версии нет. Сделать бэкап возможности не было: два файла BIOS уже не помещались на дискетку, флешку же подцепить так и не удалось.

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

Спасибо инженерам Abit — не пожалели доллар на панельку для микросхемы BIOS, в отличие от других! Осталось найти, где же можно прошить. Как назло, ни на одном доступном ПК панельки для микросхемы не было…

Оказалось, DVD-драйвы тоже имеют BIOS! И неважно, насколько привод рабочий, лишь бы определялся системой. Расковыряв около пяти различных дивидюков, нашёл внешне подходящий. В совместимости микросхем полной уверенности не было, но что я терял?

Ищу утилиту прошивки DVD-ROM, другие версии BIOS для нашей материнки — понеслась! Уж полночь близится, а результата всё нет. Восемь различных файлов — и BIOS удалось восстановить, но контроллер он по прежнему не видел.

Крутя плату в руках, обратил внимание, что она тоже имеет микросхему EEPROM. А что, если? Нет, обновить прошивку контроллера не удалось, но её можно было включить в качестве модуля в файл BIOS. Не влезает? Выкидываем встроенную awdflash.exe, заливаем наш 6421.rom и снова шьём. Уже ничего не страшно, глаза горят огнём, руки лихорадочно набивают команды.

Вот оно, вот оно, счастье: пациент открыл глаза и просит кушать! Вот тебе, родной, новый винт. Заодно починим кнопку ресета, заменим скрипящий вентилятор, добавим планку памяти, почистим, продуем. Установим новую систему вместе с последними драйверами nForce 2 — живи теперь хоть до ста лет!

9282

VxV

В выходные катался на велике. Погода хорошая, идти домой не хочется. Упал на лавочке под домом, зашёл в аську, слушаю музыку. Лепота. Чтобы было ещё веселее, прошу через аську брата подвинуть роутер к окну. Проверив браузером, что роутер добивает, я возвращаюсь в Jimm и промахиваюсь: вместо «Переподключить» попадаю на «Заблокировать».

Сижу я с сенсорной Нокией 5800 и смотрю на шикарную надпись: «Нажмите # для разблокировки». Где же я тебе решёточку возьму? Разве что пальцы скрещу.

9273

Не очень ноль

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

Моделировать пришлось связанные колебания маятников. Первый вариант программы я наскоро набросал на Delphi — для университетской конференции этого хватило. А затем была подготовка к такому же мероприятию, но уже между университетами. Поскольку времени хватало, я взялся переписать программу на FASM, заодно сохранив совместимость программы с Windows 95/98. Через несколько месяцев получилась вполне приличная 3D-модель с управлением параметрами системы, скоростью и направлением течения времени, возможностью подключать модели других физических процессов и прочими вкусняшками.

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

А полгода спустя ранним утром я, как обычно, шёл на первую пару. Мысли огромным роем носились в голове, сменяя одна другую. И вдруг я понял, в чём заключалась моя ошибка. Дождаться вечера, чтобы проверить догадку, было нелегко.

Поскольку в основном программа работала с вещественными числами, регистров общего назначения хватало с запасом. Чтобы подсократить размер экзешника, в самом начале программы я обнулял регистр EBX и использовал его везде, где это возможно, вместо константы 0. Всё тот же STDCALL этого не запрещает: вызываемые функции значение этого регистра сохраняют, так что оказалось действительно удобно. Есть только одна проблема: внутри себя функции WinAPI этот регистр активно используют, а соглашение вызова не обязывает их восстанавливать его значение перед вызовом callback-функций.

Моя ошибка оказалась в том, что в оконной процедуре (а с точки зрения User32.dll она как раз и есть callback) я забыл прописать явное обнуление EBX. На тех компьютерах, где программа работала корректно, мне просто везло: значение регистра оставалось нулевым. На остальных же системах там оказывалось ненулевое значение, которое успешно использовалось вместо всех нулей во многих процедурах программы. Одна строчка кода, два байта в экзешнике — полгода спустя они обрели своё место в коде, но было уже поздно.

Обнуляйте переменные и регистры — и будет вам счастье!

9266

Не имей сто рублей

26 мая 2012, 08:00

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

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

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

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

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

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

Собрала аналитиков. На мои вопли об ужасающей трабле один из них вспомнил, что в скрипт расчёта комиссии должны были добавить блок кода, который по префиксам валютных карт должне возвращать не 100, а 2,5. Упс… А скрипт-то на сопровождении наших программистов, а не вендорских!

Открываю код. Для Visa: если первые девять цифр равны определённым комбинациям из девяти цифр, то возвращаем 2,5. Для MasterCard: если первые девять цифр равны определённым комбинациям из восьми цифр, то тоже возвращаем 2,5. Видно, копипастнули неаккуратно.

Cтала искать в хранилище исходников, кто же такое накодил. Как выяснилось, автором изменения оказалась я же сама несколько месяцев назад. И вся королевская конница, и вся королевская рать в виде управления контроля качества не смогли этот баг поймать. Но теперь всё работает.

9233

Шапки в серверном шкафу

22 мая 2012, 08:00

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

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

Чтобы как-то убивать время, мы подсели на Team Fortress 2. После недели беспробудной игры мы нашли отличный игровой сервер: пинг был на удивление низкий. Настроен был грамотно, игралось там весело, люди были хорошие. Всё было понятно, кроме пинга в 1 мс.

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

Судя по логам Radmin, кто-то месяц назад в течение дня брутил пароль известным способом, который мы давно оперативно прикрыли на всех машинах, забыв лишь про героя истории. Затем на нашего дружка поставили Source Dedicated Server, настроили и установили удалённую веб-морду.

Уязвимость мы прикрыли, сменили пароли, поправили настройки игры, теперь играем и админим на свежеконфискованном TF2-сервере. Спасибо тебе, неизвестный человек! У нас бы до такого руки не дотянулись. Как же офигенно играть с нулевым пингом, да ещё и иметь админку с возможностью банить неугодных!