Выбрать главу

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

Ну ладно. Опять юзаю тот же метод, что и в прошлый раз: иду от обратного. Вот рядом в папке Examples лежит прога, которая прекрасно компилируется. Скармливаю главный объектный модуль моей программы и .obj этой проги TDump’у и снова начинаю играть в игру «найди 10 отличий». Поначалу разницы никакой не видно, но потом…

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

Я никогда не придавал этой фишке никакого значения. Напишу ли я «hInstance dd 0» или «dd ?» — какая разница? В конечном результате сборщик всё равно всё проинициализирует и поставит ноль. Или нет? В большинстве случаев всё именно так и было. Но я столкнулся с мелким, неприятным и противным багом в широко известном и протестированном сотнями людей продукте. Сборщик банально выпадал в осадок, если секция данных начиналась с неинициализированной переменной! Вот так просто: просто поменяй местами переменные или проинициализируй — и всё, нет бага.

Вот мне и вам урок: старайтесь писать ваши программы так, чтобы они были совместимы хотя бы между собой — чего уж говорить о совместимости с другими…

#9375: Из человека в профессионала

15:00 12.06.2012, IT happens

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

Давайте уважать каждого, кто принимает участие в нашей — эй, да-да, я тебе говорю! — нашей работе. Кто-то учился, кто-то набрался сам, кто-то командует десятками тысяч компьютеров, кто-то десятком. Важен труд и вклад каждого. Как мастера с паяльной станцией, как профессионала CCNA, так и эникея, могущего выполнить, пусть криво, крохотную часть работы того и другого.

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

#9376: Внезапный силовой кроссовер

15:00 12.06.2012, IT happens

Стою с бухтой силового кабеля у электрощита, жду, пока ключи несут, от нефиг делать прозваниваю. Чёрный — да, коричневый — да, синий — нет, белый — нет… Ё-моё!

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

Пришёл напарник с ключами. Не поверил, поржал, проверил, офигел. А если б не прозванивая подключили? Теперь вообще никому не верим.

#9377: Сам себе хостер

13:00 13.06.2012, IT happens

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

— Добрый день! Подскажите пожалуйста