Archive for the ‘life’ Category.

Хромающая диагностика

Снова в который уже раз проблема с тулсетом требует длительного выяснения, пересборки в дебаге и в результате оказывается, что там стоит гадский ассерт, который в релизной конфигурации, ессно, вырезался, а программа далее успешно зависает (ну или падает – зависит от фазы луны).
В который уже раз буду банальным – грамотная диагностика – залог успешности программы, особенно если речь идет о тулсете. Не невидимые в релизе ассерты, которые половиной программистов не ставятся вообще, а половиной – ставятся абы как, а правильная и четкая диагностика, которая с одной стороны, может защитить приложение от сбоев в какой-то его части, а с другой стороны, позволяет сразу получить понятное описание проблемы.

Как то во времена Американ Чоппера, когды мы в Крейте жили целыми месяцами, был такой случай. Я случайно оказался дома, чтобы поспать 4 законных часа, как меня телефонным звонком разбудил Стас Богданов, который спросил: ”Дима, а что такое Scene index must be zero blababla….? Никогда такого не встречал”. Мне потребовалось несколько секунд, чтобы понять, какая именно дьявольская комбинация аргументов командной строки и описаний в текстовом файле могла привести к таким последствиям, и вопрос был дистанционно и мгновенно решен. Эта строка была написана за год до описываемых событий и никогда до и никогда после этого в процессе обработки уровня не встречалась.

Не спорю, что писать логи – это долгое занятие (хотя отладка – еще более долгое). Не спорю, что далеко не все программисты в состоянии вспомнить, что за строчка была написана за год до события. Но писать циничное a = malloc(); assert(a); – это то же самое, как если бы написать a = random(); assert(a != 0.5). То есть мы ассертируем стандартное поведение функции, которое описано в справочнике.

Пример с маллоком далеко не единственный. Конкретно в данном случае срубилось необработанное CreateProcess(). Вообще я стараюсь придерживаться следующего правила: нужно ассертировать программистские ошибки. Валидные (описанные в MSDN) коды возврата функций API, предположения о формате или синтаксисе файлов, наличия файлов на диске, аргументов командной строки, нажимаемых пользователем кнопок – никакие такие действия не могут ассертироваться, они должны корректно обрабатываться и еще сохранять данные в лог, чтобы можно было разобраться, что произошло, даже в полвторого ночи.

try catch, кстати, тоже не панацея – во первых, он тоже не провоцирует писать логи (за исключением того, что м.б. “Что-то упало внутри этого блока try”, а вто вторых, им еще надо грамотно уметь воспользоваться.

автоматика vs ручной труд.

История:
Помню надо было где-то в двадцати файлах сделать замену в каждом в трёх-пяти местах по тексту из других файлов (по файлам от переводчика).

Я начал писать скрипт, на что начальник заявил «не занимайся ****ёй, я руками быстрей сделаю».

Результаты:
1) мы кончили одновременно (за десять минут)
2) сравнение результатов показало, что у нас у обоих ошибки. У меня (в скрипте) молчаливо сломалось из-за переноса строки в неправильном месте в файле от переводчика, у него – случайная копипаст ошибка.

E.T. as in SDET

Третьего дня занимался понятным нечастым кодом.
Занятие оказалось неожиданно показательным.
Хорошо показывает, чем SD отличается от SDET, и почему последних особенно мало.
Консилиум решил, что пример годен для наружного употребления.
Continue reading ‘E.T. as in SDET’ »

Сунем голым за русский опен-сорс!

Пришло время для циничной саморекламы – правда, некоммерческой.

Continue reading ‘Сунем голым за русский опен-сорс!’ »

сверхкраткий отчет

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

Считаю, вторая ежегодная FF-party вполне удалась – пламенный привет неучастникам.

Continue reading ‘сверхкраткий отчет’ »

Про монолиты и кубики

Тема и погода вызвали легкий резонанс. Это уже целых два повода ответить на комментарии.

Continue reading ‘Про монолиты и кубики’ »

как мы рожали death track

Прошло уже некоторое время с момента выхода наших гоночек ( http://deathtrack.ru/), предрелизные страсти улеглись, патч выпущен и, говорят, как раз самое время собрать камни. В связи с чем попробую рассказать немного про то, как мы тот Death Track делали. Расскажу выборочно и в основном про картинку ну или про то что с этой картинкой связано.

Continue reading ‘как мы рожали death track’ »

Про кубики и монолиты

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

Сегодня наши читатели из Сиэттла интересуются, что можно сказать о маленьких и больших тулзах.

Continue reading ‘Про кубики и монолиты’ »

Левая резьба.

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

В принципе история достаточно простецкая. Но на безрыбье и рак рыба.

Continue reading ‘Левая резьба.’ »

Заниматься геймдевом