вторник, 29 декабря 2009 г.

Use Case Diagrams

Интересно, это только я думаю, что Use Case Diagram в UML - вещь не только бессмысленная, но и вредная?

Что перечень сценариев и вовлеченных ролей проще и понятнее описывать в виде таблицы?

Что UCD без детального описания сценариев не имеет смысла, а с описанием - избыточна?

Что с заказчиком диаграммы Use Case непосогласовываешь?

Что отношения сценариев использования на обзорной таблице абсолютно бессмысленны и дезориентируют, что их лучше описывать непосредственно в описании сценария?

среда, 23 декабря 2009 г.

Обновление HTC Hero

Ну вот что, ЧТО заставляет людей писать вот такие описания в апдейте своего ROM

"As always, HTC is committed to providing customers with the best possible mobile experience. "

http://www.htc.com/uk/SupportViewNews.aspx?dl_id=671&news_id=254
это весь ихний дескрипшн. Что я из него должен понять?

понедельник, 14 декабря 2009 г.

UI: дружественная отработка неправильной раскладки клавиатуры

Чего хотелось бы от UI будущего – чтобы ситуация “пользователь забыл переключить раскладку” отрабатывалась бы как-нибудь дружественно.

То есть если у пользователя установлены английская и русская раскладки, и пользователь в поле поиска набрал “gbdj”, то система искала бы и “gbdj”, и “пиво”. В идеале, конечно, хотелось бы отработки и ошибок скорописи – перепутанных бкув, опеяаток, связанных с близкорасположенными клавишами и другого. Но хотя бы – отработка ситуации неверной раскладки.

Где нужно поддерживать:

* Всевозможные формы поиска
* Горячие клавиши, shortcut-ы
* Auto complete списки

суббота, 21 ноября 2009 г.

Про дизайн команды SQL WHERE

Встретил на bash-е:
“DileSoft: У команды UPDATE есть одна серьезная дизайнерская ошибка. Если скомандовать UPDATE table SET field=value, изменятся все строки в таблице table. Чтобы изменились не все, следует добавить WHERE. Это провоцирует серьезные проблемы, когда, забыв о WHERE, можно порушить огромное количество данных.

urandom: У дверей есть серьезная дизайнерская ошибка. Если прищемить яйца дверью, то яйца отвалятся.”
Мне очевидно, что комада WHERE спроектирована плохо, потому что синтаксис команды не защищает пользователя от ошибки (дает zero fool proof). Понятно, что “исторически сложилось”, “уже не поменять” и т.п. Я сейчас о другом.

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

С одной стороны, мы можем написать в help-е сайта, о том, что отсутствие товаров в корзине подразумевает выбор всех товаров, но с точки зрения нормального человека это нонсенс. И сколько было человеко-часов потрачено на исправления ошибок с пустым where – могу себе представить.

Думаю, что гораздо разумнее было бы задизайнить WHERE clause следующим образом:

1) Пустое WHERE возвращает пустор набор элементов;
2) WHERE с фильром ограничивает возвращаемые данные этим фильтром;
3) Специальное сочетание “WHERE ALL” возвращает весь набор элементов без фильтра.

В этом случае семантика клаузы WHERE была бы максимально приближена к естесственным языкам (что кстати и было одной из целей дизайнеров SQL).

А теперь про “яйца отвалятся”

Оппонент DileSoft-а показывает нам пример обычного, обывательского подхода: “Некто говорит нам что вещь, привычная и принятая в нашем обществе – неправильна –> Стебать этого самого некто”. Классическая травля несогласных в мини-масштабе.

Налицо позиция “то, что принято, оптимум есть”. А это ведь не так (почти всегда). И изменяют мир к лучшему как раз такие, как DileSoft, которые способны заметить и понять, что это не так.

Типа послесловия
Буквально неделю назад мы словили очень похожий баг в нашем продукте – API было спроектировано так, что некая бизнес операция применялась для всех клиентов в случае, когда не был указан фильтр.

В результате, из-за редкой ошибки в коде формирования фильтра (закончилось место на диске) он не был сформирован и вся наша команда получила незабываемые выходные, проведенные под знаком “руками все исправить быстро срочно”.

А вы говорите, WHERE…

понедельник, 16 ноября 2009 г.

Обзор: Телефон HTC Hero с интерфейсом Touch Sense или "Android, превед!"



Как некоторые уже знают, я после того как потерял свой iPhone на склонах Чегета, где-то с год не мог выбрать себе нового телефона, в результате чего пользовался Старой Нокией (tm), совершенно неубиваемой и удобной.

После iPhone ты уже не можешь купить обычный телефон – ту же нокию или sony ericsson – берешь телефонку в руки, крутишь, вертишь, нажимаешь какие-то кнопки, а потом плюешь и уходишь из магазина – ну нафиг такое счастье. Все как-то не так.


среда, 11 ноября 2009 г.

Наводим порядок в разработке ПО вместе с maven

Хорошая статья о многих частях, описывающая Maven – средство управления жизненным циклом приложений из мира Java.

четверг, 29 октября 2009 г.

Как отправлять почту через Google Mail с сайта ASP.NET

Грабли, которые подстерегают человека, которому надо отправить почту через почтовый домен, хостящийся на google apps из .net-сайта. Грабли описаны на примере встроенных в фреймворк классов из пространства System.Net.Mail.

1) Надо обязательно использовать TLS/SSL. В web.config это выглядит так:

<system.net>
    <mailSettings>
        <smtp from=from_person@domain.com deliveryMethod="network">
            <network host="smtp.gmail.com." port="587" userName=from_person@domain.com password="PASSWORD"/>
        </smtp>
    </mailSettings>
</system.net>

2) Кроме того что в конфиге надо правильный порт сказать, в коде надо проставить свойство EnableSsl у SmtpClient (не знаю, почему это не вынесено в <mailSettings>

private static void internalSend(SmtpClient smtp, string email, MailMessage mm)
{


smtp.EnableSsl = true;
smtp.Send(mm);

}

3) На хостинговом сервере может не пройти проверка сертификата SMTP сервера. Я решил этот вопрос радикально – отключил проверку:

public static bool ValidateServerCertificate(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}

private static SmtpClient getSmtpClient()
{
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

    return new SmtpClient();
}

4) Сам почтовый аккакунт, из-под которого отправляется почта, должен быть активирован в гугле. Это значит, что

  • запись для аккаунта создана в контрольной панели google mail
  • под самим аккакнтом на gmail заходили хоть раз
  • в свойствах аккаунта стоит разрешение подключаться по POP3/SMTP

И даже после этого у вас может получиться отправлять почту совсем не сразу. У меня например гугль начал отсылать письма где-то через день после того как я под аккаунтом залогинился в gmail. Наверное, что-то обсчитывал :-)

четверг, 22 октября 2009 г.

Con10uum

На Кулере нашел – концепт нового оконного менеджера будущего, используюшего десятипальцовый touch pad.


10/GUI from C. Miller on Vimeo.


Всем юзабелистам однозначно смотреть


Остается правда вопрос – что делать одноруким :-)

понедельник, 19 октября 2009 г.

RUB и RUR

Век живи, век учись:

Оказывается, международный код (по ISO 4217) рубля - это RUB а не RUR. Код RUR использовался для означения рубля до деноминации 1998 года.

таким образом, "по правильному" 1 RUB эквивалентен 1000 RUR.

"The ISO 4217 code is RUB; the former code, RUR, refers to the Russian ruble prior to the 1998 denomination (1 RUB = 1000 RUR)."

Источники:

воскресенье, 18 октября 2009 г.

.Net 3 - Сила методов расширения

Методы расширения (Extension Methods) это простой такой трюк компилятора, который позволяет программисту добавлять свои собственные методы к уже существующим классам.
Естесственно, чтобы не нарушить защиту класса, методам расширения недоступны “кишки” класса, к которому они пристраиваются. Метод расширение обязан пользоваться существующим публичным контрактом.
Фактически, это такой способ подстроить синтаксис уже существующей библиотеки/фреймворка “под себя”, уменьшив количество кода, которое нужно написать для реализации требуемой функциональности (любители Nemerle меня поймут :-)
Передо мной недавно встала следующая задача: во множестве пользовательских контролов ASP.NET приложения нужно было анализировать дерево контролов страницы и выцепить из него самый первый контрол, который реализовал определенный интерфейс.
Метод FindControl для этого не подходил – я не имел возможности задавать имя контрола. В результате были написаны пара методов-раширений, которые добавляли требуемую функциональность


вторник, 13 октября 2009 г.

ReSharper 5 Overview

Парни из JetBrains в своем блоге рассказывают о том, что будет в 5-м ReSharper-е.

Выглядит о-очень вкусно, один только Call Tracking это какая офигенная штука. Она, я так понимаю в design time анализирует откуда указанный метод может быть вызван и разворачивает это дерево вызовов. То есть – больше никаких веерных Find Usages :)

Еще из понравившегося – Move String to Resource, то есть интернационализация по одному клику, почти так же удобно как и в XCode.

С новыми технологиями тоже неплохо, обещают поддержку .Net 4.0, VS 2010, ASPNET MVC

C HighLoad++

Сейчас разработчиков с mail.ru спросили
- А как вы деплоите изменения ваших проектов?
- Как-как... отделом эксплуатации

пятница, 9 октября 2009 г.

Идеальный менеджер пакетов для .Net

Буду собирать ссылки и мысли по поводу идеального менеджера пакетов для .Net

Преамбула

.Net разработка исторически была не очень “опен сорсовой”, то есть базировалась на проприетарных библиотеках.
Microsoft делает некоторые подвижки в этом направлении – открыл исходники .Net Framework, хостит opensource проекты на CodePlex, но до совершенства еще далеко – например, в VS нет удобного способа при отладке, к примеру, NHibernate, просматривать исходный код этой бибилиотеки.
При этом OpenSource проектов для .Net просто завались – например NHibernate, Spring.Net, майкрософтовские Pattern&Practices Building Blocks etc.
Есть еще и The Mono Project, который мало того, что  сам opensource, так еще и порождает множество проектов с открытым исходным кодом.

Зачем?

Если я подключаю внешнюю библиотеку (тот же NHibernate) то мне нужно руками следить за всеми зависимостями, котоые она тянет за собой, следить за их версиями, следить за конфликтом версий и тп.

Вместе с тем в Java мире это уже все давно пройденный этап – есть Maven, который поддерживается всеми основными IDE, есть Bulildr, есть opensource репозитории, которые подцепляются без проблем. Есть Ivy the package manager в конце концов.

В Java если ты хочешь разработать проект с использованием например Hibernate или Spring Framework, ты пишешь .pom файл из пяти строчек) – и тот же Maven скачивает тебе нужные версии всех нужных библиотек, со всеми их зависимостями, со всеми документациями и пр.

Что же делать?

Ну, есть NMaven (который суть плагин для Maven), есть Byldan, есть предложенный в Хабровской статье менеджер, но как-то оно все не складывается в единую картину.
Я вижу, что идеальный менеджер пакетов должен быть:
  • Клоном хорошо зарекомендовавшей себя Java-вской библиотеки (например, того же Maven);
  • Совместимым с Visual Studio (т.е иметь плагин, аналогичный Maven integration например в IntelliJ IDEA);
  • Использоваться как в .Net так и в Mono – технологии практически идентичные, надо дружить;
  • Иметь репозиторий проектов, куда любой уважаемый разработчик сможет залить свой проект для публичного доступа. CodeHaus и Sonatype Nexus – идеалы для подражания.
Но самое главное, как обычно, не технологии. Самое главное – показать .Net сообществу, что подход, принятый в Java мире, отлично подходит и для мира дотнетовского.
Вообщем, тема для размышлений богатейшая.

PS - Вот обсуждение на Хабре (комментарии тоже интересные)
http://habrahabr.ru/blogs/net/68453/
PS2 - Сравнение подходов Java/.Net на RSDN - http://rsdn.ru/forum/flame.comp/3275597.aspx
PS3 - посмотреть NPanday
PS4 - обсужение на stack overflow

Полезно? Интересно? Скучно?

Нашел в Блоггере (и с радостью установил к себе) кнопки обратной связи (я вообще большой любитель любой обратной связи )

Так что теперь у каждой статьи появился такой вот блок с галками:

image

Захочется поставить отзыв – не отказывайте себе :-)

среда, 7 октября 2009 г.

Несколько советов начинающему eBay-щику

… и владельцу карты Альфа-банка

image

  1. Если у вас карта Альфа-банка, не пытайтесь привязать аккаунт PayPal к обычной карте! PayPal делает пробную транзакцию на доллар, потом говорит

    “We were unable to verify this credit card. Please check if the information you entered is correct. If the problem persists, please try to enter a different credit card.”

    Вообще, дальше надо вводить код из референса транзакции, но код ввести нельзя.

    При этом, доллар-то списан! Я вчера таких долларов несколько уже списал, буду писать в paypal и требовать их обратно :)
  2. Виртуальная карта Альфабанка привязывается идеально, по факту с ней все получилось. Единстенное “но” – код для привязки в Альфа-Клике не показывается, нужно звонить к ним в техподдержку, вводить телефонный пароль (если нет, они его вам по телефону выдадут), объяснять ситуацию – и милая девушка скажет код по телефону. Код в результате подошел :)

Теперь про собственно покупки – среди продавцов электроникой, бесплатно доставляющих в Россию, несметное множество китайцев и тайваньцев. Судя по всему все они накручивают себе рейтинг, отправляя друг другу фидбеки вида “Excellen transaction, great seller, A+!”.

image 

Рабочая теория: не надо смотреть на позитивные отклики, надо смотреть (и читать) отрицательные и нейтральные.

image

Лучше страницу откликов развернуть на максимальные 200 откликов/page (фильтра по типу там нет) и смотреть, чем люди были недовольны и как продавец реагировал

Совсем нет отрицательных (и нейтиральных) откликов – странно. Может вообще человек не торгует?

Если плохих отзывов много (например, >5 за месяц) – я бы поостерегся у такого покупать.

 

Батарею к ноуту я заказал, посмотрим что будет, когда ее пришлют через две недели…

Debugging Tools – как открывать дампы из Explorer-а (.Net Framework 2.0+)

Всем хорошего дня!

Недавно пришлось опять плотно поработать в дампами ASP.NET-овского сайта, снятыми при помощи UserDump.

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

  • Open WinDbg
  • Copy длиннючий путь к sos.dll, сказать .load …\sos.dll
  • Open в WinDbg файл с дампом через control-d

Как результат, я начал гуглить на тему скриптов для дебаггера, и нашел чудную статью Carlo Cardella под названием “Never Doubt My Debugger”.

В статье было написано, как настроить WinDbg так, чтобы открывать файлы дампов .dmp в Эксплорере одним кликом (при этом, самостоятельно загрузив еще и sos.dll (sic!):

dbgexp

К сожалению, один-в-один его скрипты не запустились, поэтому я их чуть-чуть подправил, и выкладываю здесь для всеобщей пользы:

Установка

Все что нужно, это скопировать скрипты в каталог C:\Program Files\Debugging Tools for Windows (x86)\scripts (каталог надо создать) и запустить файл register.reg, который добавить в реестр правильнуб команду на открытие .dmp файлов.

Внимание!

Скрипт расчитывает на следующее:

  • Debugging Tools установлены в каталонг C:\Program Files\Debugging Tools for Windows (x86)
  • используется sos.dll из .Net Framework 2.0 или выше по пути c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

Соответственно, если вы установили отладчик в другой каталог или у вас другой номер сборки .Net Framework, нужно подправить файлы dbgnet20.txt и/или register.dbg

вторник, 6 октября 2009 г.

Мигрирую на feedburner

Играюсь с фидбернером, adsense и фидовой отчетностью. Настроил редирект на FeedBurner

Читатели! Если у кого появятся проблемы с RSS, дайте пожалуйста знать.

Рабочее место Юры Скалецкого

image
Наконец собрался рассказать о том, как устроено мое рабочее место. Относительно недавно – с полгода назад – я, как мне сейчас кажется, пришел наконец к идеалу.
Я настроил мое рабочее место так, что мне все в нем нравится.
Самое главное, чего мне удалось достичь – я теперь могу быстро выполнять рутинные задачи. Я быстро могу запустить нужную мне программу, быстро открыть плейер, быстро включить или выключить музыку, изменить громкость звука, залезть на какой-нибудь сайт. Больше компьютер в повседневных задачах меня не тормозит.
При выборе часто используемых программах я отказался от мегакрасивости и суперуниверсальности в сторону минимального размера в памяти и быстрого старта. Это сильно улучшило мое настроение.

Ноутбук

Все мое рабочее место умещается в одном Lenovo ThinkPad T-61. До этого я жил на ASUS-ах, но после перехода на IBM/Lenovo я понял, что ASUS ноутбуки делать не умеет. А IBM вот умел и Lenovo не разучилась еще, к счастью.
Самое прекрасно в Lenovo – правильный предустановленный софт. В нем практически все правильно:

понедельник, 28 сентября 2009 г.

Дело о тормозящем Internet Explorer 8

Перелез с IE8 на Хром и Мозиллу. Точнее, не совсем перелез, а низвел браузер из статуса "запускаю для просмотра любого сайта" в статус "открываю, только когда в FireFox и Chrome не работает". Реально задрал.

Две основных претензии:

* Крайне медленно запускается. Хром в этом смысле потрясающе продуман - он запускается очень быстро. Я запускаю браузер сотни раз на дню (не мой стиль держать открытыми множество закладок, да и оперативки у меня впритык). Браузер, который запускается за 2-3 секунды явно доставляет мне больше радости, чем суперуниверсальные мегатормоза.

* Невозможно пользоваться функцией view source. Просмотровщик HTML на сложных страницах открывается больше минуты. Чем, вы думаете он занимается? Он раскрашивает теги...

Update 29.09.09: Тормозит связка html source viewer - RoboForm. Робоформ мне нужен, поэтому пока перешел на view source via Notepad ++


Update 2:
Команда RoboForm подтвердила наличие проблемы, аргументируя тем, что робоформ очень тесно связан с рендерингом html, а view source на самом деле рендерит служебный html. Рекомендация RF -- откатиться до IE7, но я вместо этого заменил стандартный просмотровщик на Notepad++

Update 3:
Поставил себе Chromium с включенной поддержкой RoboForm (да! они это сделали!). Тем самым будем слезать с Мозиллы потихонечку :-)


пятница, 25 сентября 2009 г.

ASP.NET Dynamic Data

Себе, на посмотреть
http://www.asp.net/dynamicdata/

Coming Soon...

Как лучше, так -



Или вот так -


?

воскресенье, 20 сентября 2009 г.

ADO.NET: Абстрактное vs Конкретное или "MS - почему?!"

К величайшему своему стыду всегда думал, что MS специально сделал классы ADO.NET для SQL Server и для OLE DB несовместимыми друг с другом. Только сегодня понял, что неправ.

А знаете почему? Потому что во всех примерах, по всему MSDN, во всех книжках код, работающий с ADO.NET пишется вот так:

SqlConnection connection = new SqlConnection(...)
SqlCommand command = connection.GetCommand(...)
SqlDataReader reader = command.ExecuteReader(...)
...

На самом деле, и Sql*-классы, и OleDb* классы совершенно логично наследуют абстрактную модель работы с данными, описанную в System.Data.Common. Это пространство имен предлагает семантику работы с данными через классы DbConnection, DbCommand и т.п.

И по всем правилам объектно-ориентированного дизайна код следует писать вот так:

DbConnection connection = new SqlConnection(...)
DbCommand command = connection.GetCommand(...)
DbDataReader reader = command.ExecuteReader(...)

Тогда программист может при необходимости изменить одну строчку, и перейти к примеру с SQLServer на MySQL (в теории, конечно. На практике все равно весь SQL надо будет переписать. Но тем не менее :-)

На практике - все пишут по примерам. Поиск на Google Code Search по C# коду дает :

То есть, грубо говоря, на каждого человека, который пишет обрашение к базе при помощи абстрактных классов, находится 8 (sic!) SqlServer-ных программистов, которые пишут обращение к БД посредством конкретных классов, не думая о возможной унификации кода и забывая, что существует более, чем один движок SQL.

Конспирологическая моя часть немедленно видит сдесь заговор со стороны софтверного гиганта с целью устроить всемирный vendor lock-in и ухудшить переносимость DBшного кода, писанного на дотнете.

Иначе как объяснить?

пятница, 18 сентября 2009 г.

Если используешь RAID это не значит, что не надо делать backup-ы

Вот теперь есть что показать людям, которые говорят о том, что раз RAID есть, то можно и не бекапиться:

http://gallery.ru/news/article.php?group_id=1&article_id=139

12 сентября ночью в нашем датацентре произошел серьезный сбой, при котором одна из систем хранения, которая содержала в себе изображения за последние 1.5 года вышла из строя.

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

И вот так вот легким движением летит в трубу репутация сервиса :-)

вторник, 15 сентября 2009 г.

Совершенный дизайн

Набрел на сайт http://kstatida.ru/.
Сайт, кроме общей приятности, обладает совершенным дизайном.

Совершенным.

понедельник, 14 сентября 2009 г.

Tip: Как запустить ASP.NET Development Server из командной строки

Все очень просто:

сделал себе такой вот .CMD файл для запуска примеров ASP.NET Charts

start /B C:\windows\Microsoft.NET\Framework\v2.0.50727\webdev.webserver.exe /port:12543 /path:"C:\samples\dotNet\MSChart\WebSamples" /vpath:"/"


Понятно, что точный путь к webdev.webserver.exe зависит от вашей системы


via this

четверг, 3 сентября 2009 г.

TOGAF

Себе, на почитать

The Open Group Application Framework, TOGAF

http://en.wikipedia.org/wiki/TOGAF

link: Информационный зоопарк ФМС России

http://www.fms.gov.ru/upload/iblock/03d/konc_gismu.pdf

160-страничный аналитический отчет, в котором рассказывается о зоопарке информационных систем, внедренных в ФМС России и планах по созданию единой информационной системы, которая будет все-все объединять. Интересно вот почему:

* Отчет в разделе "AS IS" описывает реально БОЛЬШОЙ зоопарк, федерального уровня, с множеством ИС, АС, АРМ-ов, баз данных и всякого прочего.
* Отчет в разделе "TO BE" рассказывает, как может выглядеть объединенная ИС. Эта часть несколько булшитна, но в принципе показывает, из каких компонентов системы такого уровня строятся. Прямо-таки готовый чеклист для архитектора больших АС - см п. 3.2.1.3.

Здесь тебе и warehouse со всеми кодификаторами, классификаторами, справочниками, и система тебе безопасности, и движок форми, и система аналитики и отчетности, и единая база пользователей, и реально развесистый ETL, который объединяет десятки различных ведомств.

Честно скажу, прочитал по диагонали

вторник, 1 сентября 2009 г.

Как вернуть поиск Google в Mozilla FireFox?

Обидели меня парни из Mozilla Foundation, тем что продвигают нечестные способы привязки к вендорам.

Браузер FireFox Начиная с версии 3.0 неожиданно для меня начал использовать в качестве поискового агента по умолчанию поисковик Популярной Российской Компании.

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

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

О ужас - нормального способа (через стандартные настройки) изменить поисковый агент вообще нет! Есть грязный хакерский

Итак, steps:

1. Открываем в окне поиска url "about:config" (без кавычек)
2. В ответ на страшное Мозиллино сообщение обещаем, что будем себя хорошо веси
3. Ищем настройку под именем "keyword.URL". Можно воспользоваться фильтром для поиска
4. Проставляем настройке keyword.URL правильное значение:

"http://www.google.ru/search?ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox&q=" (без кавычек)

Все, теперь поиск будет искать нам хороший, годный поисковик.

--
How to return Google Search in address bar in Mozilla Firefox 3.0+. This will handle proper ly national/unicode search queries

1. Open up url "about:config" (no quotes!)
2. Confirm on ugly confirmation
3. Look for setting "keyword.URL". You can use filters.
4. Change the value of keyword.URL settings to

"http://www.google.ru/search?ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox&q=" (no quotes still)

So, that's all

пятница, 28 августа 2009 г.

Code Contracts - декларативное описание параметров вызова для методов .Net

"Contracts allow you to express preconditions, postconditions and object invariants in your code for runtime
checking, static analysis, and documentation. This document covers how to author them in your code, and
contains guidelines for using them e ectively with the provided tools.
All of the contract methods are static methods de ned in the Contract class which appears in the
System.Diagnostics .Contracts namespace."
Кажется, это уже было в Smalltalk. Теперь вот возвращается :-)


http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx

http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf

Code Contracts обещают встроить в C# 4.0 и MSVS 2010. Сейчас доступен в виде библиотеки

AutoPatch .Net - how it works

Выложил на RSDN небольшой рассказ о том, как работает AutoPatch .Net

http://rsdn.ru/forum/dotnet/3518828.1.aspx

понедельник, 17 августа 2009 г.

Встречаем: AutoPatchNet with nice UI

.Net port of Tactiknowledge AutoPatch.

Доработал и выложил на Google Code исходники и инсталлятор пре-пре-альфа версии 0.0.1 .Net-овского порта AutoPatch. Авторы начали портирование, но забросили его в лохматом году.

Я довел порт до состояния, когда он уверенно патчит SQLServer-ные базы и добавил к нему консольный и WinForm-овские front-end-ы.

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

В планах - ввести пакеты для обновления БД (архив, содержащий манифест+каталоги с патчами), сделать чтобы AutoPatch UI открывал такие пакеты в один клик.

Ссылка на страницу проекта: http://code.google.com/p/autopatchnet

См также

вторник, 11 августа 2009 г.

Будущее опять наступило - самодельные спутники

http://lenta.ru/news/2009/08/03/minisats/

Это то есть обычный человек может потратить большие, но уже вполне реальные деньги, купить конструктор, запрограммировать себе спутник и отправить его почти что DHL-ом на орбиту.


Последний раз я так удивлялся, когда гугель сделал Googlr Earth :)


воскресенье, 9 августа 2009 г.

Идеальный package manager - 2

Удивительное дело, нормального opensource менеджера обновлений для БД в мире .Net похоже не существует.

Есть несколько библиотек, предоставляющих Ruby-style migrations, но это не совсем то, что мне нужно. Ближе всего к ожиданиям из готового сейчас RedGate SQLPackager, но он во-первых платный, во-вторых хочется поддержки именно жизненного цикла в духе AutoPatch.

По опыту, идеальный процесс должен выглядеть так

  • программисты работают с локальной или dev базой напрямую
  • перед началом тестирования при помощи инструмента типа SQLCompare строится дифференциальный sql скрипт между дев-базой и stage. При этом скрипт должен быть в "родном" для БД формате, чтобы не упереться случайно в недостатки фреймворка
  • этот скрипт фиксируется в репозитории и затем на основе всех скриптов обновления строится пакет для обновления БД
  • этот пакет разворачивается на требуемой базе, причем package manager должен предоставлять либо режим с ручным контролем (для боевой базы, чтобы не страшно было), либо автоматический режим (для всевозможного continious integration

Ссылки по теме

Как прочитать файл .properties из .Net

Сейчас занимаюсь доведением до ума библиотеки AutoPatch под .Net - авторы начали ее портировать, но похоже так и не довели дело до конца. Потребовалось прочитать .property файл, который записан в java формате.

Нашел для этого класс JavaProperties. Автор утверждает, что он портировал функциональность java-парсера, так что проблем с совместимостью быть не должно. С удовольствием даю ссылку:

http://www.kajabity.com/index.php/2009/06/loading-java-properties-files-in-csharp/

пятница, 26 июня 2009 г.

[link] Как прочитать параметры с биометрического паспорта

Статья, как на Java написать приложение чтобы читать данные с биометрического паспорта.

пятница, 29 мая 2009 г.

HTTP ПЫЩ

Мне кажется, назрела необходимость что-то в протоколе HTTP менять. Вот возьмем методы GET и POST - у каждого свои достоинства и недостатки.

HTTP POST позволяет передавать на сервер большие объемы данных
HTTP GET не имеет проблем с двойным post-ом.

Явно не хватает какого-то метода, который объединит в себе плюсы обоих подходов.

Название ПЫЩ еще не занято. Мне кажется, можно использовать его.

Вариант, как это можно сделать

Пример запроса

ПЫЩ HTTP/1.1 /someform/[LARGE_DATA_IN_QENCODING]

где в large data может быть что угодно, хоть аттачи в mime multipart

Сервер вернет

200 ПЫЩ /new/unique_new_url


Ну а браузер должен отобразить такой URL клиенту в адресной строке.

среда, 22 апреля 2009 г.

Матрица компетентности программиста

Перевод

1 часть: http://spreadsheets.google.com/pub?key=pmAWNZu8sBj_tXy5ms5foVQ 
2 часть: http://docs.google.com/View?docid=d28gm4q_56hmv6f72z

Оригинал http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

На мой взгляд, это офигенно. Практически готовая аттестационная таблица для разработчиков.



понедельник, 13 апреля 2009 г.

Есть ли жизнь просле спецификации?

Функциональность бизнес-приложения - совместное дело заказчика и разработчика

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

Спецификация здесь является только точкой отсчета - слепком того, как разработчики (я имею в виду всю команду - начиная от бизнес-аналитика и кончая последним PMом :-) поняли свою задачу. Если затем кто-то из игроков по какой-то причине встает в позу и начинает "пенять на спеку" то дело швах.

Даже при самом мегакомпетентном заказчике, он какие-то вещи не поймет, пока не начнет системой пользоваться хотя бы в тестовом режиме

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

Что же можно пожелать командам, работающим над бизнес приложениями?

Заказчику
  • Назначать менеджером со своей стороны гибкого человека, который абсолютно "в теме" бизнес контекста, желательно с минимальными техническими скиллами (как вариант -- хорошо работает связка "бизнес-спец"+"спец от ИТ").
  • Быть готовым к длительной фазе приемки. Быть готовым за нее платить :-). 
  • Запланировать пилотную эксплуатацию систему на живых пользователях. 
  • По возможности, не привязывать к первой версии системы критичных дедлайнов.
Исполнителю
  • Заложить в бюджет проекта достаточное количество времени и денег на доработку системы после старта приемочного тестирования.
  • Не надеяться, что после того как спецификация будет написана, она не изменится.
  • Не пытаться сделать абсолютно всеобъемлющую спецификацию чисто аналитически -- все равно только после того, как заказчик посмотрит на готовую систему, он поймет, чего на самом деле хотел.
  • Проектировать систему так, чтобы было легко вносить очевидные бизнес - изменения (добавить поле, добавить/удалить/изменить валидатор, поправить алгоритм постройки отчета, поправить права на функциональность и т п).

воскресенье, 12 апреля 2009 г.

Вебинары для всех и занедорого

Рассматриваю сейчас, какие возможности существуют для проведения некоммерческих вебинаров. После небольшой поиска среди вебинарного софта набрел на DimDim - это платформа для проведения вебинаров.


DimDim

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

Проверка показала, что система работает - исправно передает звук, позволяет расшаривать десктоп, просматривать PowerPoint-овские презентации и совместно браузить интернет.

Звук правда немного отстает, из всех залогинившихся участников можно одновременно дать микрофон троим (в принципе, при большем количестве все равно эффективность общения стремится к нулю). Вебинар можно записать и запись можно будет потом проиграть (формат - ожидаемый flash+html)

Второй плюс - наличие opensource версии DimDim, который можно  поставить  себе на сервер (лицензия - GPL). Авторы утверждают, что в коммерческой версии они используют коммерческие вещательные компоненты, а это надежнее, но думаю, что для большинства нужд и при наличии хорошего канала opensource будет отличным вариантом (при желании конечно заниматься хостингом).

TeamViewer

По удобству и функционалу еще приятно выделяется TeamViewer - систему, специализирующуюся на различных сценариях общения one-to-one. TeamViewer отличают очень удобная инсталляция и богатство всяких поддержечных штучек -- передача файлов, удаленное управление, получение system info и пр.

Программа бесплатна для некоммерческого использования а для коммерческого - от 25 евро/месяц.

Skype (update 6 sep 2009)
Начиная с версии 4.1, скайп позволяет абсолютно бесплатно передавать при звонке содержимое своего экрана. Причем версия 4.1+ нужна только на стороне того, кто презентует - смотреть можно и со старого скайпа, даже с версии 3.

Как инструмент для показов "один-на-один" - самое то. Группового вещания пока не сделали, ждем.

Слова:
Screen Share, Screen Casts, Presentations, Презентации

пятница, 10 апреля 2009 г.

Good News about SharePoint Designer

Всем привет! Что-то давно я не писал. 

Небольшая приятность от Microsoft - SharePoint Designer с апреля сделан бесплатным и доступен для свободного скачивания на сайте компании: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=baa3ad86-bfc1-4bd4-9812-d9e710d44f42


пятница, 13 марта 2009 г.

Про пятницы

Проект, над которым я сейчас работаю, делается в два приема - мы выпускаем версию 0.9 и версию 1.0. Обе версии уходят в боевую эксплуатацию с разницей в месяц.

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

Но только сегодня я понял, что дедлайны для каждой версии  заказчик поставил на пятницу, 13.

Черт возьми, два подряд релиза в пятницу, 13-е. Такого еще со мной не случалось

понедельник, 9 марта 2009 г.

пятница, 6 марта 2009 г.

Atlas, Capuccino, Objective J

http://280atlas.com/

Интересный фреймворк, интересное видео. Для мако-любителей, которые хотят писать на Objective C под веб (в свое время я был очарован букально Obj C - очень красивый язвык, и фреймворки там красивые и приятные). 

Capuccino Framework использует Objective-J (http://cappuccino.org/learn/)

Потенциал в этой штуке чувствуется. Пожелаем ребятам удачи :)

воскресенье, 1 марта 2009 г.

Покорение сложности ИТ

http://www.osp.ru/os/2005/07-08/185761/

Ефим Натис - Все возрастающее бремя сложности информационных технологий на предприятиях влечет за собой увеличение затрат и «усталость от инноваций».

Интересная статья, особенно про нормальные формы компонентов.

***
·         Первая «нормальная» форма, с которой начинается инкапсуляция компонентов, — введение программного интерфейса. Любой программный модуль, доступный через хорошо известный интерфейс, достиг этой формы. Однако просто создание интерфейса еще не гарантирует, что функциональные возможности, скрытые под оболочкой интерфейса, будут иметь смысл для кого-то еще, кроме его создателя.
·         Вторая «нормальная» форма предполагает, что интерфейс представляет одну и только одну законченную бизнес-функцию. Законченность бизнес-функции — понятие относительное, и интерфейс может иметь несколько точек входа. Тем не менее определение интерфейса во второй форме гарантирует его четкую дифференциацию от других, а также логическое обоснование объединения в одном интерфейсе конкретного набора точек входа. Не накладывается каких-либо ограничений ни на характер выдаваемых данных, ни на способ их обработки.
·         Третья «нормальная» форма предполагает, что компонент управляет («владеет») данными определенного типа и не будет непосредственно обновлять другие типы данных. Обновления всех других данных должны выполняться путем обращения к интерфейсам других компонентов, «владеющих» этими данными. Управление данными — лишь внутренняя характеристика компонента (он обновляет только свои данные, не пытаясь осуществлять это по отношению к данным из других источников — такие операции могут происходить без его ведома). Для реализации третьей «нормальной» формы может потребоваться приведение внешних приложений хотя бы к первой форме — чтобы существовали интерфейсы для обновления других данных.
·         Четвертая «нормальная» форма требует, чтобы доступ компонента к его «собственным» данным был исключительным — другие программы не имеют прямого доступа к этим данным. Для достижения такого уровня изоляции структура данных компонента не публикуется для открытого доступа. Публикуется только набор его интерфейсов для обеспечения полного контроля над обработкой данных вне компонента-«владельца».
·          Наконец, пятая «нормальная» форма делает принадлежащие компоненту данные «непрозрачными» — вне компонента структура данных неизвестна. Даже метод долговременного хранения данных (если таковой используется) не известен за пределами компонента. Различные компоненты получают и хранят данные в разных формах и используют разные технологии, наилучшим образом отвечающие семантической природе этих данных. Долговременное хранилище непосредственно не доступно для семантического анализа и, таким образом, приобретает ранг средства резервного копирования. Основные оперативные данные всегда находятся внутри компонента. Возрастающая степень нормализации требует, чтобы структуры процессов и данных были тесно увязаны и, в конечном счете, превратились в единое целое. Основными становятся данные интерфейса, а не сохраненная запись, как практикуется сегодня. Компоненты в пятой нормальной форме инкапсуляции являются объектами. Такая степень инкапсуляции достигается редко — если вообще достигается.
По мере повышения уровня нормализации программной системы ее структура становится более согласованной, а реализация — более последовательной и управляемой. Кроме того, системы, находящиеся на более высоких уровнях нормализации, оказываются более доступными и эффективными без излишнего бремени сложности обслуживания и управления.
Большинство предприятий не стремятся к пятой «нормальной» форме: ее требования слишком высоки. К 2010 году основная часть новых программных систем для бизнеса будет находиться на уровнях нормализации с первого по третий. Однако поставщики технологий с целью дистанцирования от конкурентов станут вкладывать средства в более высокие уровни инкапсуляции. В течение последующих пяти лет, вероятно, появятся новые инструментальные средства, которые позволят проводить синергическую инкапсуляцию процессов и данных, чтобы поддерживать более высокие «нормальные» формы программной инкапсуляции.
Рекомендации. Любой шаг к нормализации — это продвижение к уменьшению сложности итоговой программной среды. Начните с первой «нормальной» формы и постепенно, по мере приобретения опыта, продвигайтесь к следующим уровням. На высоких уровнях нормализации, однако, действует закон убывающей отдачи: для получения дополнительных выгод требуются все большие вложения.

вторник, 24 февраля 2009 г.

Смачна картопля - атака гипножабы

Съездил на выходных в Киев. Киев здоровский, понравился.


Одно из самых сильных впечатлений поездки случилось в "Смачной картопле". Вот их логотип:



Непонятно одно - почему устроители этого фастфуда в качестве логотипа выбрали перевернутую гипножабу?

воскресенье, 15 февраля 2009 г.

Best Disk Cleaner Ever

Себе напоминание - когда в следующий раз нужно будет чистить диск, надо опять воспользоваться JDiskReport http://www.jgoodies.com/freeware/jdiskreport/ - он медленно запрягает (читай - строит отчет по disk usage) но потом очень быстро работает, очень ясно показывает, где самые жирные каталоги и сегодня с ним я вычистил с рабочего ноута огромное количество всякой ерунды. Доволен, короче

UPD 3 may 2009: в Кулере народ обсуждает, какие есть мониторилки.

пятница, 13 февраля 2009 г.

Про Архитектурных астронавтов

У Джоэля, вот: http://local.joelonsoftware.com/wiki/Не_дайте_Астронавтам_Архитектуры_вас_запугать

Весьма метко, особенно про отсутствие кислорода на высоких уровнях абстракции. Там, в космосе, все что угодно состоит из Объектов и Сообщений. Очень выматывает :-)

воскресенье, 1 февраля 2009 г.

Идеальная грамматическая библиотека

Есть вещь, которую до сих пор никто по-человечески не сделал. Это библиотека для построения грамматически правильных сообщений от программного обеспечивания.

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

Попробую набросать здесь требования к такой библиотеке.

1. Работа с числительными

1.1 Подстановка правильных склонений для числительных (У вас 1 новое сообщение, 5 новых сообщений, 16 сообщений)

2. Работа с временем

2.1 Подстановка правильных склонений для времени (Выходим через 22 минуты, через 30 минут, до завершения работы осталось 33 минуты 21 секунда)

2.2 Подстановка общеупотребительных значений для интервалов времени: (Событие произошло вчера, произошло неделю назад. Следующее событие через 2 дня)

3. Поддержка сообщества

3.1 Открытый исходный код
3.2 Стандарты на API
3.3 Версии для основных языков программирования

Что еще

Знаю, что подобные замуты были с библиотекой gettext, но не уверен, что этого достаточно.

суббота, 17 января 2009 г.

Юзабилити исследование про то, как используют iPhone

Некоторые выводы меня удивили, всем разработчикам интерфейсов - смотреть :)

четверг, 15 января 2009 г.

RadSoftware Regular Expression Designer

Нашел очень хороший дизайнер регулярных выражений для .net -

http://www.radsoftware.com.au/regexdesigner/

воскресенье, 11 января 2009 г.

NHibernate screencasts

Чтоб не забыть: http://www.summerofnhibernate.com/ 

суббота, 10 января 2009 г.

Что такое Enterprise Feedback Management Systems

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

Вот, допустим, есть бизнес. Бизнес производит некоторый продукт – товар или, например, услуги. Ну и естественно, cуществует потребитель у этого продукта – ведь он, бизнес, этим живет.

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

В этой, типичной, картине мы наблюдаем что-то типа водопада:

Система обратной связи дополняет картину последним (самым приятным мне) шагом – позволяет клиентам влиять на решения, которые принимает производитель.

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

Решения в системе с внедренной системой обратной связи принимаются по такой схеме:

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

Под капотом EFM

На что похожи системы EFM (Enterprise Feedback Management)? Представьте себе аналитика крупной компании, который хочет узнать мнение своих клиентов и донести его до руководства. В распоряжении аналитика всевозможные инструменты – база клиентов в CRM, аналитические калькуляторы, средства построения отчетов, другие информационные системы предприятия.

 Наш аналитик мог бы, например, сделать выборки пользователей из клиентской базы CRM, отправить пользователям e-mail с просьбой рассказать том, что они думают о недавней покупке, обработать полученные отклики, а затем собрать владельцев бизнеса и линейных руководителей и презентовать им результаты исследования.

Собственно все это и должна делать EFM система. Система должна:

·         Помогать отстраивать процесс общения с клиентом, акцентируясь на сбор и анализ мнения клиента.

·         Доносить результаты обратной связи до заинтересованных лиц в компании

·         Повышать удовлетворенность клиента – как за счет быстрого решения его проблем, так и за счет того, что клиент чувствует, что к его мнению прислушиваются.

Кроме того, EFM система должна работать максимально автономно, для этого система должна быть интегрирована в информационное пространство компании, в первую очередь с теми системами, в которых содержится информация о клиентах и их действиях.

Система должна предоставлять в удобном виде собранные данные, как для аналитиков компании (в виде многомерных OLAP кубов), так и для руководства (в виде сводных отчетов).

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

Ниже я постараюсь раскрыть некоторые ключевые особенности построения и внедрения EFM.

Сбор откликов от клиента

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

Существует множество стандартных методик построения опросов, например опросы Net Promoter Score или Customer Satisfaction. Какую схему выбрать, становится ясно после детального анализа проекта.

Workflow

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

Хороший процесс взаимодействия с клиентом, скорее всего, не закончится просьбой рассказать о покупке. Если клиент недоволен, то нужно предпринять какие-то шаги, чтобы он стал бы доволен (а заинтересованным лицам отправить, например, тревожный e-mail). Кроме этого можно к примеру, передать такого клиента отделу урегулирования претензий. Если клиент доволен, можно ему предложить попробовать новинки сезона или другую продукцию, которая его может заинтересовать. В-общем, для архитектора EFM системы здесь огромный простор для творчества

Интеграция

EFM системы не были бы столь полезны, если бы не были интегрированы с другими системами предприятия.  Для страховой компании, например, инициация опроса может происходить   по факту заключения с клиентом договора на обслуживание (эту информацию можно выгрузить в EFM систему из базы данных договоров). Результаты работы EFM системы также могут «уходить» обратно в информационное пространство предприятия, например для недовольных клиентов автоматически будут заводиться запросы в системе урегулирования жалоб.

Правильно сынтегрированная EFM система может вообще не требовать ручного вмешательства – все необходимые действия будут инициироваться событиями из других систем и результаты работы также будут подстыкованы к бизнес-процессам, которые обслуживаются существующей ИТ инфраструктурой. При этом, затраты на интегрирование для качественной EFM программы обычно невелики, поскольку не требуют сколь либо серъезных доработок уже существующих систем, как правило можно обойтись просто передачей текстовых или excel файлов по FTP или общие сетевые папки.

Отчеты

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

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

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

Принятие решений

EFM система сама по себе не имеет смысла, если необходимость такой системы не осознана руководством компании на самых разных уровнях ответственности. Кроме того, часто от руководства требуется изрядная смелость, чтобы узнать, что на самом деле думают клиенты J. Здесь могут крыться изрядно сюрпризов, и не всегда самых приятных. Зато компания, которая умело воспользуется полученной информацией, получает в руки сильнейший козырь – она совершенно точно знает, что нужно клиентам, где стоит усилить бдительность а что, наоборот, не очень важно.  Информирован – значит, вооружен.

Ссылки по теме

среда, 7 января 2009 г.

Трудные будни проектного менеджера

Две основные задачи менеджера проектов
- планировать
- все-таки вести и сделать проект, хотя все идет не по плану :)

воскресенье, 4 января 2009 г.

1 апрель - никому не верь Ж)

Посмотрел - не писал с ноября. Буду исправляться - скоро ждите небольшую статью про то, что такое Enterprise Feedback Systems.

А пока - заметки о живой природе. 

Обнаружил, что если среда разработки сделана хорошо и позволяет "разогнаться" (ну например как Visual Studio + ReSharper или  IDEA) - постоянно порываюсь писать названия методов по английски, то есть с пробелами, "void Test for some condition()" вместо "void TestForSomeCondition()".  Кстати, вполне разумный паттерн для инструмента типа resharper - делать замены выражений на английском на pascal/camel case. По сути ведь - то же форматирование кода.

И - ну да - с наступившим НГ вас всех! :)