January 2008 Blog Posts

VS Code Metrics Lie

30 January 2008 |

В VS2008 добавлена замечательная возможность Code Metrics. Используя этот инструмент можно узнать количество строк кода (Line Of Code). Вот только полагаться на это значение нельзя, потому как врёт.

Если вы создадите проект и в нем создадите типизированный DataSet и расширите функциональность сгенерированных классов, используя возможности partial классов. А после всего это попытаетесь узнать количество строк кода, то увидите, что строки кода которые вы написали не будут учтены. Многое зависит от стиля программирования, но к примеру у меня очень много кода написано именно таким образом.

Господа начальники, если вы все таки используете метрику LOC, то используйте её аккуратно. "Лучше в человеке семь раз ошибиться чем один раз подумать о нем несправедливо плохо".

LabelEdit In TreeView

25 January 2008 |

Очередной баг в WinForms. У элемента управления TreeView есть логическое свойство LabelEdit, оно отвечает за возможность редактировать текст узлов. И есть событие AfterLabelEdit, которое происходит, когда пользователь заканчивает редактировать текст узла. И вот именно в этом событие и кроется проблема, дело в том, что если в обработчике этого события изменить набор узлов, то TreeView сохранит состояние редактирования и будет продолжать в нем прибывать.

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

Интернет переполнен стенаниями людей по этой теме, но решений либо нет либо они уж очень тяжеловесные. Согласитесь что эмулировать эту функциональность с помощью WinApi на 200 строк кода или покупать сторонний контрол за 50$ - не выход. Решение пришлось искать самостоятельно и оно было найдено. Проявление этой проблемы и её решение записано на видео. Возможно кому-то это поможет.

Social Net

25 January 2008 |

сам Пастернака не читал, но осуждаю ..."

Социальные сети в нашей стране сейчас переживают бум. Это действительно бум, за последнюю неделю слышал о двух начинаниях в создание новой социальной сети. Есть много общих черты с интернет бумом или с ситуацией вокруг финансовых пирамид в 90-е годы. И на основе этого можно сделать прогноз, что всё это рухнет, и как обычно самые "трезвые" получать прибыль, а все остальные её обеспечат. Сам я не являюсь знатоком и активным участником социальных сетей, именно поэтому всё кажется диким. Это как быть трезвым на пьянке с друзьями.

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

Power Of Lunatics

21 January 2008 |

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

Источник

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

Windows System Clock

20 January 2008 |

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

С чего все началось: Был тихий субботний вечер. Я прибывал в ленивом, умиротворённом настроение и занимался тем что менял темы Windows (Бывают такие минуты тупизма). И вот меняю тему Windows с "Windows XP" на "Классическую" обнаружился интересный факт. Если установлена тема "Windows XP", то системные часы отображают время, дату и день недели, а при изменении темы на "Классическую" только время и дату. Панель задач располагается внизу и состоит из двух строк. Бывает такое, что какая то мелочь становится важной и тебе во чтобы то ни стало хочется добиться своего, в народе обычно говорят в таких случаях "из прицинпа". Вот и мы тоже не захотели мирится с таким порядком вещей.

Исследования показали, что стандартными средствами Windows с этим не справится. Зато обнаружилось нестандартное средство, в виде стороннего, которое удивило меня своей продуманностью, элегантностью и мощью.

Программа эта понравилась мне сразу, особенно ее принцип работы: вместо того, чтобы создавать в system tray’е какие-то иконки с циферками, вместо того, чтобы болтаться маленьким окошечком где-то на экране, эта программа перехватывает стандартные часы Windows и выводит информацию на их месте и с их использованием. В общем, автор уверяет, что это все очень круто, и в принципе я с ним согласен. Кроме стандартного времени можно отображать загрузку процессора, памяти и еще много чего. Кряк вам не понадобится, потому что она freeware. (Цитата, отсюда) ExtSystemClock

Сейчас мои системные часы выглядят так:

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

Why WF and not WWF?

18 January 2008 |

Смотрел на досуге видео с Платформы 2008 (SA-A 201 SOA, BPM и Майкрософт – взгляд прагматика). Лёгкое видео, не требующие особого внимания или интеллектуальной деятельности. Воистину пути Господни неисповедимы, именно из этого видео узнал ответ на вопрос, который меня мучил, но ответ на который искать было лень.

Почему Windows Workflow Foundation сокращается как WF, а Windows Comunication Foundation как WCF или Windows Presentation Foundation как WPF?

Чувствуете ошибку, вместо (WF, WCF, WPF) должно было бы быть (WWF, WCF, WPF). Без этого мир приобретает какую то дисгармонию. Насколько очевидна непоследовательность в аббревиатурах настолько очевиден и ответ на вопрос почему. Дело в том что аббревиатура WWF уже используется организаций: "Всемирный фонд охраны дикой природы". И если бы Microsft стало использовать WWF вместо WF, ей бы пришлось в нагрузку защитить эту самую дикую природу или приобрести риски быть засуженными этой организацией. Именно такое объяснение дал David Chappell, в этом вопросе ему вполне можно доверять.

Msdn Reader

17 January 2008 |

В одной из предыдущих заметок рассказывалось о Architecture Journal Reader. И вот неожиданно быстро эта тема получила развитие. Образовалась целая линейка продуктов. И даже появилось SDK поддерживающая разработку подобных приложений. Многие издательства воспользовались этой возможностью и выпустили читалки (reader) для своих журналов и газет. К примеру New York Times и Forbes.

И конечно Microsoft тоже продолжает играться с этой идеей, свидетельство чему её продукт MSDN Reader, предназначенный для чтения журнала MSDN.

.NET Framework Source Code In VS

17 January 2008 |

В конце прошлого года прошла информация о том, что Microsoft откроет исходные коды некоторых библиотек .NET Framework. Помнится эта новость тогда удивила или по крайней мере заинтересовала многих.

Сейчас наступил момент, когда вы сможете воспользоваться исходными кодами в практических целях. Ничего такого принципиально нового не появилось, чего бы вы не могли делать до этого с помощью Lutz Roeder's Reflector. Стали доступны комментарии сделанные в коде, повысилось удобство работы: прямо из VS в режиме отладки. Одним словом люди практикующие разработку должны оценить.

Информации о том как этим воспользоваться довольно много, я рекомендую посмотреть 20 минутное video или, а если есть желание и время то и "и", прочитать здесь.

Internet in space

11 January 2008 |

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

Information society and simple man

10 January 2008 |

Информационное общество - концепция постиндустриального общества; новая историческая фаза развития цивилизации, в которой главными продуктами производства являются информация и знания. Отличительными чертами информационного общества являются:

  • увеличение роли информации и знаний в жизни общества;
  • возрастание доли информационных коммуникаций, продуктов и услуг в валовом внутреннем продукте;
  • создание глобального информационного пространства, обеспечивающего (а) эффективное информационное взаимодействие людей, (б) их доступ к мировым информационным ресурсам и (в) удовлетворение их потребностей в информационных продуктах и услугах.

Термин "Информационное общество" всё глубже проникает в жизнь людей. И вот "информационное общество" коснулось меня своими щупальцами совсем с неожиданной стороны.

Недавно узнал о забавном событие, косвенным участником которого я являюсь. В моей трудовой биографии есть запись, согласно которой я работал в компании IBS (ИБС), и действительно я там работал. Работал не долго, бежал с испытательного срока, но это уже другая история. Важно то, что как и в любой достаточно большой "организации" обо мне собрали персональные сведения, включая и мою фотографию. И вот по прошествии года знакомые начинают задавать вопросы, смысл которых сводится к тому, что ты вернулся работать в IBS, ты теперь работаешь у нас, и тому подобные. Эти вопросы приводили меня в замешательство, никто и никогда не мог бы заподозрить, что я собираюсь работать в этой компании. После небольшого расследования выяснилось, что причина таких настоятельных расспросов заключалась в том, что в компанию устроился человек с таким же именем и фамилией как у меня. Казалось бы ерунда, событие хотя и редкое, но вполне вероятное. В информационном обществе такое пустяковое событие, может вылиться в совсем не пустяковые проблемы. В моем случае, на профиль этого нового человека просто присобачили мою фотографию. Так я появился в списке новых сотрудников. Слава богу, что детальная информация в профиле относилась все таки к настоящему новому сотруднику.

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

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

Methodology = F(people, environment)

10 January 2008 |

Методология = СредаЛюди

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

Часто приходится наблюдать когда руководство или сама команда выбирает, какую либо методологию. Но по прошествии некоторого времени становится понятно, что либо работа идёт не эффективно, либо вопреки методологии. А происходит это из-за наплевательского отношения к законам природы, особенно диалектики и непонимания теории эволюции.

- Что же делать, как мне быть, как тебя мне полюбить?
- Надо асфальтировать дорожки там где протоптаны тропинки.

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

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

Save web page to file

08 January 2008 |

Возникла задача, сохранить веб-страницу в файл. Обычно это делается из браузера, но если эту задачу необходимо автоматизировать, то возникают сложности.

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

В результате получилась консольная утилита SaveWebPage, которая сохраняет страницу на жесткий диск в файл формата .mht. К примеру для того, чтобы сохранить весь этот блог в отдельный файл, достаточно выполнить команду: SaveWebPage.exe http://dalexs.blogspot.com/search?max-results=1000 C:\ShareMind.mht После чего вы станете счастливым обладателем локальной копии блога. А если серьезно, то это задача из реальной жизни, и возможно вы тоже столкнетесь с ней.

WCF Eventing in practice

06 January 2008 |

В одной из предыдущих заметок описывались новые возможности WCF. Eventing - позиционировалось как самая революционная feature WCF.

Для того чтобы быстро и просто перейти от теории к практике, достаточно ознакомиться со статьей. На практике в представленную в статье модель организации работы с событиями, полезно будет добавить, понятие sender и фильтры.

Sender - отправитель события, это может быть комбинация из идентификатора машины, идентификатора приложения и идентификатора метода/компонента из которого вызвано это событие. Эта служебная информация унифицирована для всех событий и может быть использована для фильтрации событий на уровне сервера и для обработки событий на клиенте.

Фильтры. В стандартной модели подписчик подписывается на событие, и получает вызов каждый раз, когда это событие происходит. Событие как правило содержит в себе какие либо данные, и часто именно по ним происходит фильтрация события в самом обработчике события. Эта модель замечательно работает, но в случае с WCF накладные расходы на передачу событий всем клиентам, в некоторых случаях, могут оказаться слишком большими (здесь имеются в виду расходы связанные с сериализацией, десериализацией и передачей сообщения по сети). Поэтому возникает необходимость отфильтровать события на уровне сервера, для этого при подписки на событие клиент может указать дополнительно фильтр и его параметры.