четверг, февраля 19, 2009

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

Мы строили, строили...

Оказывается, у нас в стране есть "Совет по развитию информационного общества при президенте России". Вчера этот ареопаг заседал в Кремле. Президент удивлен:

"По индексу развития электронного правительства мы были в 2005 г. на 56-м месте, а в 2007 г. достигли 92-го"


Вот тебе и "Электронная Россия". Если бы президентом у нас был товарищ Сталин, то он бы решил что все это диверсия. Но президентом у нас товарищ Медведев, человек культурный. Он все понимает:

"О чем это говорит? Это говорит о том, что у нас никакого электронного правительства нет, все это — химера."


Понятно, что специально никто не вредительствовал по заданию буржуазных разведок. Просто, пока в остальном мире IT потихоньку входили в различные сферы жизни, у нас "ответственные товарищи" усиленно имитировали кипучую деятельность под шумок распила бабла.

Какие выводы сделаны ареопагом? Известно какие. Назначить дополнительных чиновников, ответственных за информатизацию. Выделить дополнительно бабла для распила.

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

понедельник, февраля 09, 2009

Microsoft Tag

Microsoft анонсировала новую технологию для мобильных устройств - "Tag"
Все до безобразия просто. Если вы видите вот такую картинку:

вы наводите на нее камеру своего мобильника и тут же попадаете на URL который зашифрован в ней. Потому что картинка эта - баркод. Конечно для таких чудес надо установить Microsoft Tag Reader. Что интересно, есть версии не только для WinMobile, но и для iPhone, Symbian S60, BlackBerry, и наконец J2ME. Скоро обещают версии для PalmOS и Android.
Формат кодирования картинки не раскрывается. Судя по всему в картинке зашифрован не сам URL, а некий хэш код, который отправляется на сайт Microsoft Tag, а уж оттуда броузер редиректится на нужный URL. Для чего такие сложности? В самой картинке зашифровано довольно мало информации, что-то в районе 8-10 байт. Т.е. URL там попросту не помещается.
Для того чтобы создавать свои tag-и надо иметь эккаунт. Пока все бесплатно, но Microsoft оставляет за собой право сделать технологию платной для паблишеров после окончания периода бета тестирования.
Попробовал я как это все работает на мобильнике с WM 6.0. Бывает сканер схватывает картинку в доли секунды, а иной раз приходится дерижировать камерой над картинкой несколько секунд.
В-общем идея очень свежая и интересная.
Скачать TagReader на телефон можно здесь
А на картинке, кстати, ссылка на RSDN.

пятница, января 23, 2009

Шпоры от J.D. Meier по архитектуре приложений

Очень хорошие выжимки в стиле шпаргалок по архитектуре различных типов бизнес приложений готовит J.D. Meier

Клиент сервер (толстый клиент) (не модный нынче и не гламурный)

Трехуровневый Rich Internet Application (модный и гламурный)

Четырехуровневый Web Application с выделенным слоем сервисов и Table Module внутри (для корпоративных чуваков, реально озабоченных вопросами безопасности, которые все делают "по Фаулеру")

Обычный трехуровневый Web Application с ORM внутри (самый популярный, пожалуй)

REST web сервис (да - да, REST на платформе Microsoft, кто бы мог подумать...)

Один недостаток у этих шпоргалок. Чтобы получить от них пользу, надо знать что такое "Dependency Inversion", "Entity Translator", "Table Data Gateway", "Page Controller" и еще кучу всяких вещей. Но если ты все это знаешь, то и шпоргалки тебе видимо уже не нужны :)

понедельник, января 05, 2009

Listma - .Net Workflow framework

Что вы делаете, когда вся логика разрабатываемого класса крутится вокруг его состояния? К примеру, разрабатываем мы web магазин. Есть у нас сущность Order (заказ), ее создает «покупатель», затем он ставится в очередь на обработку, затем «оператор» формирует заказ и передает его «курьеру» для доставки, «курьер» доставляет заказ и делает отметку о доставке. Покупатель может редактировать все поля заказа, пока не передаст его на исполнение. После этого покупатель не может редактировать заказ, но может отозвать его, но только если заказ еще не передан для доставки. Оператор не может редактировать заказ, но может оповестить покупателя о задержке в связи с отсутствием товара на складе. Курьер может только проставлять отметку о доставке и только на тех заказах, что переданы для доставки ему. Ну и т.д. (много деталей опущено).

Довольно типичная картина, не правда ли? Действия доступные пользователям зависят от их роли и текущего состояния сущности, причем все эти особенности и детали способны утомить еще при чтении требований, не говоря уж о реализации. И в тоже время они являются весьма важными с точки зрения заказчика. А при реализации они размазываются тонким ровным слоем по всей бизнес логике и по UI в придачу. Ситуацию усугубляет то что, все эти требования очень волатильны, то есть склонны к частым и непредсказуемым изменениям. И вот он – живой кошмар любого разработчика перед нами во всей красе.
Однако с подобными задачами довольно просто можно справиться на основе workflow подходов, и в частности, с помошью конечного автомата или Finite State Machine.
Основная идея состоит в том, чтобы описать диаграмму состояний сущности (в нашем случае заказа), и допустимых переходов, при этом связав их с ролями пользователей.
Обычно, говоря о методе конечных автоматов, подразумевают создание класса, реализующего конкретную диаграмму. Но в нашем случае интереснее использовать иной подход, который менее распространен. Нам интереснее создать класс, способный исполнять любую диаграмму состояний, по воздействию внешних событий. При этом список переходов, доступных в данном состоянии для данного пользователя, на уровне UI представляется в виде набора доступных действий. А выбор любого из этих действий, вызывает выполнение соответствующего перехода в диаграмме состояний, и выполнение связанной с ним бизнес логики.

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

Что должен уметь делать этот framework? Он должен:
- описывать диаграммы состояний объектов, включающие перечень возможных состояний объекта, и возможные переходы между состояниями
- определять бизнес логику, выполняющуюся при изменении состояния объектов
- определять доступность переходов на основе ролей пользователей
- определять шаблоны оповещения при изменении состояния объекта и правила адресации на основе ролей пользователей
- переводить объекты из одного состояния в другое на основе описанных правил
- определять права доступа к атрибутам объекта в зависимости от состояния и роли пользователя

И в тоже время он не должен:
- зависеть от способов хранения бизнес-сущностей
- предъявлять какие либо требования к реализации классов бизнес-сущностей
- зависеть от UI библиотек (ASP.NET, WinForms)
- зависеть от провайдеров role-based security
- требовать наличия собственной БД для хранения своих настроек и состояния

Ничего готового на платформе .Net не обнаружилось. Windows Workflow не подошел на эту роль по причине своей монструозности (посмотрите список чего «не должен» делать движок и вам все станет понятно). Поэтому появилась мысль сделать свой движок, обобщив в нем свой многолетний опыт в данной области.
И вот в первом приближении такой движок готов. Называется он Listma, что значит Linking State Machine, или Подключаемая машина состояний, что вполне отражает его суть.
Listma - это проект с открытым исходным кодом. Хостится он будет на Google Code.

Сайт проекта http://code.google.com/p/listma/
Последнюю версию можно взять здесь http://code.google.com/p/listma/downloads/list
Бактрэкер проекта здесь http://code.google.com/p/listma/issues/list
Исходники с примерами здесь (SVN) http://code.google.com/p/listma/source/browse
Блог проекта здесь http://listma-rus.blogspot.com/

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