Alexey's profileLife vs. ProgrammingPhotosBlogListsMore Tools Help

Blog


    January 29

    LINQ + ASP.NET

    Scott Guthrie выложил первую часть (видимо) цикла об использовании LINQ с ASP.NET в новой Visual Studio "Orcas".

    Работа над студией продвигается и некоторое время назад была обещана новая бета-версия с интегрированным дизайнером WPF, LINQ, улучшенным интерфейсом и МНОЖЕСТВОМ нововведений.

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

    http://weblogs.asp.net/scottgu/archive/2007/01/28/video-using-linq-with-asp-net-in-vs-orcas-part-1.aspx

    Кстати, Скотт приезжает в Бельгию (впервые) в ближайший четверг и дает "концерт", а именно, будет рассказывать (и показывать) о будущем ASP.NET и VS "Orcas".

    Обязательно схожу и доложусь о впечатлениях.

    Technorati tags: ,
    January 26

    BrainBench: снова бесплатные тесты

    Пришло уведомление от BrainBench (www.brainbench.com) о том, что до 31-го января некоторые тесты можно пройти бесплатно.

    Появился новый тест - C# 2.0, только что сдал. Получил "Мастера" :)

    January 23

    ASP.NET AJAX 1.0

    Ура-ура! Релиз :)

    Брать тут: http://ajax.asp.net/

    Обновился и AJAX Control Toolkit, работающую с релизом версию можно скачать тут: http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx

     

    Technorati tags: , ,
    January 20

    Web Client Software Factory

    Как я уже говорил, фабрики позволяют нам разрабатывать приложение на несколько более высоком уровне благодаря тому, что дают возможность оперировать не просто классами, структурами и т.д, а бизнес-объектами нашего приложения. То, как именно должен выглядеть бизнес-объект для того, чтобы укладываться в рамки архитектуры, берет на себя "фабрика".

    Например, уже существуют такие "фабрики", как Smart Client Software Factory, позволяющая легко и безо всякой рутины создавать приложения на основе CAB (Composite UI Application Block). С помощью этой "фабрики" мы оперируем сущностями CAB'а, такими, как "контроллер", "вью", "воркайтем" и т.д.
    Существует (на мой взгляд менее удачная, но позволяющая значительно сократить время разработки) "фабрика" для создания слоя веб-сервисов, существуют и другие.

    Теперь вот существует и Web Client Software Factory.

    Хороших новостей несколько.
    Во-первых, она опирается на Composite Web Application Block. Это, на мой взгляд, очень замечательная штука. Это, скажем так, CAB для ASP.NET (да, уважаемый Void, с ObjectBuilder'ом и т.д. и т.п. ;) ). Нет только EventBroker'а, да он там и не нужен.
    Во-вторых, она опирается так же на Page Flow Application Block. Это не менее замечательная штука, позволяющая действительно (!) легко включать в веб-приложение Workflow Foundation. Это трудно переоценить, на мой взгляд.
    В третьих, это все же "фабрика", так что, создавать приложение в рамках архитектуры этих двух блоков - что мышкой кликать, ниже я покажу.
    В четвертых, все это дело (включая злополучный ObjectBuilder) замечательно документировано. Лично я документацию прочитал от первой строчки и до последней - написано четко, по делу, без воды, очень доходчиво: что, как, где, почему.

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

    В контекстное меню solution'а "фабрика" добавит несколько новых пунктов. В частности, появится возможность добавлять модули в свое приложение (а где вы видели CAB без модулей?).

    Можно добавить три типа модуля: Business Module, Foundation Module и Page Flow.

    Business Module - это какая-то часть функциональности приложения. То есть, модуль в "чистом" его виде - есть модуль - есть функционал, нет модуля - нет функционала. Ну, например, можно сделать модуль с блогами, модуль с форумами, модуль с доской объявлений для сайта и т.д.

    Foundation Module - это модули бизнес-логики. Там предполагается размещать различные сервисы (а где вы видели CAB без сервисов?), провайдеры и т.д. Например, можно сделать модуль, который содержит логику работы с данными. Поменялась база - стер старый модуль, добавил новый. Приложение продолжает работать.

    Page Flow - ну, тут из названия все понятно. Здесь предлагается определять workflows наших походов по сайту. Ну, например, процесс выполнения заказа юзером. Сначала он попадает в свою корзину товаров, потом жмет "заказать" и попадает на форму ввода адреса и условий доставки, потом - страничка оплаты и в конце - поздравления. Или ошибки на каждом из шагов. Или что-то еще. Словом, все, что нам потребуется - это нарисовать state-диаграмму того, как в принципе могут осуществляться переходы и при каких условиях. Об остальном позаботится Workflow Foundation со всеми его плюсами.

    Да, при создании каждого модуля, с программиста будет спрошено название а так же не хочет ли он создать проект для юнит-тестов модуля или посмотреть документацию. Очень удобно.

    Впрочем, в контекстном меню веб-сайта тоже прибыло. Там появился пунктик "Web Client Factory -> Add view (with presenter)". Клик по нему "родит" окошко в виде:
    Add view with presenter "Фабрика" учтиво спросит, какое именно "View" нужно создать, к какому модулю оно относится и где будет размещаться.

    На картинке видно, что создан будет и сам "View", и его интерфейс (IView1 в моем случае), и его Presenter (View1Presenter).

    Связь между View и Presenter'ом тоже будет установлена автоматически. Если не полениться и зайти в code behind самой вьюшки, то это будет видно.

    Собственно, вот таким вот нехитрым способом я уже создал вполне себе работающую болванку приложения. Сколько у меня ушло времени? Несколько минут?
    Если эту болванку сейчас запустить - то там даже кое-какая навигация будет (о том почему она будет и откуда берется - может быть позже, но забегая вперед скажу: Composite Web Application Block + Factory - это вам не только мышкой тыкать да страницы создавать. Это еще и обильная функциональность, сдобренная набором сервисов).

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

    January 17

    Software Factories: Делай с нами, делай вместо нас.

    В последнее время Microsoft "продвигает" концепцию Software Factories (я не знаю, как это адекватно перевести на русский язык, поэтому оставим так) и DLS (Domain Specific Languages).
    Что же это за концепция и как ее можно использовать "во благо"?

    Начнем с DSL.
    Как следует из названия, это язык, описывающий некую модель. Давайте подумаем: а из чего состоит программа, которую мы пишем и в последствии поддерживаем?
    Обычно есть какое-то ядро, какие-то расширения, слой работы с базой данных, пользовательский интерфейс...
    А из чего, в свою очередь состоят они? Ведь это получается своего рода кубики: у нас обычно есть модули, контроллеры, объекты-транзакции, обладающие рядом специфичных для приложения свойств бизнес-объекты, провайдеры данных, сервисы и т.д. и т.п. Много у нас всего есть обычно. И все это специфично для нашей инфраструктуры, для нашего приложения. Все это нужно знать, помнить, документировать для потомков...
    Создавая новый модуль мы создаем его в соответствие с некими правилами приложения, потом собираем из кубиков его функциональность.. Кубики мы тоже создаем, каждый такой кубик тоже создается в соотвествие с правилами, в результате чего части приложения "понимают" друг друга и работают.

    Фактически, создавая правила вроде "любой бизнес-объект реализует IEntity" мы создаем свой собственный, специфичный для нашего приложения язык. Это он и есть - Domain Specific Language, DSL. Без него не обходится ни одно крупное приложение - везде есть свои правила и свои кубики.

    Майкрософт предлагает явно выразить эти правила в виде формального языка. Иными словами, предлагается создать для своего приложения некий новый "язык", который будет оперировать сущностями нашего приложения ("модуль", "контроллер", "провайдер", etc) и отношениями между ними.
    Разработав для нашего приложения такой язык мы сможем как бы выйти на новый уровень абстракции и в разработке оперировать не в терминах "класс", "интерфейс", "событие", а сразу в терминах нашего приложения.
    Открыть дизайнер и набросать UML-подобную диаграмму, где каждый элемент есть сущность нашего проекта.
    Чувствуете, куда я клоню? Тогда хватит об этом, перейдем к следующей теме :)

    Software Factories.
    Весь последний номер Архитектурного Журнала, выпускаемого Майкрософт и который, непонятно почему, но периодически приносит мне почтальон (наверное, галку где-то ткнул), был посвящен Software Factories. Так что же это такое?
    Итак, Software Factory - это инструмент, позволяющий "провести" разработчика по определенному пути.

    Ну например, разработчик говорит: "хочу создать модуль для приложения". Он открывает Software Factory и тыкает по слову "модуль". Его спрашивают название модуля, еще какие-то параметры, после чего пользователь нажимает "ОК" и получает в своем солюшне (solution) проект-заготовку модуля со всеми необходимыми инициализаторами и т.д. Этот пустой модуль уже готов загрузиться, быть понятым приложением и работать.
    А Software Factory дальше подсказывает, что следующим шагом можно добавить бизнес-объект в модуль, или сделать контрол для отображения объекта в пользовательском интерфейсе.. Попутно предлагая документацию по каждому шагу.
    Разработчик жмет "хочу бизнес-объект!" - и получает форму с вопросами: "как назовем?", "data layer для него сделаем?", "А View этому контролу нужен?", "не желаете ли свойства указать?"..
    Клик по "ОК" - и вот у нас создался бизнес-объект в том виде, в котором он должен быть в приложении, слой базы для него - в полном соответствии с требованиями системы, контрольчик (view) для его отображения, контроллер этого view..
    Словом, вся рутина, которую пришлось бы писать руками, наследуя классы, связывая их между собой и т.д. делается автоматически. Конечно, посредством DSL, а зачем я еще столько буков про него написал.

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

    К чему я это все?
    К тому, что в следующем постинге я расскажу о (еще одной) недавно вышедшей Software Factory - Web Client Software Factory, которая, на мой взгляд, очень заслуживает внимания.

    Как говорится, оставайтесь на линии ;)

    Technorati tags: ,

    January 12

    Пишем код в браузере

    Недавно стартовал проект http://codeide.com/

    Проект предлагает отказаться от всяческих IDE и писать код прямо в браузере. Сейчас доступно несколько языков, от распространенных Pascal, Basic и C++ до "экзотических" LISP и MATH. Даже подсветка синтаксиса есть.
    Дотнетовских языков пока нет никаких, кстати.

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

    Так что, как говорится, just for fun :)

    January 09

    CAB: Сокральное знание

    Работаю с Enterprise Library, CAB и, в частности, с EventBroker уже почти год.
    Всегда считал, что при работе с событиями через этот самый EventBroker происходит вызов подписчиков по порядку в цикле, причем если какой-то из подписчиков генерирует исключение, то EventBroker его перехватывает и вместо него кидает свое. Дескать, обработка события такого-то не прошла, получите и распишитесь.
    Свойство InnerException оставалось нетронутым, то есть, равным null, что меня всегда раздражало: ну, получил, расписался, а в чем, собственно дело? Смысла в информации о том, что где-то сорвался какой-то из подписчиков не много, если не знаешь где и какой.

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

    Оказывается, перебор подписчиков EventBroker действительно осуществляет в цикле и действительно перехватывает все исключения от всех подписчиков.
    Но при этом он не прерывает цикл, а бережно складывает все полученные исключения в списочек и продолжает вызывать подписчиков.
    После того, как подписчики кончились, он проверяет, а не пуст ли списочек исключений? Если он не пуст, то EventBroker действительно генерирует свое, новое (EventTopicException) исключение. Он действительно не заполняет свойство InnerException, так, как это просто не имеет смысла: если в списке находится более одного исключения, то какое выбрать в качестве InnerException?
    Вместо этого класс EventTopicException имеет свойство Exceptions, которое содержит список всех исключений, произошедших во время обработки сообщения.

    Вот так все просто. Примерно то, что хотел приделать к EventBroker'у я :)

    Чувствую себя идиотом :)

    P.S. Надо было писать этот пост с умным видом в тоне наставления, типа "для того, чтобы получить то-то надо посмотреть туда-то" :-) Опять стормозил ;)

    Technorati tags: , , ,

    Новый Год в замке в Германии, сочинение.

    Помните, я говорил, что напишу о встрече Нового года в замке в Германии? C фотографиями, все такое?

    А вот не буду! Ну нафиг. Зачем сто раз писать одно и то же.

    Читайте здесь: http://users.livejournal.com/vselenka_/20517.html :)

    January 08

    Yahoo выбирает WPF

    Yahoo выпускает новую версию своего Yahoo Messenger, теперь для Windows Vista.

    Messenger написан с использование Windows Presentation Foundation (WPF). В нем интегрированы такие возможности, как текстовое, голосовое и видео общение, красивый интерфейс (даже с табами), естественно, работа с галереями Flickr, новые трехмерные смайлики, новые возможности создания групп и листов...

    Контакты Windows Live Messenger в Yahoo Messenger, конечно, поддерживаются, верно и обратное.

    В дальнейшем возможности продукта будут еще расширяться.

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

    Посмотреть на то, как выглядит эта штука (там даже есть небольшой флеш-ролик, демонстрирующий работу) можно вот здесь:

    http://messenger.yahoo.com/windowsvista.php;_ylt=Ah3Ac5.PcsMpo6rlpeGwe71wMMIF

    Остается только пожелать пользователям Microsoft Live Messenger такого подарка :)

    Technorati tags: , ,

    January 07

    Windows Live Messenger Plus

    Наткнулся на блог Дмитрия Седых, в частности постинг о Messenger Plus

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

    Кроме того - более удобный вариант хранения истории:

    История чатов

    Там еще много чего есть, например, возможность добавлять скрипты (есть библиотека на сайте, но можно и самому писать). Из скриптов себе выбрал калькулятор (окно калькулятора + можно написать /calc 2+2, а ответ он сам посчитает), скриншоттер (позволяет сделать скриншот и сразу послать его собеседнику) и ноутсы (такие маленькие окошечки-напоминалки).

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

    IRC напоминает...Кстати, там так же добавляется небольшая "подсветка синтаксиса", команд, форматом напоминающих IRC. И если вы не хотите кликать кнопки и пункты меню для того, чтобы, например, сменить статус или отправить сообщение всем открытым контактам сразу, то можно воспользоваться вот таким вот "режимом командной строки" :)

    Очень удобно, буду осваивать.

    Скачать эту штуку можно вот здесь: http://www.msgpluslive.net/

    Только не забудте отказаться от установки спонсорских причендалов, когда будете инсталлировать.

    Свершилось!

    Наконец-то до создателей Live.Com дошло то, о чем я столько раз писал и ругался.
    Сегодня я заметил, что из заголовка страниц (в частности, Spaces) пропал огромный ужасный баннер, занимавший ранее немереную часть экрана.

    Хвала всем богам, теперь это выглядит пристойно :)

    Technorati tags:

    К вопросу о видео кодеках

    Вот, сижу и кодирую 5-минутный ролик.
    Много слышал о том, как хорош кодек H264, некоторые чуть ли не кипятком с него писают. Не знаю, может я делаю что-то не так, но по соотношению объем\качество он у меня немерено проигрывает Windows Media 9.
    При этом WMV, правда, жмется существенно (раза в 2-2,5) дольше, чем H264, но я не думаю, что это имеет какое-то значение при сравнении результатов.

    Словом, я так и не понял, в чем смысл восторгов по поводу H264. Только в том, что он не от Майкрософт, чтоли?..

    Надо поиграться еще...

    Technorati tags: , ,
    January 04

    Кто здесь?!

    Если кто-то еще читает это по RSS (а я вижу, что читают), напомю, что инкарнация данного зеркала нестабильна.
    "Главный" блог находится по адресу http://alexey.raga.name, поэтому советую изменить адрес в ваших RSS-читалках :)
     
    Спасибо за внимание :)

    Как заставить себя экономить.

    Несколько раз я задавался этим вопросом, но ответ пришел сам собой. Очень просто - дождаться российских праздников и при этом не перевести деньги на карточку :)
    В результате получается такая вот смешная история, я расскажу.

    Как я уже писал, 31-го мы с супругой поехали встречать Новый Год в Германию, в город Эссен (Essen). Благополучно "прикончив" два наших счета, на которых были деньги, я рассудил, что денег на оставшемся одном счете должно хватить до окончания праздников, с чем и поехали.

    Веселости начались, когда мы сидели за праздничным столом. Обнаружив  на столе меню и не особо в него вникая, но понимая, что цены там написаны не с проста, я понял, что еду придется оплачивать отдельно. А денег в бумажнике осталось 20 евро. Карточек в замке не берут, заметим.

    Чтож, пошел искать банкомат в ночном Эссене. Нашел, даже не так чтобы и далеко, отделение СитиБанка, запихнул карточку и понял, что я ни фига не помню ПИН. Ну, то есть, совершенно не помню. Потому, что карточку поменял только пару месяцев назад, пользовался ей всего один раз (обычно использую другие), и то под роспись. То есть, ПИН от нее я не вводил ни разу.
    Естественно, попытки "подобрать" ПИН ни к чему не привели. Собрав остатки с других карточек (пины к остальным я помню), я грустный поплелся обратно. Ибо набралось всего 10 евро, и то чудом. Грустить было с чего - на 30 евро вдвоем много не накушаешься. А еще от гостиницы на вокзал завтра ехать завтра. На такси.
    Впрочем, вернувшись, я понял, что зря не стал изучать меню, потому, как платить предлагалось исключительно за дополнительные напитки, остальное (включая еду) было уже оплачено.

    Второй "прикол" получился при выезде из гостиницы, когда я пытался оплатить счет все той же многострадальной картой с забытым ПИНом. Деньги на ней были. Но гнусная машинка выплюнула бумагу, где было сказано, что транзакция не может быть проведена.
    Первое ощущение можно выразить словами: "и чего теперь?!". Представьте: вы в чужой стране, наполовину (супруга не имеет права покидать Королевство Бельгия) нелегально, с (уже) 15-ю евро в кармане и карточкой, которую у вас не принимают. Других денег нет, а платить надо.
    Благо оказалась вторая, точно такая же, и даже привязанная к тому же самому, что и первая, счету карточка. На имя жены. Выданная в то же время, что и первая, так что ПИН от нее... Ну, вы понимаете.
    Но транзакция с этой карты прошла. Я не понимаю почему - счет-то тот же. Наверное, если бы я попросил попробовать снять деньги с моей карты повторно, все тоже завершилось бы удачно, не знаю.
    Но это было большооое облегчение :)

    До вокзала нас довезли хорошие люди, с которыми мы познакомились на празднике (за что им огромное спасибо), так что, проблем с такси не возникло (кто знает, хватило бы 15 евро, нет ли).

    Вот так вот мы добрались до дома.

    А со вчерашнего дня начались распродажи. Здесь это не то, что в России, здесь они настоящие. Например, Лена купила себе ботинки с 70%-й скидкой и еще несколько вещей за полцены. Вещи были намечены несколькими месяцами раньше ;)

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

    Соответственно, запас средств, изначально на распродажи по забывчивости не расчитанный, очень быстро уменьшился. В данный момент на единственной карточке, где еще есть деньги, остается всего около 60 евро.
    Пополнить счет я тоже не могу до 9-го числа по причине праздников на родине.

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

    Тем не менее, у нас еще 5-6 дней до того, как банк позволит мне получить доступ к моим же деньгам.
    Будем заставлять себя экономить :)

    P.S. А про встречу Нового года я расскажу позже. Может быть даже с фотографиями.