bash.im ithappens.me zadolba.li
7971

В армии нет слова «украл»

7 декабря 2011, 15:45

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

Мне посчастливилось немного больше. Старшина, увидев в личном деле мою гражданскую профессию «программист», забрал к себе в каптёрку, чтобы я печатал отчёты по расходу амуниции и т. д. Машина там стояла не то чтобы совсем хлам — PIII 800 МГц, но проблем с ней хватало.

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

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

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

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

7970

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

7 декабря 2011, 11:45

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

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

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

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

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

7969

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

7 декабря 2011, 11:45

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

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

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

7968

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

7 декабря 2011, 10:00

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

Было дело, писал скрипт по закачке игровых ресурсов в оперативную память по списку. В числе прочего в коде присутствовал скрипт по чтению списка ресурсов из 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

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

7 декабря 2011, 08:00

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

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

7965

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

7 декабря 2011, 08:00

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

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

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

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

7964

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

7 декабря 2011, 08:00

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

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

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

7963

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

7 декабря 2011, 08:00

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

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

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