четверг, июня 19, 2008

В помощь разработчикам под MS CRM

Если вам пришлось разрабатывать решения на основе MS CRM рекомендую блог Ronald Lemmen. Рональд является MVP как раз в области MS CRM. Помимо того, что в его блоге есть множество полезных ссылок на другие ресурсы, связанные с CRM, Рональд и сам пишет о многих тонкостях, которых вы не найдете ни в SDK ни в KB.
Мне, к примеру, он помог справиться с ошибкой при отладке Callout. Thanks a lot, Ronald!

пятница, июня 06, 2008

Surprise! Explicit Enum Cast in C#

О сколько нам открытий чудных
Готовит просвещенья дух.
(с) А. С. Пушкин

Как вы думаете, что выдаст на консоль приведенный ниже код?


public enum Parts
{
Engine = 1,
Wheels,
Brakes
}
static void Main(string[] args)
{
try
{
Parts lineItem = (Parts)4;
Console.WriteLine(lineItem);
}
catch
{
Console.WriteLine("Exception");
}
}

Не знаю, как вы, а я был убежден, что это будет "Exception". Однако на выходе получаем "4". Кстати, если Console.WriteLine(lineItem) заменить на Console.WriteLine(Enum.GetName(typeof(Parts),lineItem)) получим пустую строку. Вот так засада! Явным приведением можно загнать в enum любое значение underlying типа. Судя по обсуждению на RSDN это стало сюрпризом для многих.

Оказывается Anders Hejlsberg пишет в книге "The C# Programming Language":
"Each enum type has a corresponding integral type called the underlying type of the enum type. An enum type that does not explicitly declare an underlying type has an underlying type of int. An enum type’s storage format and range of possible values are determined by its underlying type. The set of values that an enum type can take on is not limited by its enum members. In particular, any value of the underlying type of an enum can be cast to the enum type and is a distinct valid value of that enum type."


Указания на такое поведение есть и в стандарте C#, дык только кто-ж это все читает...
Теперь, когда я думаю о том, сколько кода написано в твердой уверенности, что enum не может содержать никаких значений, кроме объявленных, мне становится как-то не по себе.
Надо взять за правило в switch-ах по enum-мам всегда ставить метку default.

среда, июня 04, 2008

DDNA

Ну какая может быть Силиконовая долина в Дубне, если здесь нет ни одной user group разработчиков, подумал я. Подумал, и решил, настало время собрать группу разработчиков .Net. Поговорил с ребятами - вроде интерес есть. Мощная аббревиатура в заголовке означает Dubna Dot Net Alliance.

И вот 29 мая прошла первая встреча Сообщества .Net разработчиков Дубны, организации которой я посвятил практически весь предшествующий месяц. К сожалению из 18 зарегистрировавшихся пришло только 10 человек. Зато среди них были замечены преподаватели университета :).
Конечно пришлось делать доклад, тема довольно размытая "Эволюция C#" была выбрана с явным расчетом завлечь в сети .Net еще не определившиеся юные души. Впрочем, расчет не оправдался, пришли только матерые .Net-чики :) Не все получилось. Хронометраж не выдержал, кое что из интересных фактов не рассказал, и т.д. Еще раз убедился, что для всякого дела недостаточно только знаний, но нужен навык. Презентационные навыки у меня развиты слабо, надо работать в этом направлении.
Второй доклад делал Юра Михеев о новых возможностях SQL 2008. Тут действительно было интересно, Geo-spatial data, и наконец-то, нормальный тип данных для даты и времени - асана!

И вот парадокс. Сейчас у нас нет недостатка в людях готовых сделать доклады, но есть явный недостаток в людях, которые составили бы аудиторию.

Материалы встречи можно найти на сайте dubna.ineta.ru (По правде, говоря портал ineta.ru настолько глючный, что даже ссылку давать стремно).

P.S. Предвижу злобные комментарии по поводу "силиконовой долины", однако упроно продолжаю использовать этот термин. Кремниевая - слово для русского языка трудновыговариваемое (о!).

Набор .Net патологоанатома

UserDump, WinDbg и sos.dll - это инструменты которыми .Net разработчики пользуются очень редко. Но если ваша программа замечательно работает у вас, но подло глючит у пользователя или заказчика, то без набора этих инструментов вам не обойтись.
Как ими пользоваться рассказывает в своем блоге Юрий Скалецкий.
Как обнаруживать утечки памяти в .Net при помощи sos.dll и windbg описано здесь (во второй половине статьи).
Как снять crash dump при помощи adplus можно прочитать здесь