Category: литература

Category was added automatically. Read all entries about "литература".

CRT Extension

Вопрос, который возник в дискуссии в каментах к одной из прошлых записей - по поводу наличия в коде некоторой библиотеки под кодовым названием "CRT Extension". Назначение библиотеки - общие функции, которыми должны пользоваться программисты вместо прямого вызова CRT API, Windows API и так далее. К этим функциям можно отнести: единый центр протоколирования, ассерты, отладочные и heap'овые менеджеры памяти, функции синхронизации и параллелизации вычислений, виртуальную файловую систему, стандартные классы и темплейты и многое другое (список можно расширять или сокращать в зависимости от специфики разработки ПО, поддерживаемых платформ, компиляторов, внутренних стандартов и приемов программирования).

А есть ли у вас в компании CRT-Extension, которым должны пользоваться программисты вместо прямых вызовов?

Poll #1517598 CRT-Extension

Есть ли у вас в компании библиотека типа CRT-Extension?

Есть, пользуемся.
33(64.7%)
Есть, планируем избавиться (если можно, в коментах - почему).
0(0.0%)
Нет, но хочется / планируется.
6(11.8%)
Нет, и не надо.
12(23.5%)

Логи, часть четвертая

Логи, часть четвертая.

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

Основой для протоколирования в С/С++ может стать макрос, который на вход принимает следующие параметры:
- уровень протоколирования;
- метка сообщения;
- сам текст сообщения;
- имя файла и номер строки, опционально - имя функции;

Collapse )

Теория ошибок. Нестабильности третьего и четвертого рода.

Развивая тему анализа нестабильностей, которую я начал еще весной (http://ddima.livejournal.com/48573.html и http://ddima.livejournal.com/49288.html), оставалось рассмотреть нестабильности третьего рода - это собственные ошибки функции. То есть когда все наружные условия соблюдены, объект или модуль находятся в правильном состоянии, все переданные аргументы являются правильными, а результат работы функции все равно оказывается некорректным. Но как показала последующая практика, эти нестабильности полезно разделить еще на два независимых вида - это нестабильности, связанные с ошибками алгоритма, непроинициализированными переменными и т.п. (нестабльности третьего рода) и нестабильности, связанные с некорректной обработкой результатов функций (четвертого рода).

Collapse )

Это страшное слово setlocale.

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

Collapse )

Ден Симмонс. Террор.

Напишу необычное. Впервые в своем ЖЖ. Про художественную литературу :)

Вчера закончил читать Террор Дена Симмонса. Купил его с мыслью о том, что автор потрясшей меня в свое время тетралогии Гипериона не может разочаровать.

Так оно и случилось. Несмотря на то, что такой жанр (смесь морской исторической реконструкции с фантастикой) никогда меня особенно не привлекал, книгу прочитал на одном дыхании. Как всегда - отлично выписанные персонажи и их окружение, и захватывающий сюжет, который раскрывается только ближе к концу книги. И - история полярного народа, представленная с такой любовью и тщательностью, что иногда становится не по себе. Помню, как испытывал благоговейный восторг, читая четвертую часть "Гипериона" и рассказы Энеи про историю земли и эволюцию техноцентра. Почти то же самое испытываешь и здесь, когда фантастический исполинский зверь и "леди безмолвная" в английской полярной экспедиции, затертой в арктических льдах, оказываются к концу книги историческим инуитским симбиозом, ... Впрочем, тсссс.
office

Рецепты отладки. Зависший 3D редактор.

Несмотря на то, что правильные пацаны советуют очень правильный тулсет, а другие правильные пацаны смотрят на это крайне позитивно, я продолжаю трахаться с разными неприкольными ситуациями, которые вряд ли отловит PREfast. Поэтому пользуясь случаем, отвлекусь от избитой темы ошибок в памяти и переключусь на ошибки другого рода - это нарушения последовательности вызова функций внешнего middleware. Уважающие себя пакеты предпочитают проверять состояние объекта или модуля перед вызовом функций и информировать програмистов о нарушениях логики. Неуважающие себя пакеты такими мелочами не занимаются, в крайнем случае пишут в документации что-то типа "никакие функции библиотеки не могут быть вызваны до вызова xxx() или после вызова yyy()).

Исходные данные: имеется мощный пакет моделирования под названием XSI (который кстати теперь тоже аутодесковский). Имеется плагин к нему. При выгрузке плагина XSI зависает вусмерть (а плагин загружается и выгружается довольно регулярно - на каждый "чих").

Collapse )

Crossposted to blog.gamedeff.com

Оценка готовности компонент

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

Особенно меня волнует ситуация с различными движками. Имею большое ИМХО, что множество проблем, которые имели место быть при использовании Дагора, ТБМ, Хрома (из них троих только Дагор имел какие-то позывы на движковость, остальное представляло из себя готовые игровые решения, а не движки), связаны как раз с тем, что они находились на недопустимом классификационном уровне.

Crossposted to blog.gamedeff.com

 

Collapse )

Windows.Manifest

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

Собственно, проблема в том, что Мелкомягкие отказались от идеи использовать общий пул системных Dll, которые юзаются всеми запускаемыми
приложениями. Самая вероятная причина (если кто-то в дебрях MSDN найдет другое более логичное объяснение - киньте в меня ссылкой, плиз) - так и не удалось добиться качественной совместимости разных версий одних и тех же Dll. Как результат - замена логики поведения функций (особенно на граничных и запрещенных данных) с последующими падениями, синими экранами и т.п.

Итак, что же теперь предлагает майкрософт.

Collapse )

(no subject)

Навеяно постом _winnie. А зачем вам Dll в проекте? Я вот в свое время натрахался с использованием dll и попытками использовать их в проектах с постоянным копированием на разные компьютеры в команде. После чего решил, что dll лучше всего использовать только по прямому назначению:
- когда несколько независимых программ будут использовать одну и ту же стабильную функциональность (а-ля user32.dll :). В условиях динамично меняющегося проекта такое практически невозможно.
- когда мы делаем плагины для расширения какой-то функциональности.
В итоге я остановился на том, что игровое приложение - это single exe без всяких dll. Максимум - разбито на несколько статических библиотек.
Вообще имею большое ИМХО, что при наличии исходного кода делать разбивку какой-то программы на Dll - искусственное и гемороидальное занятие.
А?
  • Current Mood
    hot hot
  • Tags

(no subject)

Архитектура приложения - странная штуковина. Например, главная петля Windows (GetMessage() / PeekMessage()) попадает в локальный код, а вот функция обработки сообщений главного окна сидит в базовой библиотеке и меняться явно не будет ни для чего. Вообще хочется откуда-то взять уверенность, что написаное в системном коде выражение int a = 231 является правильным и не будет меняться от проекта к проекту :).  А что мы имеем в результате? Есть какая-то мифическая линия разреза между системным и локальным кодом. Проведешь ее чуть левее - придется лезть в системный код, чтобы обеспечить запросы текущего приложения. Проведешь ее сильно правее - большое количество локального кода будет копироваться из проекта в проект без модификации. То есть проводить эту линию приходится около границы со стороны локального кода, ни в коем случае не переступая налево, но и не отдалясь от границы вправо на большое расстояние. Пока что это вроде удается.