Как известно, доблестным защитникам Родины ещё на первом году службы прививается экстра-смекалка. Мы, разобрав здоровый конденсатор, добыли приличное количество фольги, а в Ленкомнате чуток попортили деревянный стенд и сняли несколько круглых реек. Тщательно произведя замеры, мы сколотили антенну из реек и обернули в несколько слоёв фольгой.
Антена обеспечила довольно качественный по тем времена прием и узкую диаграмму направленности. Жаль, что прослужила не так долго — телевизор конфисковали при внеочередном шмоне.
#1429: До встречи в следующей жизни
12:00 13.11.2009, IT happens
У нас в фирме стояла файлопомойка под управлением Windows Server 2008. Операционка эта при каждой перезагрузке или выключении выводит навязчивое окно с просьбой описать причину, иначе же вырубаться отказывается.
Однажды я осознал, что без громоздкой винды помоечке было бы легче дышать, и собрался поменять операционку на бесплатную FreeNAS. Так вот, когда я, уже засунув болванку в дисковод, стал в последний раз выключать виндовый сервак, вылезло то самое окошко.
Что писать? Жалко винду, стыдно за своё неподобающее поведение. Я решил пойти на компромисс с совестью и ввёл: «Когда-нибудь установлю снова...»
#1430: Индийская гигиена
12:00 13.11.2009, IT happens
Фиксили как-то баг в одной программе. Делали ее какие-то индусы для забугорного заказчика, а нам досталась поддержка.
Структура программы была такова: имелось несколько форм, каждая с меню. По выбору пункта меню пользователь переходил на новую форму или возвращался на предыдущую. Прототип формы имел четыре основных метода: конструктор/деструктор и колбеки входа/выхода. Когда пользователь уходил «вглубь», формы не удалялись, а складывались в линейный стек, поскольку по задумке юзеру всё равно придётся через них возвращаться. Удаление форм и их ресурсов происходило при возврате назад по удалению из стека.
Баг заключался в том, что на одной из форм, если ее пройти несколько раз, меню увеличивалось, наполняясь дублирующимися пунктами. Оказалось, наполнение этого меню происходило не единожды, в конструкторе (как и везде по проекту), а каждый раз при заходе в форму. Я перенёс несколько строк — заработало на ура.
Решил позвать старшего по отделу, сурового программера, чтобы он тоже подивился индийской мудрости. Он полистал код, позадавал много общих вопросов и молвил:
— Возвращаем как было, а по событию выхода просто очищаем меню.
— Да тут во всём проекте именно так! Меню по-любому очистится, когда форма из стека уйдет.
— Не знаю, как разработчики этой программы, но лично я подтираюсь после того, как сходил в туалет, а не перед тем, как сходить куда-либо ещё.
Это окончательно развеяло сомнения о вариантах фикса и означало многодневную переделку всех форм по проекту. В итоге заказчик сказал отдельное спасибо нашей команде за проделанную оптимизацию.
#1431: Терминатор 3G
12:00 13.11.2009, IT happens
Недавно пересматривал всех «Терминаторов» и в третьей части нашёл киноляп. В самом начале, когда T-X только достала машину, она звонит по мобильнику на некий модемный пул. Слышен знакомый каждому звук коннекта и шипение передаваемых данных. На следующих кадрах глазами T-X видим, как быстро загружаются картинки и какие-то анкеты из базы данных — десятки картинок с описаниями...
Во-первых, я, как связист, экспериментировавший с коллегами по работе с GSM-шлюзами и читавший форумы по этому вопросу, знаю, что по GSM-звонку, в отличие от обычного телефонного звонка, установить модемное соединение почти нереально. Операторы искусственно режут частоту установления коннекта модема или факса, чтобы клиент покупал эту услугу за отдельные деньги. Во-вторых, если эта услуга подключена, то модемный коннект идёт не просто в голосовом тракте — сигнализация транслируется в каком-то отдельном канале, что позволяет избежать ошибок. В-третьих, эти самые ошибки почти неизбежны, даже если оператор не режет частоту и соединение удаётся установить: в отличие от обычной телефонии при GSM-звонке голос нещадно сжимают, в результате чего и тоны сигнализации, и DTMF-сигналы с клавиатуры в тональном наборе до того конца доходят в грязном виде, с дребезгом.
Так вот, если верить ребятам с форума, при таком раскладе скорость передачи данных не должна превышать 1–2 кбит/с из-за многочисленных ошибок и сильного сжатия, даже если удалось дозвониться и начать что-то передавать. А ведь T-X в фильме использовала не модемную электронику, а шипела исходящими данными через микрофон мобильника, да и шум машин мешал — она ведь за рулём была. Но даже на максимальной для обычного модема скорости — 56 кбит/с — не вышло бы так быстро загрузить кучу картинок и текста, как показано в фильме.
Так-то, киношники, учите матчасть!
#1432: 80x25
12:00 14.11.2009, IT happens
В школьные годы я частенько участвовал в холиварах «FAR против Total Commander». Мне всегда больше нравился FAR, но у «Тотала» тоже было довольно много сторонников. В конечном счете оказалось, что без плагинов пользоваться невозможно ни тем, ни другим, а многие плагины совместимы. Получается, что в общем-то разницы никакой, а дело сводится к разнице в GUI. Однако произошел-таки один случай, в котором FAR мне помог, а сторонники «Тотала» спасовали.
Дело было во времена Windows 98. Как-то раз, объясняя знакомому, как настраивается разрешение, я поставил такие параметры, которые мой монитор заведомо не выдерживал, и нажал кнопку «Применить»:
— Смотри, если ты что-то сделаешь не так, то через 10 секунд...
Ни через 10 секунд, ни через минуту картинка не появилась. Я нажал Reset, надеясь, что настройки висят где-нибудь в памяти. Комп загрузился, но разрешение осталось неизменным — экран продожал издевательски показывать табличку «No signal». Я перезагрузился в безопасный режим — 640х480, обратно — всё как раньше.
Решение проблемы нашлось само собой. Как наиболее часто запускаемое приложение, FAR висел на хоткее. Жму комбинацию, открывается окошко. Правда, я этого не вижу, но какое мне дело до такой мелочи? Alt+Enter, и файл-менеджер переходит в полноэкранный режим, в котором разрешение от настроек системы не зависит. Я нашел файл с описанием реестра, открыл его по F3, нашел нужный ключик, скопировал параметр, закрыл редактор, открыл плагин для правки реестра, внёс изменения и запустил перезагрузку, после которой все заработало.