Помните, как я ругался на функцию GetRawInputDeviceList?

Оказалось, что это была ошибка в документации. Её поправили и посмотрите, что получилось.

Read On →

Ввод регистрационного номера программы. Ну почему всё так непросто?

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

Read On →

Меркурий вблизи

Это уже совсем не новость, конечно. 14-ого января Messenger пролетел в двух сотнях километров от поверхности Меркурия. Это первое посещение планеты за более чем 30 лет со времен полёта Mariner 10. В отличие от своего предшественника, Messenger должен выйти на орбиту Меркурия 18 марта 2011 года, выполнив еще два пролёта в октябре 2008 и сентябре 2009 года. Кроме всего прочего, планируется полностью картографировать поверхность с разрешением 250 метров на пиксель. Будет в Google Earth слой Mercury, как пить дать. Read On →

Кстати ещё одна причина, почему DllMain должна выполнять как можно меньше работы...

…это возможность распараллелить код инициализации подсистем по разным процессорам. Учитывая скорость распространения многоядерных процессоров это становиться актуальной задачей. Вынести большую часть кода из DllMain и конструкторов статических объектов не сложно. Достаточно оформить доступ ко всем подсистемам через singleton-подобный интерфейс, защищённый критической секцией. Сложнее - выстроить зависимости между подсистемами так, чтобы инициализация выполнялась как можно позже, когда все рабочие потоки созданы и готовы к работе. Не менее важно и не перестараться с отложенной инициализацией. Read On →

Возвращаясь к теме про фаззеры

Вот код, которым я пользуюсь для написания стресс тестов и фаззеров в своих проектах. Класс EntropyGenerator - обертка вокруг генератора случайных чисел.

Read On →

Пикник на обочине или не ходите, дети, в DllMain гулять, а то ноги оторвёт

Точка входа в DLL, так же как и точка входа в программу, - это очень специальное место. Зона. В Зоне действуют свои правила касательно того, что можно делать, а что делать нельзя. В Зоне можно инициализировать локальные данные DLL, можно создавать критические секции. В Зоне нельзя динамически загружать другие Модули или создавать потоки. Любой Сталкер знает и следует правилам Зоны. Все остальные рано или поздно нарушают правила и расплачиваются за это.

Read On →

Отличный совет

Только что получил чудесный комментарий в ответ на вопрос по хороший курс лекций по C# для непрограммиста. Орфография оригинала сохранена. Выделение моё: Как насчёт того, чтобы почитать MSDN Library? :)Настоятельно рекомендую иметь у себя Offline версию. Ибо, ИМХО, удобнее. Очень актуальной будет ‘MSDN Library for Visual Studio 2008’: http://www.microsoft.com/downloads/details.aspx?familyid=6FF3BC60-32C8-4C22-8591-A20BF8DFF1A2&displaylang=en Если нет 2.0 Гб внешнего трафика - добро пожаловать в MSDN Online: http://msdn2.microsoft.com/en-us/library/default.aspx Тебя интересуют разделы “Getting Started with Visual C#”, “C# Programming Guide”, “Writing Applications with Visual C#” и “C# Reference”. Read On →

Хоть убейте меня – не понимаю!

… почему программисты, уже озаботившиеся ведением подробного журнала о том, что, где и когда случилось, никак не позаботились о том, чтобы фатальные ошибки находились сразу, простым текстовым поиском? Нет ну серьезно, уровни важности сообщений - есть. Вывод сообщения на каждый чих - есть. Ключевые слова (trace, info, warning & error) - есть! Но найти что именно сломалось в этом многомегабайтном монстре никак не получается. Сообщений об ошибках либо нет, либо их очень много и не по делу. Read On →

Ведение дополнительных веток проекта отнюдь не бесплатно

Структура репозитория исходников типичного проекта обычно представляет собой дерево:

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

Read On →

Программирование для чайников

А не подскажет ли кто хорошего курса уроков/лекций по Java или C#, подходящий для человека, далёкого от программирования? Рассказывающий об основах, безо всяких, лишних поначалу, подробностей и деталей. Можно по-русски, можно по-английски. Нам без разницы.