February 2008 Blog Posts

LINQPad

28 February 2008 |

Замечательный инструмент для написания и отладки LINQ запросов. Можно напрямую подключиться к базе данных и тренироваться в использовании LINQ2SQL. Если вы не сильны в LINQ, то с помощью этого инструмента Вам будет легче изучить его. Если Вы уверенно владеете этим языком, то Вам будет легче писать обычные SQL запросы. Microsoft вложила много сил, чтобы LINQ запросы наилучшем образом транслировались в SQL запросы. Такая функциональность может сильно помочь, если знания LINQ превышают знания SQL.

Чрезвычайно полезный инструмент, рекомендуем.

Getting Real

26 February 2008 |

"Старые песни о главном..."

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

Сказать что не применимы легко, а вот предложить конструктивное решение тяжелее. Вначале были команды "профессионалов" основным преимуществом которых было умение "забивать" на формальные методики, спецификации и благодаря этому добитсья результата. Позже появился термин Agile и как следствие семейство методик. До сих пор не найдено "правильной" методики, и это не удивительно потому что её нет. Или можно сказать, что смысл правильной методики разработки ПО заключается в признании того, что правильной методики разработки ПО не существует. Реальная практика использования методик XP, SCRUM, только подтверждает это.

С другой стороны по жизни приходится снова, снова и снова повторять, убеждать, разъяснять эти "особенности" производства ПО. После определённого количества повторений разговоров, начинаешь чувствовать себя попугаем. Помочь преодолеть такое чувство может прочтение новых книг, статей которые рассматривают то же самое, но под немного другим углом, с немного другой терминологией. Если вы услышали, что появилась новая методология прочтите книгу по ней, вы не узнаете ничего нового, но оживите свою память, узнаете дополнительные аргументы, примеры, итд...

Замечательным примером такой книги является книга по "новой" методологии Getting Real, книга написана лёгким языком, её приятно читать, и в ней нет откровенной ерунды. Рекомендую почитать, увлекательно, возможно вы найдёте там то, что давно знали но не знали как сказать.

Bank Cards Trap

20 February 2008 |

Кредитные карточки давно уже стали привычны людям. Тем важнее моменты на которые стоит обратить внимание.

Вот к примеру у Вас есть кредитная карточка, с оплаченным за обслуживание сроком действия в 2 года. Вы получили эту карточку в качестве подарка при крупной покупки или она у Вас осталось с предыдущего места работы. Важно, что после истечения срока действия она Вам не нужна. Что вы будете делать когда срок ей действия закончится, если конечно об это вспомните? Большинство людей решит, что надо до этого срока снять деньги, и использовать карточку как закладку для книг. Внимательные и осторожные поинтересуются протоколом закрытия карточки в службе поддержки или на сайте банка, и они будут правы.

Такой случай произошёл со мной, была карточка Райффайзен банка, срок действия которой истекал. Позвонил в службу поддержки и был удивлён, когда узнал что карточка будет автоматически перевыпущена, соответственно оплата за обслуживание будет взята, и перевыпущенную карточку надо будет забирать в том отделении, где выдавали текущую. Чтобы избежать перевыпуска надо лично придти в отделение и написать заявление за 10 дней до окончания срока действия. Вот какими временными и моральными потерями может обернуться безобидное владение карточкой.

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

Static Text Label Contorol

17 February 2008 |

Содержание этой заметки тесным образом связанно с заметкой посвещённой свойству GenerateMember WinForms контролов в Visual Studio. Предпосылкой послужила попытка использовать свойство GenerateMember на практике.

Самый очевидный пример использования GenerateMember это контрол Label содержащий статический текст, к которому нет необходимости обращаться программно. Каждый раз при конструировании формы выставлять значение false у свойства GenerateMember для всех Label контролов, утомительно и навряд ли вы в реальной жизни будете этим заниматься. С другой стороны на практике часто используются контролы наследованные от стандартных, или есть возможность использовать их. Возникает желание создать контрол наследник от Label такой, чтобы у него значение свойства GenerateMember по умолчанию было false, естественно при этом должна сохранятся возможность изменить значение этого свойства.

Чем проще задача тем сложнее решение. Здесь как раз такой случай, решение которое у меня получилось для этой задачи можно посмотреть здесь не очень элегантно, но работает.

LINQ foreach And ForEach

14 February 2008 |

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

Предположим у Вас есть запрос к данным и для каждого элемента результирующего набора необходимо выполнить какую либо операцию. Вопрос как это сделать? Чтобы не быть голословным приведём пример:
var array = new int[] { 12, 3, 5, 345, 76, 8, 9, 0, 45, 87 };
var q  = from item in array select item;

Теперь для каждого элемента результата запроса мы хотим применить какое либо действие, это можно сделать двумя способами:
foreach (var item in array)
    Console.WriteLine(item.ToString());
либо так:
q.ToList().ForEach(item => { Console.WriteLine(item.ToString()); });
Второй способ совсем не надуманный использование конструкции ForEach имеет множество преимуществ, при наличии большой практики вы наверняка будете предпочитать именно её. Всё хорошо, только есть одно но, вторая конструкция работает где-то на 30%-40% медленней. Не стоит её использовать. Вместо этого лучше написать расширение и пользоваться им:
public static class IEnumerableGenericExtention
{
    ///
<summary>
    ///
Performs the specified action on each element of the Enumeration.
    ///
</summary>
    ///
<typeparam name="T"></typeparam>
    /// <param name="iEnumerable">Enumeration.
</param>
    /// <param name="action">The System.Action<T>
delegate to
    /// perform on each element of the Enuveration<T>.
</param>
    public static void ForEach<T>(this IEnumerable<T> list, Action<T> action)
    {
        if (action == null)
            throw new ArgumentNullException("action");
        foreach (var item in list)
            action(item);
    }
}

Код соответственно будет выглядеть так:
q.ForEach(item => { Console.WriteLine(item.ToString()); });
при этом вы ничего не теряете в производительности.

GenerateMember Property Of Control

14 February 2008 |

У контролов WinForms при редактировании в VS доступно логическое свойство GenerateMember. Говорящее имя. А, что оно делает и зачем оно нужно?

Все очень просто и полезно, к примеру вы создали форму и разместили на ней label, со статическим текстом. Вполне обычная ситуация. Теперь в теле формы, IntelliSense будет вам предлагать чего нибудь типа this.label1, что скорее всего вам и не нужно. Свойство GenerateMember предназначено именно для борьбы с этим злом. Установка этого свойства меняет способ генерации кода.

Вот так выглядит код, при значении False:
private void InitializeComponent()
{
    System.Windows.Forms.Label label1;
    label1 = new System.Windows.Forms.Label();

А вто так при значении True:
private System.Windows.Forms.Label label1;
private void InitializeComponent()
{
    this.label1 = new System.Windows.Forms.Label();

Все просто и полезно...

TV, НКС и другие...

13 February 2008 |

Где-то месяца 2 назад, в квартиру позвонили монтёры попросили доступ к щитку на лестничной клетке. На вопрос: "А чего-собственно хотите?". Последовал ответ: "Плановая замена телевизионного кабеля". Ну что наши маленькие друзья, попробуйте догадаться где здесь подвох. То что подвох здесь есть, понятно было бы даже собаке "Павлова" если бы она пожила в нашем государстве некоторое время. Есть он хотя бы по тому, что никто никогда просто так планово исправные телевизионные кабеля не меняет.

NKS

Прошёл месяц, получаю квитанцию из ЕИРЦ, в которой плата за обслуживание общей телевизионной антенны увеличена в 2 раза. Повышение обосновывалось тем, что телевизионных каналов стало больше. Выяснилось, что это всего лишь навсего ещё один способ относительно честного отъёма денег у населения. Весь механизм и перипетии этого дела рассказывать не буду. Почитайте здесь и здесь. Интересно и поучительно, вот именно таким способом и зарабатываются деньги на покупку островов в Карибском море. Не пожалейте времени вчитайтесь, особенно вторая ссылка, это классический pattern современного российского бизнеса.

Cayra Maps

10 February 2008 |

Смею предположить, что вы знакомы с таким понятием как Mind Maps. Это хорошо пропиаренная технология, суть которой визуализировать информацию, как правило речь идёт не о формализованных данных, а о мыслях, идеях, понятиях.

Как и любая другая хорошо разрекламированная вещь Mind Maps, содержит рациональную идею. Здесь она заключается в старой доброй истине: лучше один раз увидеть, чем сто раз услышать. Main Map - хорошая иллюстрация к тексту, но не более того. Хорошая иллюстрация помогает запомнить содержание текста и охватить его одним взглядом. Если вы пользуетесь ручкой и бумагой, то Mind Map еще может помочь размышлять, но к программным средствам это не относится. К сожалению из-за шумихе проблемно было найти простой и бесплатный инструмент. Случайно наткнулся на программу Cayra Maps, которая подходит по этим критериям. Если у вас есть желание оживить текст, то иллюстрация сделанная с помощью этого приложения может дать хороший результат.

Программа рисует достаточно красивые картинки, но имеет проблемы Usability. Перед использованием необходимо по диагонали прочитать руководство иначе понять, как что сделать достаточно проблематично. Любопытно так же заметить, что приложение реализовано на технологии .NET Framework 3.0 WPF. Очень разумное решение в данном случае, это замечательная замена GDI+ для рисования карт, но все останольное можно было бы сделать с помощью WinForms, когда начнёте использвоать то поймёте почему.

cayraAbout

WCF Exception Handler

08 February 2008 |

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

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

Radiospots

07 February 2008 |

Вы знаете что такое радиоточка? Вы платите квартплату? Вы платите за радиоточку? Вы ей пользуетесь? Скорее всего ответы на эти вопросы будут Да, Да, Да, Нет. Нетрудно догадаться, что заметка посвящена очередной кривости мироустройства.

Действительно какая то глупость, вы каждый месяц оплачиваете услугу, которой не пользуетесь и навряд ли будете пользоваться. А ведь существуют способы изменить мир, и дело тут даже не в деньгах, они действительно не большие (24 руб в месяц), а в гигиене. Пространство взаимодействия с обществом, так же как и жилое пространство должно содержатся в порядке. Подробнее о проблематике вопроса можно посмотреть здесь.

Все бы это может и не следовало писать, если бы не желание поделится своим Case Study. Да я отказался от этой услуги. Для этого было подано заявление, назначена дата прихода мастера, пришёл мастер дал справку, что радиоточка отключена, справка отнесена в ЕИРЦ. В результате на морде моего мира появилась ещё одна маленькая человеческая черта.

Честно говоря было бы здорово, если бы все кто не пользуется радиоточкой отключили бы её. Мы даже готовы Вам в этом помочь. Для этого от Вас потребуется поставить роспись на заявлении (шаблон могу выслать), отвезти заявление по адресу: м. Семеновская, ул. Семеновский вал,4., в назначенный день быть дома с 8 до 18, получить справку от мастера, отнести справку в ЕИРЦ. Мы Вам можем помочь с шаблоном заявления и с тем, чтобы отвезти справку куда надо, выступить в роли курьера, если наберётся достаточное количество желающих. Остальное требует ваших личных усилий.

The Brain

01 February 2008 |

Недавно вышла книга о том как работает мозг и как человек думает. Это книга Jeff Hawkins "On Intelligence". Вышла - звучит громко, вообще книга появилась достаточно давно, и прочёл я её тоже достаточно давно, вот только была она на английском языке. Теперь появилась возможность прочесть её на русском.

Это одна из немногих книг, которую обязательно нужно прочитать. Знания и мысли полученные при её прочтении останутся актуальны на протяжении всей вашей жизни. Время и силы затраченные на прочтение этой книги, не только окупятся но и принесут вам пользу.

Благодаря информации, изложенной в этой книге, у вас наверняка повысится осведомлённость относительно своего поведения. Вы сможете детально анализировать свои реакции и приходить к выводу: "Я понимаю, что сейчас произошло у меня в голове".

Это лучшее, что я читал по этой теме. Надеюсь вы понимаете, что я бы не стал так горячо советовать прочитать, какой нибудь наукообразный бред, или другую ерунду. Хотелось бы верить, что вы прочтёте эту книгу... к сожалению заставить вас это сделать я не могу.