Ну, скомпилил модуль. Запустил — программа падает с фатальной ошибкой. Ничего страшного, я к этому уже привык. При написании программ на асме иначе просто не бывает. Ошибка в одном бите — и программа уже фатально падает. Но именно этот стиль написания программ, привитый с детства, когда ты видишь программу насквозь и чисто интуитивно чувствуешь, где кроются ошибки, очень помогает в моём ремесле.
Загружаю старый добрый TD32. И тут происходит это… Знаете, как выглядит самый страшный ночной кошмар любого программиста? Самый страшный кошмар программиста — это когда прога падает при простом запуске, но при попытке отладить её ошибка мистическим образом испаряется! При запуске под отладчиком программа преспокойно работает. Я начинаю судорожно анализировать ситуацию: что такого я мог накосячить, что прога отказывается работать под «голой» виндой?
На анализ ситуации уходит пара часов, в течение которых программа дописывается до фактически окончательного состояния, но решить проблему так и не удаётся — прога так и падает где-то в User32, хоть ты тресни. И тогда я решаю пойти от обратного. Вот в соседней папке лежит каркасное приложение под винду, которое прекрасно работает. Чем же от него отличается моя программа?
Оказывается, перед тем как приступить к написанию модуля, я на всякий пожарный решил перечитать статьи по некоторым функциям API, причём не где-то на левых сайтах, а непосредственно в MSDN. Там я обнаружил весьма интересную информацию: оказывается, функция регистрации класса окна возвращает идентификатор этого самого класса, так называемый атом, который можно использовать вместо имени класса при создании окна. Конечно, как ярый фанат оптимизации (не зря же на асме пишу), я именно так и сделал. Зачем заставлять ОС делать лишние телодвижения? Ведь она же всё равно этот самый идентификатор будет искать по имени. Я это сделал и преспокойно забыл.
Вернул идентификацию класса окна по имени — всё заработало. Тут всё встало на свои места. Оказывается, никакой магии в том, что ошибка мистически пропадала в отладчике, нет. Эти самые атомы работают только под Win95/98.
А весь фокус с исчезновением в том, что древний TD32 работал в режиме совместимости с Win95. Но ни в одной справке про это нет ни единой строчки! Даже в официальном MSDN. Там прям так и написано: можете использовать либо имя, либо идентификатор.
Вот мне и вам урок на будущее: меньше доверяйте документации Микрософта и не изобретайте велосипеды. Пишите так, как пишут все, и будет вам счастье.
#9252: Это чоппер
15:00 24.05.2012, IT happens
Занимаюсь проверкой кода для игры. Не выспался, ибо много работал.
Еду на работу в авто. Пробка. Мимо проезжает какой-то огромный дядька на огромном мотоцикле. Первая мысль: «Какой-то придурок масштаб неверно выставил».
#9253: По самую грушу
15:00 24.05.2012, IT happens
У маркетинга сегодня были проблемы с отправкой рассылки. Почтовая программа грубо ругалась и выдавала сообщения типа: «Чего вы пихаетесь, если оно не влезает?» Но к админу обратиться побоялись, как обычно.
Переслал ему письмо. Он ответил. Цитирую:
«Важен выбор размера наконечника клизмы. Если размер наконечника сопоставим с размером головы пациента или больше, неизбежны затруднения при проведении процедуры. Более того, возможно последующее ухудшение общего самочувствия пациента, его угнетённое, депрессивное состояние». (Из «Карманного справочника начинающего санитара».)
А вообще — размер письма для рассылок не больше 1 МБ.
#9254: Не то что пауки
15:00 24.05.2012, IT happens
Ставлю одной тётушке известный антивирус словацкого происхождения.
— А он хороший? — спрашивает она. — Вирусы ловит?
— Да, — говорю, — нормальный.
— Верю. Вон какая морда умная, интеллигентная!
#9255: Петросян с младых ногтей
20:45 24.05.2012, IT happens
В подъезде временно отключили кодовый замок в связи с малярными работами. Один мальчуган решил покрасоваться перед подругой. Говорит: «Сейчас я домофон взломаю». Достаёт телефон, направляет на кодовую панель, для вида долго кнопки на мобильнике нажимает. Телефон издаёт трель морзянкой (это мелодия там такая записана). Пацан дёргает за дверь, и она поддаётся.
Подруга в восторге. А на скамейке сидит участковый. Он всё видел. Он юмора не понял. Он решил, что мальчишка вправду взломал кодовый замок телефоном. Схватил «кулхацкера» за ухо — и в детскую комнату.
У инспекторши по делам несовершеннолетних глаза округлились. Адрес подъезда спросила. А когда узнала, говорит:
— Да я там живу, там малярные работы идут, замок отключили, чтобы малярам ходить удобнее было. Отпустите мальчишку. Никакой он не кулхацкер, а Петросян малолетний.
Пришлось отпустить.
#9256: Котики на педальной тяге
13:00 25.05.2012, IT happens
Купил велотренажёр. Приделал к нему самодельную подставку для телефона. Красота: можно крутить педали и одновременно смотреть Ютюб, чтобы скучно не было. Причём без наушников — тренажёр-то бесшумный.
Приходит брательник и очень удивляется: