BZIK.INFO
[ bzik анекдоты ] [ bzik афоризмы ] [ bzik истории ] [ bzik башизмы ] [ bzik ИТ истории ] [ bzik тосты ]
[ bzik неразобранное ] [ bzik прислать свежий ]
BZIK.INFO





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



Дело в том, что мой дом находится в недавно построенном коттеджном посёлке. Конечно, тут работает и 3G, и 4G, и мобильники — но всё-таки это не сравнить с быстрым интернетом по оптике или витой паре.



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



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








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



Материнка, уже лишённая покровов, лежит на столе. Плавно вставляю в слот двухгигабайтную палку DDR3. Аккуратно снимаю заглушку со слота процессора. Достаю из упаковки новенький Core i3, нежно ставлю его на место и уверенно защёлкиваю фиксатор: сейчас начнётся! Тюбик без опознавательных знаков тонким слоем размазывает по процессору поблёскивающую термопасту, излишки мажу на радиатор кулера. Аккуратно, но уверенно вставляю защёлки кулера в отверстия платы. Кулер закреплён, материнка готова. Я бережно помещаю её в корпус, подрагивающими от волнения руками закручиваю винты. Подключение питания и разъёмов — особое удовольствие. Их много, входят с небольшим усилием, но сидят прекрасно!



Винчестер нехотя позволил себя вкрутить и подключить. Сейчас станет горячо! Подключена периферия и загрузочная флешка. У кнопки питания фантастический звук щелчка.



Тихонько зашуршали кулеры… На мониторе пробежала серая полоска, вспыхнул «витраж», синенький диалог на синем фоне — о да! А пока дистриб распаковывается, можно и покурить… Как же приятно собирать новую машинку, пускай и офисную минималку!



Люди, я нормальный? Это лечится? Или стоит всё же нормальный прон сквозь отвращение смотреть?








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



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



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



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



Незнание об автоматическом приведении типов в используемом языке (скорее всего, C). Функция det() может возвращать значение не double, а более ёмкого типа, который компилятор приводит в double при присвоении в double и, наоборот, до которого расширит double при сравнении. С учётом этого факта никаких странностей в приведённом коде нет вообще — всё вполне логично. Перед тем как кидаться с обвинениями в адрес разработчиков компилятора, стоило открыть определение функции det() и посмотреть на тип результата, потом внимательно почитать описание стандарта языка программирования и сравнить реализацию на соответствие; наконец, почитать описание компилятора на тему особенностей реализации на той или иной аппаратной платформе и возможных отклонений от стандартов.



Морали в этой истории две.



Первая: не выпендривайтесь с применением того, что вы толком не понимаете. Вместо ускорения вы можете получить торможение, а задачу при этом так и не решите.



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








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



Понимание такой причёски пришло, когда мы выехали устранять последствия КЗ на 10-киловаттной линии. Причины были неясны, на линии пусто и сухо. Зашли в будку, дверь ветром благополучно прикрыло, но мы работаем. Всё проверили, ключ на старт — есть напряжение. Направляемся к выходу — и вдруг ор Андрюхи:



— Стоять, #& вашу мать!



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



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








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



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



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



На застывший в воздухе и всё-таки озвученный позже вопрос: «Чёрт подери, как, как у тебя это получается?! Это же почти невозможно!» я мысленно махнул рукой, попытался что-то невнятно объяснить, а потом просто промолчал.



Спасибо тебе, Bucky O’Hare, за невероятное и безумно весёлое «трудное» детство!








Давеча один бригадир монтажников рассказал замечательную историю про феерический джамшутинг. Не могу не поделиться.



Итак, имеется некий объект строительства, где присутствует длинный коридор. В коридоре монтируют фальшпотолок типа «Армстронг», все трассы идут за ним. Опуски к розеткам и выключателям — в штробах в стенах. Много ли на тот коридор надо — пара проходных выключателей да пяток розеток для пылесосов.



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



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



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



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



Вот захочешь повторить — не получится. Впрочем, лучше не повторять…








Купил я два с половиной года назад часы швейцарской фирмы «Тиссо». Хорошие очень и не слишком дешёвые. За год и десять месяцев отстали менее чем на минуту. Потом у них села батарейка, но её заменили по гарантии в сервисном центре бесплатно. Прошло ещё четыре месяца, гарантийный срок кончился (два года), и начались чудеса.



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



Товарищи, будьте бдительны! Карманы с магнитными застёжками применяются всё шире и шире и вполне способны потратить вам нервов и денег.








Зачастили в последнее время обзвонщики из компаний-провайдеров, предлагающие перейти к ним. Откуда узнали мой номер — неизвестно, но по один-два звонка за день получал с вопросами на тему: «А почему вы не подключились ещё к нам? У нас же такие тарифы хорошие…»



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



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



День четвёртый. 11 утра. У меня было хорошее настроение, до работы оставалось ещё несколько часов, как вдруг я услышал звонок мобильного. На экране отчётливо высвечивалось: «Провайдер такой-то. Не брать!». Взял трубку:



— Алло.



— Алло, здравствуйте, — услышал я приятный девичий голос. — Провайдер такой-то. Уделите мне, пожалуйста, пару минут.



— Слушаю.



— Мы проводим опрос. Вы довольны своим интернетом?



Зная чуть ли не наизусть весь дальнейший диалог, я, будучи в игривом настроении, решил пустить его в другое русло:



— Простите, — ответил я. — Разговоры про интернет — это скучно. Давайте лучше поговорим о вас. Как вас зовут?



— Ирина… — робко ответила она.



— Ирина. Какое красивое имя. А что на вас сейчас надето?



Помолчав секунды три, девушка бросила трубку.



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



В этот день было пять звонков. На следующий — два. А ещё через день звонков уже не было вовсе.



Самым неприятным было вести этот диалог, когда на той стороне трубки оказался парень. Молчали мы оба минуты две после кульминационного вопроса. Потом трубку бросил я.



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








Вздумалось кому-то (не мне) проверять, что матрица между вычислениями не поменялась. Проверять решил просто: считал определитель, сохранял значение и в нужный для проверки момент вычислял определитель опять. Если определитель не изменился, то можно спать спокойно.



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



В результате отладки дохожу до такого кода:



double a = det(M);
assert(a == det(M));


Ассерт срабатывает. Ладно, добавляю строчку:



assert(det(M) == det(M));


Ассерт не срабатывает. Функция всегда возвращает одно и то же значение. Добавляю:



double diff = a - det(M);


Результат равен нулю. Причём строго нулю, посмотрел побайтово. Та-ак… Похоже, что имеем вещественное число, в общем случае не равное самому себе. Уже интересно…



double a = det(M);
double b = det(M);
assert(a == b);


Ассерт не срабатывает. Пора в дурку…



Ларчик открывался просто. В сопроцессоре все числа обрабатываются в 10-байтовом формате, а double, как известно, 8 байт. Разработчики самого безглючного компилятора возвращали значение в голове стека сопроцессора и забыли нормализовать его до 8 байт. Нормализация происходила только в случае сохранения значения в переменной. Хвост в 2 байта добавлял несколько знаков к мантиссе и вызывал все эти спецэффекты.








Приходит со сметного сотрудница. «Помоги, — говорит, — на площадку войти не могу». Ну, дело житейское. На всякий случай проверил правила на шлюзе — вдруг это я чего напортил? Вот площадка, вот ключ вставлен, жмём «Вход по ЭЦП» — ЭЦП показывает, но наличия не видит. На других то же самое.



Начал копаться в настройках — вроде всё включено. Беру тайм-аут на пять минут, иду по коридору, думаю. Мысль! Вернулся. Вытащил ключ, посмотрел более внимательно — так и есть, разъём сломан. Да так, что через прозрачный корпус видны трещины на плате. Вернул ключ владелице, объяснил ситуацию: пока ключ новый не поставите, на площадку не войдёте. Ключ пришлось заказывать новый. А всё почему? Потому что ключ, когда работал, никак себя не проявлял — нет индикатора, да и зачем он на ЭЦП, верно ведь?



Иду обратно в кабинет и думаю, что в XXI веке на ключах (да и на некоторых флешках) всего лишь наличие простого копеечного светодиода сэкономило бы много времени на диагностику проблемы.



Производитель! Экономя на таких вот мелочах, ты реально достаёшь.






ЕЩЁ БЗИКОВ!        ПРИСЛАТЬ СВОЙ!

{126} {125} {124} {123} {122} {121} {120} {119} {118} {117} {116} {115} {114} {113} {112} {111} {110} {109} {108} {107} {106} {105} {104} {103} {102} {101} {100} {99} {98} {97} {96} {95} {94} {93} {92} {91} {90} {89} {88} {87} {86} {85} {84} {83} {82} {81} {80} {79} {78} {77} {76} {75} {74} {73} {72} {71} {70} {69} {68} {67} {66} {65} {64} {63} {62} {61} {60} {59} {58} {57} {56} {55} {54} {53} {52} {51} {50} {49} {48} {47} {46} {45} {44} {43} {42} {41} {40} {39} {38} {37} {36} {35} {34} {33} {32} {31} {30} {29} {28} {27} {26} {25} {24} {23} {22} {21} {20} {19} {18} {17} {16} {15} {14} {13} {12} {11} {10} {9} {8} {7} {6} {5} {4} {3} {2} {1}




BZIK.INFO
[ bzik анекдоты ] [ bzik афоризмы ] [ bzik истории ] [ bzik башизмы ] [ bzik ИТ истории ] [ bzik тосты ]
[ bzik неразобранное ] [ bzik прислать свежий ]
BZIK.INFO

админу в мыло