Hungry Mind , Blog about everything in IT - C#, Java, C++, .NET, Windows, WinAPI, ...

A conversation with unix shell

Some cool csh commands.

% make love
Make: Don't know how to make love.
Stop.
% got a light?
No match.
% sleep with me
bad character
% man: Why did you get a divorce?
man: Too many arguments.
% make sense
Make: Don't know how to make sense.
Stop.
% make bottle.open
Make: Don't know how to make bottle open.
Stop.
% \(-
(-: Command not found.
% date me
You are not superuser: date not set Sun Apr 27 22:53:37 EETDST 2008
% %Vice-President
%Vice-President: No such job.
% who is my match?
No match.

min max puff puff

Недавно мучался, не мог понять, почему не компилируется код std::numeric_limits<size_t>::max(). Долго тупил, пока не заметил, что компилятор пишет warning о нехватке параметров для макроса.

Оказалось, в файле WinDef.h есть такой код:

#ifndef NOMINMAX

#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

#ifndef min
#define min(a,b)            (((a) < (b)) ? (a) : (b))
#endif

#endif  /* NOMINMAX */

Идиотизм, честное слово. Перед включением Windows.h нужно определить NOMINMAX: #define NOMINMAX.

PL/SQL Developer preferences on Vista

AllRoundAutomations PL/SQL Developer has a bug under Windows Vista which forces the program to reset all user preferences to default values on restart. To solve the problem run it as Administrator.

There is an alternative way to overcome the issue - just set a deny write ACL for C:\Users\%USERNAME%\AppData\Roaming\PLSQL Developer\Preferences\%USERNAME%\default.ini as all preferences has been configured and before the program starts once again.

MVP and MVC Part 2

Эта статья содержит вступление, общее представление и сравнение трех архитектурных шаблонов построения интерактивных приложений: Model-View-Controller, Model-View-Presenter и Presentation-Abstraction-Control.

Часть 1, Часть 2, TBD.

Вариации и производные шаблонов

Классический шаблон Model-View-Controller сейчас по большей части не используется в первоначальном дизайне, хотя из него выросло несколько вариаций, адаптированных к новым платформам разработки таким, как Microsoft Windows и Web. О двух из этих вариаций, Model-View-Presenter и Presentation-Abstraction-Control, будет рассказано далее в статье.

Шаблон Model-View-Presenter

Шаблон Model-View-Presenter представляет собой вариацию шаблона Model-View-Controller и выделяет данные приложения, отображение и пользовательский ввод в специализированные компоненты.

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

Шаблон Taligent Model-View-Presenter

Обзор

Шаблон Taligent Model-View-Presenter отделяет данные, спецификации данных, манипуляции над данными, координацию приложения, взаимодействие с пользователем и визуализацию в специализированные компоненты.

Происхождение и мотивация

Шаблон MVP был построен на программной модели Taligent, которая сама была подвержена влиянию оригинального шаблона Smalltalk-80 MVC. Впервые шаблон был формально описан в 1996 Майком Потелом, который в то время работал на Taligent, Inc. Taligent была основана Apple Computer, Inc. как совместное предприятие с IBM (в последствии с Hewlett Packard), а позже, в 1995, она стала дочерней компанией IBM. Многие элементы оригинального шаблона MVP обрели ясность в Apple под руководством Лэри Теслера, который ранее работал в Xerox PARC, где он был одним из участников дизайна и реализации Smalltalk.

Хотя основные элементы шаблона были использованы Taligent в 1992-1994 гг., пока Taligent, Inc. не была куплена IBM в 1995 и Майк Потел впервые предложил название Model-View-Presenter для описания архитектуры программной модели Taligent, сам шаблон не был. Потел говорит о Arn Schaeffer, Dave Anderson и David Goldsmith, как о главных участниках программной модели Taligent, которая послужила основой шаблона MVP (3).

Структура

Следующая диаграмма изображает структуру шаблона Taligent Model-View-Presenter:

The structure of the Taligent Model-View-Presenter pattern

Компоненты

Модель отвечает за данные и бизнес функциональность приложения.

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

Команды - это компоненты, определяющие операции над данными. Примеры команд: удаление, печать, сохранение данных Модели.

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

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

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

Взаимодействия

Самые существенные различия между шаблонами Taligent Model-View-Presenter и Model-View-Controller касаются Презентеров и Интеракторов.

Презентер выступает, как общее управление определенной подсистемой приложения. Он поддерживает жизненный цикл и взаимосвязи между Представлениями, Интеракторами, Командами, Наборами и Моделью. Обязанность по перехвату событий от пользователя ложиться на Интеракторы, поэтому Презентеры не требуются для каждого элемента управления на Представлении, как требовались Контроллеры в Smalltalk-80.

Интеракторы напоминают Контроллеры Smalltalk-80. Эти компоненты реагируют на сообщения пользователя, используя соответствующие Команды и Наборы Модели.

Шаблон Dolphin Smalltalk Model-View-Presenter

Обзор

Шаблон Dolphin Smalltalk Model-View-Presenter выделяет данные приложения, отображение и логику отображения в специализированные компоненты - Модель, Представление и Презентер. Команда Dolphin Smalltalk упростила шаблон Taligent MVP путем удаления Интеракторов, Команд и Наборов из формального описания. Это, в свою очередь, упростило Презентер путем замены роли управления определенными подсистемами приложения на посредничество между Моделью и Представлением.

Происхождение и мотивация

Шаблон Dolphin Smalltalk Model-View-Presenter был адаптирован из шаблона Taligent Model-View-Presenter для решения проблем гибкости в команде разработчиков Dolphin, касающиеся разделения представления и домена приложения. Команда рассматривала вариацию шаблона MVC, используемую в ParcPlace Systems' VisualWorks. Хотя команда Dolphin изначально рассматривала дизайн VisualWorks MVC, позже она была разочарована установленной Моделью Приложения, чья сложность время от времени искушала разработчиков разрешить модели использовать представление напрямую. Также команда выяснила, что MVC-концепция Контроллера, первичной целью которого была реакция на пользовательские сообщения, не сочеталась с платформами разработки, где базовые элементы управления обрабатывали пользовательский ввод самостоятельно. После знакомства с шаблоном Taligent MVP, команда Dolphin сделала вывод, что он больше удовлетворял их задачам. Не смотря на преимущества шаблона Taligent MVP, команда ошибочно верила, что Taligent вывела свой шаблон из реализации VisualWorks’ MVC и устранила использование Модели Приложения путем перемещения логики представления из Модели в Презентер. Они описали это, как Поворот Триады, хотя это не описывает разницу между шаблонами Taligent MVP и оригинальным Smalltalk-80 MVC. По этой причине, они видели Презентер, как замену Модели Приложения из VisualWorks’ MVC, нежели как эволюцию Контроллера Smalltalk-80 MVC. Результирующий шаблон, реализованный командой Dolphin Smalltalk, был лишен большинства компонентов, которые выделяли оригинальный MVP от MVC. С другой стороны, были представлены отличительные качества.

Структура

Следующая диаграмма изображает структуру шаблона Dolphin Smalltalk Model-View-Presenter:

The structure of the Dolphin Smalltalk Model-View-Presenter pattern

Компоненты

Модель отвечает за данные и бизнес логику приложения.

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

Презентер - это компонент, который содержит логику представления Модели.

Взаимодействия

В контексте шаблона Dolphin MVP, Представления перехватывают сообщения пользователя, сгенерированные операционной системой. Этот выбор был результатом разработки для ОС Microsoft Windows, чьи базовые элементы управления покрывали большую часть функционала контроллера. В немногих случаях Представление отвечало на пользовательские сообщения обновляя напрямую Модель, но, в большинстве случаев, события делегировались Презентеру. Описание Dolphin Smalltalk предполагает, что Представление только делегирует события, когда требуются обновления Модели, таким образом оставляя всю логику отображения Представлению.

Как и в шаблоне Taligent MVP, существует единственный Презентер, обрабатывающий обновления Модели для конкретного Представления.

Как и в шаблоне Model-View-Controller, Представление уведомляется об изменениях Модели при помощи шаблона Обозреватель и отвечает обновлением релевантных частей экрана.

Dolphin Smalltalk MVP и Smalltalk-80 MVC

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

В контексте оригинального шаблона Model-View-Controller ключевой задачей Контроллера был перехват пользовательского ввода. Роль Контроллера по обновлению Модели была по большей части побочным эффектом этой функции, нежели неотъемлемой частью.

В контексте шаблона Dolphin Smalltalk Model-View-Presenter, наоборот, ключевой целью Презентера было обновление Модели. Роль Презентера по перехвату сообщений, делегированных Представлением, была побочным продуктом этой функции, нежели неотъемлемой частью.

Частью оригинальной идеи, которая привела к разработке шаблона MVC, было разделение пользовательского интеллектуального отображения данных (Модели) и логики, которая позволяла пользователю взаимодействовать с этим представлением (Редактор). Это считали разделением Модель\Редактор (4). Так как задачи по отображению данных на экране технически сильно отличались от задач интерпретации пользовательского ввода, объединение их в один объект вносило излишнюю сложность. Поэтому, задачи ввода и выводы были разделены по Контроллерам и Представлениям. Поскольку Контроллеры получили обязанности Редактора, логично, что они также стали ответственными за обновление Модели по причине пользовательского ввода.

В рамках шаблона Dolphin Smalltalk MVP, роль перехвата пользовательского ввода была возложена на Представление. Это эффективно устранило начальную потребность в Контроллерах и Интеракторах. Хотя команда Taligent видела оригинальную идею Презентера, как продвижение Контроллера на уровень приложения, команда Dolphin ошибочно расценивала его, как замену Модели Приложения VisualWorks и поддерживала Презентер, как посредствующий компонент в триаде.

Итак, хотя шаблоны Dolphin Smalltalk MVP и Smalltalk-80 MVC могут казаться похожими на первый взгляд, Презентеры и Контроллеры отличаются целью, для достижения которой их придумали.

Visual C++ 2008 Feature Pack problems

Все оказалось хуже, чем я писал ранее:

Unfortunately, a set of setup & deployment issues have been reported with the Visual C++ 2008 Feature Pack. Some of these are blocking issues and, as a result, we are currently working on a refresh of the Feature Pack. In the interim, a list of the issues and their workarounds is provided below. These issues will all be addressed via the refresh.

Entity Framework release

Короче, ждать прийдется еще долго. Зато вместе с Visual Studio 2008 SP1.

It's settled! The Entity Framework (and the Entity Designer) along with ADO.NET Data Services will RTM as part of the Visual Studio 2008 and .NET 3.5 SP1 releases!

Unfortunately, we don't have official release dates at this point, but stay tuned. You'll also want to keep an eye out for the upcoming SP1 Beta 1, which will be your next chance to check out updated bits for both of these products.

Visual C++ 2008 Feature Pack Release

Наконец-то вышло обновление библиотеки MFC и TR1 для Visual C++. Я уже писал о выходе бета версии.

Судя по описанию, Microsoft, как всегда, выпустила сырье побыстрее. Щас буду смотреть :).

Download Visual C++ 2008 Feature Pack Release (322.84 Mb).

C+ developer vacancy

Из описания вакансии:

- программирование (С+, С++)

LNK1000: Internal error during IncrBuildImage

У Visual Studio 2008 есть серьезный дефект, который не позволяет использовать ее в качестве платформы разработки на С++. Дефект называется LINK : fatal error LNK1000: Internal error during IncrBuildImage и возникает практически при каждой сборке.

3 месяца народ репортил проблемы, а хотфикс появился только сейчас, стыд.

Copyright 2007-2011 Chabster