Публікації

Показано дописи з травень, 2005

Код ошибки в Exception

Был когда-то в нашей команде DMSF очень горячий спор о том, следует ли в Exception -ах добавлять код ошибки, как например, у SqlException . Сегодня нашел замечание по-этому поводу в блоге Krzysztof Cwalina . Выдержка: Do not return error codes. Exceptions are the primary means of reporting errors in frameworks. The chapter overview section describes the benefits of exceptions in detail. Annotation (Krzysztof Cwalina): It’s ok for exceptions to have a property returning some kind of error code, but I would be very careful about this also. Each exception should carry two main pieces of information: the exception message explaining to the developer what went wrong and how to fix it and the exception type that should be used by handlers to decide what programmatic action to take. If you think you need to have a property on your exception that would return additional error code, think who this code is for. Is it for the developer or for the exception handler? If for the developer, add addi

Тонкий рассчет

Шумный американский университетский городок в центре большого города. Один русский, приехавший трудиться по контракту в какой-то лаборатории, пашет каждый божий день с 8 утра и до упора. Спустя некоторое время, служащий небольшого автосервиса в этом самом городке подошел к менеджеру и сообщил о странном, говорящем с акцентом клиенте, который вот уже в течение двух месяцев каждый день ставит автомобиль на замену масла и подкачку шин в 8 утра и забирает ее поздно вечером. Служащему это кажется подозрительным. Менеджер сам начинает наблюдение за подозрительным клиентом. Через месяц, окончательно созрев, он просит этого клиента зайти в офис, где просит объяснить его странное поведение. Клиент отказывается, менеджер настаивает. Когда босс уже хочет вызвать полицию, чтобы сдать им "подозрительного арабского террориста", клиент начинает "колоться": - Я русский специалист, работающий по контракту кажд

Дальше сидеть на диете не имело смысла...

Зображення
Лучше уже Рубенсовские толстушки!

В русских селениях, оказывается, есть не только женщины, но и мужики!

Зображення

MS Indexing Service 3.0

В одном из проектов я успешно использовал MS Indexing Service (тогда еще 2.0) для полнотесктового поиска. Но оказывается, "тема мною не раскрыта"! Использовал я его абсолютно по-ламерски. А только что нашел статью, где быстро, кратко и ясно: Your free search engine – Microsoft Indexing Server

Можно ли узнать, какая сборка будет загружена вызовом Assembly.Load() не загружая сборку?

Похоже, что нельзя... Учитывая динамическую натуру Fusion, когда практически все можно перенастроить и изменить порядок поиска сборок. Особенно в том слкучае, если кто-то подписался на AppDomain.AssemblyResolve и там подменяет сборку... Есть комментарии?

Вот какие игровые компьютеры нынче делают:

A 20GB hard drive, high-def game support and a 500MHz ATI graphics processor: Glimpse the Xbox 360's system performance specifications as provided by Microsoft. Custom IBM PowerPC-based CPU • Three symmetrical cores running at 3.2 GHz each • Two hardware threads per core; six hardware threads total • VMX-128 vector unit per core; three total • 128 VMX-128 registers per hardware thread • 1 MB L2 cache CPU Game Math Performance • 9 billion dot product operations per second Custom ATI Graphics Processor • 500MHz processor • 10 MB of embedded DRAM • 48-way parallel floating-point dynamically scheduled shader pipelines • Unified shader architecture Polygon Performance • 500 million triangles per second Pixel Fill Rate • 16 gigasamples per second fill rate using 4x MSAA Shader Performance • 48 billion shader operations per second Memory • 512 MB of GDDR3 RAM • 700 MHz of DDR • Unified memory architecture Memory Bandwidth • 22.4 GB/s memory interface bus b

AppDomain.UnhandledException

Никогда не задумывался над тем, что событие AppDomain.UnhandledException предназаначено для самого домена. То есть, если домен A создает домен B, и хочет получать все ошибки, которые в B произошли, то кода: domainB.UnhandledException += new UnhandledExceptionEventHandler(ErrorHandler); будет маловато. Потому, что вызов между доменами это уже remoting, а значит начинается совершенно другая песня: MarshalByRefObject, ISerializable и ему подобное. Один из выходов в данной ситуации - загрузить в домен B класс, который сделает все что надо прямо там, на месте: Loader ldr = (Loader)domainB.CreateInstanceAndUnwrap( "assemblyName", "typeName"); ldr.RegisterErrorHandler(); где: void RegisterErrorHandler() { AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ErrorHandler); } Вот теперь, ErrorHandler, сможет обработать все ошибки. В том, что класс Loader находится прямо в domainB есть плюс: е

Комплект "Свободные руки"

Зображення

Тестирование минимальных привилегий

Очень часто, при разработке софта мы не задумываемся над тем, насколько точно наше окружения соответвтует окружению заказчика. Точнее, мы знаем что оно отличается, но никогда не анализируем на сколько... Ну ладно, некоторые анализируют... Есть хорошо известный, уже "бородатый" пример неправильного подхода: разработка софта под локальным администратором системы. Потом почему-то оказывается, что у заказчика серьезный администратор и все пользователи на собственных машинах числятся у него максимум в Power Users! И почему-то не всегда могут писать в реестр или в файловую систему. Второй пример не так широко известен. Даже когда мы работаем без административных прав, все равно разрабатываемая нами .NET программа выполняется с уровнем Full Trust. А что если кто-то ее запустит в окружении с частичным доверием? Самый простой способ проверить это - запустить самому! Можно воспользоваться CasPol.exe, для управления доверием, но я знаю способ проще: Допустим мой компьютер называется NOM

Правила хорошего тона, при разработке библиотек

Как сделать боевого хомячка

Зображення

Красиво

Библиотека изображений карт в Avalon-е: http://blogs.msdn.com/adam_nathan/archive/2005/05/03/414148.aspx

Интересно что...

..."CLR Team" (команда разработчиков .NET) раньше имела такие названия: COM+ 2.0 Team COM+ Confidential Team

Грузится не та сборка! Что делать?

Встретился с очередной проблемой: .NET-ная програма грузит не ту сборку, которую надо. Если бы она ее совсем не могла бы загрузить, от она бы выдала Fusion Log в Debug Output и я бы наверно понял в чем дело, а так сборка грузится, а потом летят MissingMethodException и TypeLoadException . Обидно. Решил вдумчиво почитать Интернет. Практически сразу набрел на статью Suzanne Cook . Оказывается, если для .NET Framework 1.x, написать в реестр следующие значения: HKLM\Software\Microsoft\Fusion\LogPath (REG_SZ) = "c:\temp\Fusion.log" HKLM\Software\Microsoft\Fusion\ForceLog (REG_DWORD) = 1 HKLM\Software\Microsoft\Fusion\LogFailures (REG_DWORD) = 1 то в папочку c:\temp\Fusion.log будет записано как именно и насколько успешно Fusion искал сборки.

Сотрудница сделала мега-снимок

Зображення
Мега-Банк