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





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



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








Давным-давно, в далёкой галактике, фидошный регион 2:46 (Украина и Молдова) начал собираться летом в Крыму на Тарханкуте. Было это ещё на заре мобильных телефонов, то есть покрытие не просто оставляло желать лучшего, а оставляло желать.



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



В разгар этого спора из палатки вылезает заспанный товарищ и интересуется, из-за чего весь этот шухер, который не даёт ему спокойно спать. Ему объясняют. Он достаёт свою «Моторолу». Результат тот же: один «пенёк» есть, связи нет. Товарищ пожимает плечами, прикуривает сигарету, заходит по колено в море, спокойно звонит в родной город, спрашивает, как дела в семье, заодно уточняет результат матча. Выходит из моря и, не обращаясь к онемевшей толпе, отстранённо произносит: «Вообще-то я мехмат заканчивал…» — после чего лезет в палатку досыпать. Связисты пристыженно расходятся.








Рассуждение о том, кто есть хозяин,  — это, конечно, интересно. И скрипт, ищущий сам, что надо, это тоже весело. Но у этой медали есть и другая сторона.



Графический юзер:



— Так, мне надо найти файл и скопировать его. Открываю строку поиска, забиваю название. Что там было? Васяпупкин_день_рождения? Нет, это была свадьба… А, чёрт с ним, забиваю «Васяпупкин». Хм. 20 результатов. Посмотрим. А, вот, точно — Васяпупкин_именины! Правой кнопочкой на него, «копировать», открываем окошко флешки, «вставить». Mission accomplished!



Командный юзер:



— Так, мне надо найти файл и скопировать его. Запущу-ка я скрипт. Что значит «ничего не найдено»? Но ведь оно там! Так. Код скрипта. Что это за чушь? Как я мог такое написать?! Тут меняем, там меняем… Отлично. Теперь запускаем ещё раз. Так. Откуда все эти 100500 файлов?! Я же… А, чёрт, точно, условия же. Так. Опять открываю скрипт, дописываю условия. Запускаю. Вот, файлов меньше, но почему-то не копирует. Ах да, пути же не прописал. Открываем скрипт, дописываем…



И так далее, пока «послушный скрипт на побегушках» не получит именно те чёткие настройки, какие нужны.



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



Давайте будем благоразумны и не станем забивать гвозди кувалдами, а воробьёв сбивать из пушек?








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



На ремонт принесли старенький системник на nForce2. Индикатор пост-кодов показал, что на шине PCI активен сигнал Reset. Причин такому состоянию может быть очень много: от отсутствия одного из напряжений питания до убитого южного моста. Первым делом я решил исключить самый естественный источник этого сигнала, для чего отключил провода, идущие к передней панели корпуса. Оценив, что до разъёма очень неудобно будет тянуться отвёрткой, решил вернуть кнопку питания на место. На свою беду я запомнил, какой провод на какие штырьки шёл, и прочитал подписи только на материнке, причём неправильно из-за того, что они были сделаны весьма оригинальным способом.



Если бы машина не стартовала сразу после подачи питания, я бы неизбежно понял, что вместо Power вернул на место Reset, а так я посчитал, что эта проверка выполнена, и продолжил диагностику.



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



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



Дальше по плану мероприятий должна была следовать проверка на отвал BGA-пайки процессорного сокета и чипсетов, но материнка, будучи запитанной вне корпуса, нормально запустилась. Проверив, что умеренная деформация никак не влияет на работоспособность, я решил, что какой то из выводов на обратной стороне платы упёрся в корпус. Для проверки этой гипотезы я постелил в корпус пару листов бумаги и закрутил материнку на место. При подаче питания машина опять стартанула сама и вывела сообщение о сброшенных настройках BIOS (наверно, успели сброситься, пока я вытаскивал батарейку для проверки). Что-то меня дёрнуло подключить провода передней панели при работающей машине. На этот раз надписи на материнке я прочитал правильно, и при подключении кнопки Reset машина перезагрузилась и ушла в ступор, как раньше. Стоило выдернуть злополучный разъём, как машина опять пошла грузиться. Тут-то я всё и понял…



Кнопка оказалась поломана довольно подлым образом: в ненажатом состоянии звонилась на 3 кОм.








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




В тридевятом царстве, в тридесятом государстве жили-были, не тужили, по-английски говорили Кен Томпсон и Деннис Ритчи. Но наскучила им басурманская речь, и придумали они новый язык. Да так ловко, что целые армии программистов по белу свету восприняли язык, как родной. Появились и проповедники языка С, и его адепты, и даже отдельные секты со своими священными сводами законов и правил, аки секта поклонников С++ во главе с Бьёрном Страуструпом. Но в основе своей все они жили по одному канону, установленному основоположниками языка.



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



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



И да, неявное преобразование типов в С/С++, к которому надо относиться очень внимательно — страшная вещь, особенно когда пишутся кроссплатформенные приложения. Не зря в одной толстой священной книге от Страуструпа этому вопросу отведена чуть ли не целая глава.








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



Работаю в новой компании почти месяц. Когда устроился, в части офиса был ещё ремонт, все коммуникации провели до меня, и я, понадеявшись на благоразумность моего предшественника, особо сильно не вдавался в подробности. Ну, работает — и нехай работает. Настал день, когда ремонт был завершён. Приходят ко мне и говорят: «Надо бы нам главного акционера в его новый кабинет перевезти». Ну, не вопрос. Делов-то — компик из одного кабинета в другой, проводок туда, проводок сюда. Все перенёс, начал подключать. И вот тут случился ужас. Розетки не подписаны. И как быть? Ни LAN-тестера, ни схемы, вообще ничего у меня нету. И возле стола розетка только одна. То есть либо подключаем телефон, либо комп. С компом долго мучиться не стал: моноблок, слава великому Туксу, оснащён модулем «вайфай». Ну, значит, розетку отведём под телефон. Съездил в магазин, купил LAN-тестер, отыскал, где же наша розетка находится в стойке, и занялся уже механической работой…



Перенёс, поставил, подключил — и вижу фигу. «Server connected» — и на этом разговор закончился.



Что я только не пытался сделать! Сначала тщательно проверил, правильно ли я всё воткнул. Да, всё верно, провода подключены как положено. Втыкаю провод с тестером в розетку, в стойке ответка. Линк есть. Втыкаю в телефон… «Server connected» — и тишина.



Чем чёрт не шутит — может, когда телефон отключил, настройки сбились? Ну, разные чудеса бывали в моей практике. Полез в консоль АТС — всё тип-топ! Только пишет, что аппарат не подключён.



Окей, видимо, настройки телефона. Просматриваю настройки такого же аппарата, стоящего в переговорной. Делаю по аналогии — ни фига.



Тут мне в голову приходит шальная мысль: а что, если дело в проводе от аппарата до розетки? Достаю, вставляю в тестер — работает! Всё, что приходит на ум, это только потанцевать вокруг с бубном и вознести хвалу всем богам. Возвращаюсь к себе в кабинет, устало опускаюсь в кресло… На меня заманчиво, почти соблазняя, смотрит новенький телефонный проводок. А почему бы и нет? Попытка — не пытка. Хватаю его, бегу подключаю, включаю питалово аппарата… Победа — оно работает! Проверяю старый провод через тестер. Работает! Голова отказывается понимать, в чём разница. Начинаю внимательно осматривать провод и понимаю, в чём зарылась причина. Проводок перебился. Когда его распрямляешь, коннект есть, когда сгибаешь, чтобы засунуть в аппарат, коннект пропадает…



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








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








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



Случилось мне заниматься разработкой программного комплекса, один из компонентов которого вертелся в MySQL. При этом всю логику взаимодействия с БД я по возможности перенёс в хранимые процедуры внутри БД. Возникла необходимость оптимизации одной из хранимых процедур, которая при попытке всунуть в БД жалкие 10К строк зависала на два часа. Нужно было найти узкое место этой процедуры. Поиск «бутылочного горлышка» довольно прост: засекаем, сколько миллисекунд уходит на каждый шаг, смотрим, где проблема…



Проблема нашлась гораздо раньше: СУБД категорически отказалась выдавать нам информацию о миллисекундах. Даже под пытками. И даже с Гуглом. При этом информации в интернете было на удивление мало; у меня даже закралось страшное подозрение, которое со временем окрепло, что народ свои базы вообще не оптимизирует. В конце концов Гугл раскололся и выдал ссылку на точное описание проблемы… в багрепорте разработчиков. Читая добросовестное описание проблемы, я испытывал невероятное умиление: моя ситуация один в один! Сейчас дочитаю до ответа разрабов, пойму, где я дурак, всё сделаю как надо… Ответ разрабов был как ушат холодной воды: «Да. Такая проблема существует. MySQL не умеет возвращать миллисекунды».



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



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



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



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



Кстати, в результате оптимизации я довольно много узнал о внутренней логике MySQL, встроенных в него инструментах отладки и оптимизации и всерьёз зауважал его разработчиков. Временные таблицы, индексы, JOIN вместо вложенных SELECT — и время внесения 10K строк сократилось с двух часов до трёх минут.








Здесь очень много историй про хороших и плохих бухгалтеров, монтажников, программистов, админов, юзеров и начальников. А мне достался главный инженер… Если честно, после каждой планёрки хочется взять тетрадку и записать его перлы и безумные идеи. И этот случай явно займёт достойное место.



Надеюсь, все помнят прикол с мухами на Яндексе первого апреля этого года? С утра пораньше раздаётся звонок с приказом моментально «починить компьютер от вирусов». Бегу через три этажа, вижу на экране рой мух, невозмутимо выбираю мухобойку и ставлю рекорд: десять крылатых за шесть секунд. Сканирование завершено, все угрозы размазаны!






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

{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

админу в мыло