7970

Дискотека с бубном

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

Ныряю под стол, дёргаю штекер на выходе с платы, протираю пыль с системника — результат нулевой. С кабелями, разъёмами на колонках нормально. Захожу в настройки игры — и тут всё в порядке. Запускаю проигрыватель — та же беда: левая звучит, правая молчит. Неужели сама колонка или выход усилителя? Надеваю наушники (они через переходник воткнуты в тот же разъём). В левом ухе звучит, в правом — тишина. Значит, не колонка и не усилитель. Тогда либо с софтом беда, либо с самим аудиовыходом на материнке, что маловероятно: мать новая, дорогая, от хорошего производителя, из проверенного магазина. Лезу в настройки драйвера — тест показывает, что воспроизведение на канал идёт, а звука нет. Начинаю закипать.

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

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

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

7969

И айфон-то у вас китайский

Читаю интернеты в Сафари с айфона. Внезапно сайт перенаправляет меня на WAP-страничку такого содержания:

Внимание! Ваш телефон использует старую версию Opera Mini…

Ох уж эти мошенники!

7968

Ни дня без развлечений

Я до сих пор не понимаю, что это было, но оно скрасило бессонную ночь и научило меня иначе относиться к игровым конструкторам.

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

Алгоритм протестирован, выдаёт верные результаты. Остаётся скромный допилинг до практически готового скрипта. Добавляю функцию из стандартной библиотеки, запускаю программу в режиме отладки… Окно «Unexpected error occured» вместо правильных результатов. Проверяю циклы, исключаю возможность бесконечной рекурсии, тестирую заново — то же самое.

Строчку кода, добавленную перед последним тестом, нафиг в комментарий:

// output = ini_read_string('res', string(global.resource_files[argument0]), '');

Та-дам! Алгоритм работает. Синтаксис верный, типы параметров совпадают — что неладно? Убираю комментарий, заменяю функцию, передающую в параметр строку, простой строкой вида:

output = ini_read_string('res', 'untitled.jpg', '');

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

Спасибо вам, дорогие индусы-разработчики! Без вас было бы так скучно!

7967

Удел глупцов

Уважаемый как бы программист и автор истории «Как жаль»! К сожалению, я не работаю над сверхкрутыми проектами. Я вообще ещё учусь. Однако за три курса я очень хорошо усвоил, что идеальных программистов не бывает и никогда не будет. Но бывают идеальные коллективы программистов. Такие коллективы могут выполнить любую задачу, потому что каждый спокойно помогает своему коллеге.

Объяснять простые вещи нудно и глупо. Я полсеместра объяснял своему однокурснику, чем отличается UpdateData(TRUE) от UpdateData(FALSE). Глупо? Глупо. Однако теперь он так же спокойно объясняет мне элементарные вещи из электродинамики, ибо её я понять не могу.

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

Когда работаешь в команде, нельзя всех равнять под свою планку. Когда-нибудь и вы окажетесь в неудобной ситуации. Представьте, понравилось бы ли вам такое отношение?

Мне жалко не того «тоже программиста», а вас. Вы стали программистом случайно. Настоящий программист может посмотреть на себя со стороны и не кичиться своими знаниями.

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

Хочу закончить вашими же словами: «Все совпадения с реальными людьми прошу считать неслучайными».

7966

Аккорд на резистивном экране

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

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

7965

Предложение, от которого невозможно отказаться

Началось всё в пятницу. Я встретился с другом, который показал мне читалку известной фирмы. Друг сетовал на то, что решил поставить неофициальную прошивку с правами рута и прочими прелестями, но его постигла неудача, из-за чего прошивка книги откатилась с версии 2.1.1 на 2.0.6. Друг попытался заново прошить книгу, скачав файл с официального сайта, но почему-то действия строго по инструкции закончились неудачей.

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

Несмотря на то, что друг делал всё строго по инструкции, я решаю попробовать те же действия сам. Повторяю почти всё, только вкрадчивым голосом говорю девайсу: «Ты поставишь мне эту прошивку» (кто играл в Postal 2, поймёт). Чудо! Прогресс-бар начинает медленно заполняться. Другу с квадратными глазами я в спешном порядке вручаю бубен (шутки ради установленное на телефон приложение), тот начинает в него бить и, уже поняв, что надо делать, мычать что-то на одной ноте.

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

7964

На языке предков

В эпоху «пней-133» в школе был у нас некий предмет, связанный с IT. Суть практики заключалась в изучении текстового редактора Лексикон, функциональностью немногим превосходящего сегодняшний виндовый Блокнот. Учительница (дама лет 35—40) с упорством, достойным лучшего применения, вталкивала нам в головы, что Лексикон является квинтэссенцией средств создания и форматирования текста, я же прилюдно гнул линию на Word 6.0, чем жутко её раздражал.

Занятия выглядели следующим образом: минут 30 нам объясняли очередную чудо-функцию, после чего всем раздавали по абзацу текста, который надо было набрать и оформить. Дошло дело до таблиц. В Лексиконе это выглядело так: курсор перемещался по экрану «стрелочками» клавы, оставляя за собой линию, обозначающую границы таблицы или её ячеек. Правда, весело? Я, как обычно, возмутился этому варварству, за что был наказан. Всем раздали таблички 2×2, мне же выдали таблицу где-то 30×7 с объединёнными ячейками. Сделав гадость, училка с гордым видом покинула класс, и под сочувствующие взгляды одноклассников я приступил к делу.

Стоило прожить этот день, чтобы минут эдак через семь сдать вернувшейся училке готовое задание! Ларчик открывался просто: я залез в излюбленный Word, создал таблицу, подформатировал её и полез в настройку сохранения файлов. Конечно же, возможность сохранить в формате TXT (единственно приемлимом для Лексикона) там была.

7963

SCADA, спаси и сохрани

Был у нас заказ на автоматизацию реконструкции цементного завода. А пока шла разработка софта, заводчане решили без автоматики запуститься. Запустились. А через пару месяцев авария: цементный фильтр упал. Цементный фильтр — это такая огромная дура на ножках высотой метра три. Его нужно периодически от цементной пыли прочищать, за чем и следит автоматика. А ежели без автоматики, должны следить люди. Да вот не уследили. Фильтр отяжелел и упал.

Под фильтром — рабочие места четырёх человек. Один в курилку отошёл, один в туалет. А двое… Двоим удалось удрать из-под падающего фильтра.

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

Помнится, в Чернобыле после взрыва операторы первым делом укрывали SCADA. Честное слово, после знакомства с заводскими реалиями не удивляет.

7962

Динамично развевающиеся телекоммуникации

Я оканчивал академию телекоммуникации и информатики. Поработать успел не только за компьютером, но и «инженером на все руки».

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

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

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

Гения с вышки сдуло. Но, как говорится, везёт дуракам. Он умудрился зацепиться за кронштейн и теперь висел на ветру, развеваясь, как флаг, на высоте около тридцати метров над землёй почти в двух метрах от самой вышки.

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

7961

Узбеки на столбах

Я работаю в самой мозговыносящей проектной группе.

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

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

Мы проектировали беспроводную сеть в новом офисе, включив в зону охвата туалет.

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

В ТЗ на систему безопасности рядом с вибрационными датчиками значилось «ветроотклоняющее программное обеспечение».

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