четверг, 31 января 2008 г.

Немного о малоиспользуемых операторах С# №2

Прочитал сейчас вот это и сильно удивился. Как-то мне показалось, что оператора ?? в языке C# нет. Просто читал я о нем в контексте "неплохо было бы добавить вот такую фичу" и почему-то решил что это относится к 3.5 фреймворку. На всякий случай решил проверить - действительно работает во втором фреймворке :)

Вообщем, оператор очень полезный и иногда позволяет существенно сократить размеры кода за счет замены конструкций проверки значения на null.

Обычно такая проверка осуществляется следующими способами (в зависимости от контекста):

#1

if(value1 != null)
{
  ... //работаем с value1
}


#2

if(value1 == null)  return;


#3

value3 = value1 != null ? value1 : value2;
... // работаем с value3


Лично я предпочитаю использовать вариант №2 там где это возможно. Это позволяет уменьшить уровень вложенности внутри функции. А это, в свою очередь, упрощает ее чтение.

Использование же оператора ?? позволяет упростить запись #3:

#3.1

value3 = value1 ?? value2;
... // работаем с value3


Удобно!

пятница, 25 января 2008 г.

Немного про почту

Последние три дня при слове "почта" громко матерюсь и скреплю зубами :)

Собственно, начну с начала.

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

Как-то пару лет назад я уже работал с почтой, но в тот раз я занимался отправкой писем. И было это все очень просто. Наивный я как обычно лезу в MSDN на предмет нахождения класса во фреймворке для работы с протоколом POP3...

Облом. Нету. И не было. Т.е. SMTP - есть, а POP3 - нету! Громко ругаюсь и лезу в гугловский поиск по исходникам. Нахожу несколько вариантов, но... все с разными глюками и на нужных мне письмах - падают. Наконец, после некоторого времени мучений и экспериментов я собираю из двух проектов более-менее рабочую конструкцию.

И все было-бы хорошо, пока я не попытался отправить письмо стандартными средствами фреймворка самому себе.

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

Естественно, хлипкая конструкция для получения писем начала падать :( Путем целого дня отладки выяснилось, что научить ее корректно обрабатывать заголовки сообщения, написанные с маленькой буквы невозможно - фактически пришлось бы переписать 90% кода парсинга сообщений.

Сегодня опять полез в гугл - на этот раз нашел кое что более полезное проект OpenPOP.Net. Удивительно, но он не упал ни на одном письме из почтового ящика, включая и подписанные сертификатами :)

P.S.: кстати, после формирования и отсылки письма, содержащего аттачмент средствами класса System.Net.Mail.SmtpClient необходимо вызвать метод MailMessage.Dispose (т.е. у переменной, в которой производилось формирование письма). В противном случае файл-вложение окажется заблокирован на неопределенное время и его нельзя будет ни удалить ни перезаписать пока не отработает сборщик мусора или программа не завершится.

четверг, 17 января 2008 г.

Отладка в VS2008 с использованием исходного кода .Net Framework

Если помните - Майкрософт обещала открыть доступ к исходному коду .Net Framework. Оказывается они это все-таки сделали :)

О том, как это настроить, можно посмотреть здесь. Если всё сделаете правильно, то можно будет делать вот такие вещи:

вторник, 15 января 2008 г.

Копирайт, чтоб его

1) Думаю многие согласятся, что подавляющее большинство медиа-продукции крайне низкого качества и не стоит затраченных на него денег. Как пример: за последний год я не купил ни одной книги в бумажном виде. Причина? То, что сейчас издается (а читаю я исключительно фентези и фантастику) по уровню качества напоминает потуги школьника 8 класса написать книжку.
Нет, конечно, есть мэтры (так сказать раскрученные "бренды", тот же Лукьяненко, Панов, Перумов), которые, как правило, выдают качественный продукт (хотя и тут как повезет), но их - мало.

2) На данный момент нет никакого способа отличить качественный продукт от некачественного. Реклама и обзоры (книг, фильмов) - не гарантия того, что продукт будет качественным (многие посмотрели "Параграф 78"? а рекламу к нему?).

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

4) Цена. Вы действительно считаете, что диск с экранизацией "Войны и мира" или "Мастера и Маргариты" (http://www.ozon.ru/context/detail/id/2710044/) должен стоит столько же сколько и "Трансформеры" http://www.ozon.ru/context/detail/id/3599871/? Сейчас диски стоят одинаково.

5) Защита от копирования. ВСЕ согласны с тем, что она больше мешает обычным пользователям, чем пиратам. Это во-первых. Во-вторых, честные товарищи, купившие mp3-треки, например, в магазине delit.net. Как вы докажите, что вы их именно купили?

6) Ну и последнее. Огромное количество медиа-информации недоступно в России нормальным способом. В течение последнего года я наблюдаю картину распространения иностранных сериалов с самопальным русским переводом (и озвучкой) по русской части интернета. Причем явление принимает массовый характер. Причина? БОльшая часть эти сериалов - действительно интересна, но (!) на русский язык официально не переводилась. Даже если повезет, отдельные сериалы транслируемые по ТВ смотреть невозможно чисто физичесик: они показываются в неудобное для большинства время + по схеме 10 минут фильма/15 минут рекламы.
И это только самое заметное. Еще 4 года назад было _физически невозможно_ раздобыть отчественные фильмы советсткого переиода на ДВД. Их не существовало. Любимый фильм "Гардемарины - вперед!" я был вынужден записывать с ТВ, поскольку иных способов получения данного фильма, а тем более - законным путем я так и не нашел.
Сейчас наблюдается точно такая же картина с фильмами иностранного производства и сериалами, не являющимися блокбастерами.

В свете всего вышеперечисленного я качал, качаю и буду качать медиа-информацию из сети. И только после самостоятельного просмотра/прослушивания/прочтения я куплю скачанное произведение. Именно поэтому у меня есть все книги Лукьяенко, но нет книжек Глуховского. Я бы с удовольствием купил книжки Бурцева - но их нет в продаже


P.S.: имхо, медиа индустрия в целом из средства распространения информации и развлечения уже давно превратилась в средство обмана покупателя и выманивания из него денег.

P.P.S.: про софт я вообще говорить не хочу. Хуже качеством товара в мире нет.