6/30/2007

Command Prompt внутри Visual Studio

VSCmdShell Toolэто Command Prompt, встроенный в Visual Studio.

После установки в Visual Studio см. в главном меню: View – Shell Windows (VsCmdShell).

Умеет работать с Ctrl+C и Ctrl+V; есть привычное выделение мышью.

 

Прощай, Command Prompt J, в котором в результате Ctrl+V появляется ^V, а для копирования текста надо вызвать контекстное меню, нажать Mark, выделить блок (а не текст), нажать Enter  ... это ж надо было такое придумать. Наверное, идея такого копирования лежала в основе допотопного *niх'а J, и реализовывал такое копирование тайный фанат этого самого *nix'a.

Каждый раз как я использовал такое копирование, отмечал, что это – тихий ужОс.

Guidance Automation

Как жизнь разработчика сделать проще?

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

Основные принципы работы GA:

·         GA интегрирован в Visual Studio.

·         Диалог GA можно вызвать через контекстное меню.

·         GA содержит список заданий, которые можно выполнить над объектом (для которого было вызвано контекстное меню).

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

·         Задания можно создавать на основе готовых компонентов. Созданные задания отображаются в диалоге GA.

 

Guidance Automation Extensions

The Guidance Automation Extensions (GAX) enable you to run guidance packages, such as the Guidance Automation Toolkit or those included in Software Factories. You can use the Guidance Automation Toolkit (GAT) to author or customize guidance packages.

Guidance Automation Toolkit

The Guidance Automation Toolkit allows you to author guidance packages and software factories which expose reusable code and pattern assets directly in Visual Studio 2005. It is designed to simplify integrating reusable code into applications, by automating development activities that developers would usually perform manually.

 

P.S.

Software Factories является приоритетным направлением ... См. Where Software Architecture Goes from Here «While concepts like patterns and SOA are already or are becoming mainstream, software architecture continues evolving and expanding to new spaces. Although this article is too short to discuss all of the other software architecture trends which build on SOA, like model driven architecture (MDA) or software factories, you can find more information on the Software Factories page in the MSDN/Architecture Center.»

Skyscrapr - сайт для архитекторов ПО

Skyscrapr - site on MSDN where you can learn about software architects and architecture.  Whether you have a career aspiration to become a software architect, or you are wondering what architects in IT organizations are responsible for, Skyscrapr is the place to find out the answer.

 

FAQ с ответами на вопросы: Кто такие архитекторы? Что делают / чем занимаются архитекторы? Как стать архитектором?

Другие сайты по теме: MSDN/Architecture, The Architecture Journal, Related Sites.

Типы архитекторов: Solutions Architecture, Infrastructure Architecture, Enterprise Architecture.

Форум по архитектуре ПО: forum

Адреса, явки и пароли известных архитекторов: Architect Career Profiles.

Работа с командной строкой

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

 

Способ 1:

(код разбора строки и загрузки свойств находится внутри класса)

 

public class Host

{

    public static void Main(string[] args)

    {

        Util util = new Util(args);

        util.Start();

    }

}

public class Util

{

    public Util(string[] args)

    {

        // парсинг и валидация значений args[]

    }

    public void Start() {...}

}

 

Плюс: коротко и ясно.

Минус: если Util понадобится, например, в WF-активности, то при каждом вызове будет происходить парсинг и валидация значений args[].

 

Примечание: конструктор Util можно сделать без параметров, при этом использовать значение Environment.CommandLine.

 

Способ 2:

(отдельный immutable-класс с параметрами для класса Util)

 

public class Host

{

    public static void Main(string[] args)

    {

        UtilSettings us = new UtilSettings(args);

        Util util = new Util(us);

        util.Start();

    }

}

public class Util

{

    public Util(UtilSettings s) {...}   

    public void Start() {...}

}

 

public class UtilSettings

{

    public UtilSettings(string[] args) {...}

}

 

Плюс: избавились от минуса, который был в «Способ 1».

Минус: данные для UtilSettings передаются через конструктор. Если источников с данными будет несколько, то и конструкторов будет несколько. В итоге, чтобы понять что делать с данными, надо будет смотреть на количество и очередность параметров у конструкторов.

 

Способ 3:

(модифицированный UtilSettings из «Способ 2»)

 

public class UtilSettings

{

    private UtilSettings() { }

    public static UtilSettings FromCommandLine(string[] args) {...}

}

 

Плюс: избавились от минуса, который был в «Способ 2».

Минус: нет.

 

Теперь, если понадобится загрузить параметры, например, из xml-файла, то в UtilSettings надо просто добавить соответствующий метод, например,

public static UtilSettings FromXml(string path) {…}

Компоненты для работы с HTTP, FTP, SMTP and POP3

Вот эти «хлебные крошки»* MSDN Home > Visual Studio > Extending Visual Studio > Affiliate Home Page ведут к набору компонентов для работы с HTTP, FTP, SMTP and POP3.

 

Компания RemObjects предлагает «Internet Pack 'Vinci' for .NET»:

 

The main goal of Internet Pack is to abstract the already powerful and relatively easy to use Socket classes of the .NET framework to provide a library that makes it easy to implement the different communication protocols commonly used on the Internet, as well as to implement custom forms of network communication. Built on top of this flexible and highly scalable architecture, Internet Pack provides ready-to-use client and server components for many protocols, including HTTP, FTP, SMTP and POP3, and more components are added over time. Internet Pack for .NET is available as a free download including full source, under the Internet Pack License.

Product Features:

  • Lightweight and comfortable to use base framework
  • Flexible and highly scalable architecture
  • Extendable Connection class allows you to easily integrate custom encryption or compression solutions
  • Extendable FTP Server framework and VirtualFTP sample implementation
  • CommandBasedServer and Client based components allow you to easily implement your own command based protocols (such as SMTP, FTP Command Connection, etc.)

Пока не смотрел, но судя по описанию, там есть на что посмотреть.

То что есть исходник – это хорошо. Но можно и без него обойтись, если сборки не обфусцированы (см. Reflector) ;)

 

* «хлебные крошки» = navigation path — which is also known as a breadcrumb or eyebrow — that shows the user the current page location and displays links as a path back to the home page.

Windows Live расширяется

В Windows Live скоро появятся новые сервисы:

 

Windows Live Photo Gallery

is a stand-alone service that upgrades Windows Vista's Windows Photo Gallery. Offered at no charge, Windows Live Photo Gallery enables both  Windows Vista and Windows XP SP2 customers to share, edit, organize and print photos and digital home videos).

 

Windows Live Folders

will provide customers with 500 megabytes of online storage at no charge.

 

Так сказал Chris Jones (Corporate Vice President, Windows Live Experience Program Management).

А еще он сказал: we want to people to be able to connect to the content they want regardless of what device they're on – be it a PC at home or work, or a phone. ... We're taking proactive steps to make this a reality.

 

P.S.

Наверное, не пройдет и года, как Microsoft объявит о выходе .NET-процессора с названием, например, «Кристаллический .NET» или «Силиконовый .NET». Скорее всего .NET-процессоры будут использоваться не только в  телефонах ;)

6/28/2007

Windows Mail

Windows Mail  - это всем известный Outlook Express после прокачки J. Наконец-то, можно создавать учетные записи на основе xml-файлов (IMAP Mail Account File, NNTP News Account File, Template Account File).

см. MSDN: New Handling for Account Data

(ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/outlookexpress/oe/overviews/account_entry.htm)

Не работает View - Source в IE

Ситуация: иногда бывает, что IE не может или не хочет отобразить код страниц. Т.е. вызов ViewSource  не работает как предполагается.

Решение:

1.      Создать папку, например, Z:\Projects\IE View Source

2.      Создать в ней файл: ViewSource.htm со следующим текстом:
<html>

<body>

<script language="JavaScript" defer>

var win = external.menuArguments;

var szsource = win.document.documentElement.outerHTML;

 

var wincounter = 0;

var mywin = null;

do

{

mywin = window.open("about:blank", "Source" + wincounter++,       
                    "toolbar=no,location=no,menubar=yes,status=yes,scrollbars=yes,resizable=yes");

}

while(mywin == null);

 

mywin.document.open("text/plain");

mywin.document.write(szsource);

mywin.document.close();

mywin.document.title = "Source for: " + win.location.href;

</script>

</body>

</html>

3.      Запустить regedit; в ветке  HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt создать Key с именем
View Source.
В Default записать: Z:\Projects\IE View Source\ViewSource.htm

4.      Открыть IE, в контекстном меню выбрать View Source.

 

Подробнее, см. MSDN: "Adding Entries to the Standard Context Menu" (ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WEBDEV.v10.en/ieext/workshop/browser/ext/tutorials/context.htm)

 

P.S.

Все сказанное выше не поможет, если IE запущен в режиме Run As с включенным Run this Program with restricted access.

Лучшая реклама Windows Server 2008

Под управлением Windows Server 2008 теперь работают все сайты Microsoft.

Статистика:

Audience Reach:

   #4 in U.S (65M UU) & #5 worldwide (287M UU)

Availability YTD:

   99.83% (Measured by Keynote Systems, Inc.)

   0% Impact to Availability during upgrade to Beta 3

   99%+ of hosted App's upgraded without any change required

Hosting Model:
   2 Internet Data Centers &  80 Web Servers

   500+ Vroots, 350+ IIS Web Applications & 12 Application Pools

   10,000 Requests/Sec & 300,000 Concurrent Connections

 

6/27/2007

Баг в Outlook Express и Microsoft Excel 2007

Outlook Express:

Открыть Outlook Express во весь экран. Перейти на одну из групп новостей на любом из новостных серверов (NNTP). Запустить flash.exe (Microsoft HTML Help Image Editor Version 4.73). Выбрать режим «Capture Using Mouse».Окно flash'а скрывается, под мышью находится Outlook Express и список тем из выбранной группы новостей. Щелкнуть левой кнопкой мыши. Окно flash'а появляется и в нем некорректный скриншот. Список новостей в Outlook Express смещен в правый нижний угол

 

OE.jpg

 

Excel 2007:

Открыть Excel 2007 во весь экран. Запустить flash.exe. Выбрать режим «Capture Using Mouse». Щелкнуть левой кнопкой мыши. В результате скриншот некорректный, а в Excel вся сетка съезжает вниз. И с каждым создание скриншота съезжает все больше и больше.

 

Excel2007.jpg

 

P.S.

ОС: Windows Server 2003 R2 EE SP2

 

Software Update Services

Кто писал Automatic Updates? Сэкономили на юзабилити: окно маленькое, изменить размер невозможно; невозможно указать порядок загрузки исправлений; список обновлений отображается в виде текста, а не в виде таблицы: [степень важности | дата выхода | название | размер обновления | продукт ];

Среди компонентов Windows нашел Software Update Services. Подумал, что в нем есть все что мне надо.

После установки в IIS появилось новое веб-приложение http://localhost/susadmin/

На странице Synchronize server нажал на кнопку Synchronize Now. Через какое-то время получил сообщение, что загружается 1-е исправление из, кажется, 1345 исправлений. М-да ... L

Переезд завершен

Сегодня можно поставить точку, переезд на Windows Server 2003 завершен! Это было похоже на страшный сон. То драйверов нет, то еще что-то. Самый ужас -  установка TFS (Team Foundation Server). У него самый привередливый инсталятор. Ему надо … нет, не буду говорить, что ему надо J ... лучше всего при его установке строжайшим образом соблюдать все шаги, приведенные в TFSInstall.chm! Иначе инсталятор TFS будет выдавать ошибки одну за другой, см. Common Team Foundation Server installation errors and possible resolutions.

6/18/2007

События DataGridView

Решил посмотреть на последовательность событий, которые создает DataGridView. В гриде всего один столбец и две строки с текстом.

 

DataTable table = new DataTable();

table.Columns.Add("key", typeof(string));

for (int i=0; i < 2; i++)

    table.Rows.Add("key" + i);

 

DataGridView grid = new DataGridView();
grid.Dock = DockStyle.Fill;

grid.Parent = this;

grid.DataSource = table;

grid.AllowUserToAddRows = false;

grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

 

С помощью UniversalEventHandler сгенерировал код, который ко всем найденным 187-и событиям подключил общий для всех обработчик. Запустил программу и получил от DataGridView следующие события:

 

0001: DockChanged

0002: ParentChanged

0003: VisibleChanged

0004: Layout

0005: Resize

0006: SizeChanged

0007: ClientSizeChanged

0008: ColumnAdded

0009: RowHeightInfoNeeded

0010: RowHeightInfoNeeded

0011: RowsAdded

0012: RowsRemoved

0013: RowHeightInfoNeeded

0014: RowHeightInfoNeeded

0015: RowsAdded

0016: RowHeightInfoNeeded

0017: RowsAdded

0018: RowHeightInfoNeeded

0019: RowsAdded

0020: BindingContextChanged

0021: DataBindingComplete

0022: RowsRemoved

0023: ColumnRemoved

0024: ColumnAdded

0025: RowHeightInfoNeeded

0026: RowHeightInfoNeeded

0027: RowsAdded

0028: RowsRemoved

0029: RowHeightInfoNeeded

0030: RowHeightInfoNeeded

0031: RowsAdded

0032: RowHeightInfoNeeded

0033: RowsAdded

0034: RowHeightInfoNeeded

0035: RowsAdded

0036: DataSourceChanged

0037: DataBindingComplete

0038: RowsRemoved

0039: AllowUserToAddRowsChanged

0040: AutoSizeColumnsModeChanged

0041: HandleCreated

0042: RowHeightInfoNeeded

0043: RowHeightInfoNeeded

0044: RowHeightInfoNeeded

0045: RowHeightInfoNeeded

0046: RowHeightInfoNeeded

0047: RowHeightInfoNeeded

0048: RowUnshared

0049: RowStateChanged

0050: RowUnshared

0051: RowStateChanged

0052: ColumnStateChanged

0053: Invalidated

0054: ColumnWidthChanged

0055: RowHeightInfoNeeded

0056: RowHeightInfoNeeded

0057: RowEnter

0058: CurrentCellChanged

0059: CellEnter

0060: RowHeightInfoNeeded

0061: RowHeightInfoNeeded

0062: Invalidated

0063: RowHeightInfoNeeded

0064: RowHeightInfoNeeded

0065: Invalidated

0066: RowHeightInfoNeeded

0067: RowHeightInfoNeeded

0068: Invalidated

0069: RowStateChanged

0070: SelectionChanged

0071: RowHeightInfoNeeded

0072: RowHeightInfoNeeded

0073: Invalidated

0074: RowStateChanged

0075: SelectionChanged

0076: CellLeave

0077: RowLeave

0078: CellFormatting

0079: CellValidating

0080: CellValidated

0081: RowValidating

0082: RowValidated

0083: ImeModeChanged

0084: CurrentCellChanged

0085: RowHeightInfoNeeded

0086: RowHeightInfoNeeded

0087: Invalidated

0088: RowHeightInfoNeeded

0089: RowHeightInfoNeeded

0090: Invalidated

0091: Invalidated

0092: RowsRemoved

0093: RowStateChanged

0094: RowStateChanged

0095: ColumnRemoved

0096: Invalidated

0097: ColumnStateChanged

0098: ColumnAdded

0099: ColumnStateChanged

0100: Invalidated

0101: Invalidated

0102: Invalidated

0103: RowHeightInfoNeeded

0104: RowHeightInfoNeeded

0105: RowHeightInfoNeeded

0106: RowHeightInfoNeeded

0107: RowHeightInfoNeeded

0108: RowUnshared

0109: RowStateChanged

0110: Invalidated

0111: RowsAdded

0112: RowEnter

0113: CurrentCellChanged

0114: CellEnter

0115: RowHeightInfoNeeded

0116: RowHeightInfoNeeded

0117: Invalidated

0118: RowHeightInfoNeeded

0119: RowHeightInfoNeeded

0120: Invalidated

0121: RowHeightInfoNeeded

0122: RowHeightInfoNeeded

0123: Invalidated

0124: RowStateChanged

0125: SelectionChanged

0126: RowHeightInfoNeeded

0127: RowHeightInfoNeeded

0128: RowHeightInfoNeeded

0129: RowHeightInfoNeeded

0130: RowHeightInfoNeeded

0131: RowHeightInfoNeeded

0132: RowHeightInfoNeeded

0133: RowHeightInfoNeeded

0134: RowHeightInfoNeeded

0135: RowUnshared

0136: RowStateChanged

0137: Invalidated

0138: RowsAdded

0139: Invalidated

0140: BindingContextChanged

0141: DataBindingComplete

0142: VisibleChanged

0143: Enter

0144: RowEnter

0145: CellEnter

0146: RowHeightInfoNeeded

0147: RowHeightInfoNeeded

0148: Invalidated

0149: GotFocus

0150: RowHeightInfoNeeded

0151: RowHeightInfoNeeded

0152: Invalidated

0153: Invalidated

0154: CellPainting

0155: CellPainting

0156: RowHeightInfoNeeded

0157: RowErrorTextNeeded

0158: RowPrePaint

0159: RowErrorTextNeeded

0160: CellPainting

0161: CellErrorTextNeeded

0162: CellFormatting

0163: CellPainting

0164: ChangeUICues

0165: Invalidated

0166: RowErrorTextNeeded

0167: RowPostPaint

0168: RowHeightInfoNeeded

0169: RowErrorTextNeeded

0170: RowPrePaint

0171: RowErrorTextNeeded

0172: CellPainting

0173: CellErrorTextNeeded

0174: CellFormatting

0175: CellPainting

0176: RowErrorTextNeeded

0177: RowPostPaint

0178: Paint

0179: CellPainting

0180: CellPainting

0181: RowHeightInfoNeeded

0182: RowErrorTextNeeded

0183: RowPrePaint

0184: RowErrorTextNeeded

0185: CellPainting

0186: CellErrorTextNeeded

0187: CellFormatting

0188: CellPainting

0189: RowErrorTextNeeded

0190: RowPostPaint

0191: RowHeightInfoNeeded

0192: RowErrorTextNeeded

0193: RowPrePaint

0194: RowErrorTextNeeded

0195: CellPainting

0196: CellErrorTextNeeded

0197: CellFormatting

0198: CellPainting

0199: RowErrorTextNeeded

0200: RowPostPaint

0201: Paint

 

На этом события прекратились. Строка «Key0» выделена. Жму на клавиатуре, например, на «d». В результате DataGridView посылает следующие события:

 

0202: PreviewKeyDown

0203: CellBeginEdit

0204: CellFormatting

0205: ControlAdded

0206: EditingControlShowing

0207: RowHeightInfoNeeded

0208: LostFocus

0209: RowHeightInfoNeeded

0210: RowHeightInfoNeeded

0211: Invalidated

0212: RowHeightInfoNeeded

0213: RowHeightInfoNeeded

0214: Invalidated

0215: RowHeightInfoNeeded

0216: RowHeightInfoNeeded

0217: Invalidated

0218: CurrentCellDirtyStateChanged

0219: RowHeightInfoNeeded

0220: RowErrorTextNeeded

0221: RowPrePaint

0222: RowErrorTextNeeded

0223: CellPainting

0224: CellErrorTextNeeded

0225: CellPainting

0226: RowErrorTextNeeded

0227: RowPostPaint

0228: RowHeightInfoNeeded

0229: Paint

 

Вместо «Key0» в текстовом редакторе отобразилась буква «d». Нажимаю «Enter». DataGridView посылает следующие события:

 

0230: CellLeave

0231: RowLeave

0232: CellValidating

0233: CellParsing

0234: RowHeightInfoNeeded

0235: RowHeightInfoNeeded

0236: Invalidated

0237: RowHeightInfoNeeded

0238: RowHeightInfoNeeded

0239: Invalidated

0240: CellValueChanged

0241: RowHeightInfoNeeded

0242: RowHeightInfoNeeded

0243: Invalidated

0244: CurrentCellDirtyStateChanged

0245: CellValidated

0246: GotFocus

0247: RowHeightInfoNeeded

0248: RowHeightInfoNeeded

0249: Invalidated

0250: ControlRemoved

0251: RowHeightInfoNeeded

0252: RowHeightInfoNeeded

0253: Invalidated

0254: CellEndEdit

0255: RowValidating

0256: RowHeightInfoNeeded

0257: RowHeightInfoNeeded

0258: Invalidated

0259: DataBindingComplete

0260: RowHeightInfoNeeded

0261: RowHeightInfoNeeded

0262: Invalidated

0263: RowValidated

0264: RowHeightInfoNeeded

0265: RowHeightInfoNeeded

0266: RowHeightInfoNeeded

0267: RowHeightInfoNeeded

0268: Invalidated

0269: RowStateChanged

0270: RowHeightInfoNeeded

0271: RowHeightInfoNeeded

0272: RowHeightInfoNeeded

0273: Invalidated

0274: RowStateChanged

0275: RowEnter

0276: CurrentCellChanged

0277: CellEnter

0278: RowHeightInfoNeeded

0279: RowHeightInfoNeeded

0280: Invalidated

0281: RowHeightInfoNeeded

0282: RowHeightInfoNeeded

0283: Invalidated

0284: RowHeightInfoNeeded

0285: RowHeightInfoNeeded

0286: RowHeightInfoNeeded

0287: Invalidated

0288: RowHeightInfoNeeded

0289: RowHeightInfoNeeded

0290: RowHeightInfoNeeded

0291: Invalidated

0292: SelectionChanged

0293: KeyUp

0294: RowHeightInfoNeeded

0295: RowErrorTextNeeded

0296: RowPrePaint

0297: RowErrorTextNeeded

0298: CellPainting

0299: CellErrorTextNeeded

0300: CellFormatting

0301: CellPainting

0302: RowErrorTextNeeded

0303: RowPostPaint

0304: RowHeightInfoNeeded

0305: RowErrorTextNeeded

0306: RowPrePaint

0307: RowErrorTextNeeded

0308: CellPainting

0309: CellErrorTextNeeded

0310: CellFormatting

0311: CellPainting

0312: RowErrorTextNeeded

0313: RowPostPaint

0314: Paint

 

Вот и все J

Высота строки в DataGridView

Высоту строк можно задавать в обработчике события DataGridView.RowHeightInfoNeeded. Например, если высота каждой второй строки должна быть равна 50 пикселей, то в обработчике пишем следующее:

 

if(e.RowIndex % 2 != 0)

    e.Height = 50;

else

    e.Height = 24;

 

else … – это обязательно; иначе высота у всех строк будет одинаковая.

6/15/2007

Получил посылку

Наконец-то получил долгожданную посылку! Теперь у меня есть полная последняя версия MSDN за июнь 2007 прямо из Microsoft. Еще номинация подтвердилась бы, и буду полностью счастлив J

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

 

Поставил Microsoft Outlook 2007. Удобно, красиво. Но без шероховатостей не обошлось. Открыл контекстное меню для «RSS Feeds», выбрал “Import an OPML File…”,  указал файл уже не помню какого сайта с блогами. Загрузилось примерно 500 блогов. И, о ужас, в Outlook не реализованы групповые операции над фидами. Т.е. в папке RSS Feeds невозможно пометить несколько элементов и переместить их в другую папку. А может есть где-нибудь разрешающий чекбокс?

6/12/2007

Создание зависимостей между файлами в проекте

Например, есть большой проект с большим количеством файлов, некоторые из которых - это многие сотни строк кода. Чтобы упростить работу с такими "монстрами", можно определенные методы поместить в регионы (т.е. между #region и #endregion). Это помогает, но регионов тоже бывает слишком много. В таком случае можно объявить класс как partial и вынести часть методов в отдельный файл. Например, часть содержимого ObjectVisualize.cs вынести в ObjectVisualize.Interop.cs.
На первый взгляд - это удобно, но при этом количество файлов в Solution Explorer увеличивается - это "минус". Если файл разбит на несколько частей, и их надо перекинуть в другой проект, то приходится помечать каждый файл и после этого перекидывать. Что не очень удобно. Но есть еще один способ - создать зависимость между файлами. Например, для ObjectVisualize.cs и ObjectVisualize.Interop.cs надо:

  1. открыть .csproj-файл проекта в текстовом или xml редакторе
  2. найти тег <Compile Include="ObjectVisualize.Interop.cs"> и в него добавить тег <DependentUpon>ObjectVisualizer.cs</DependentUpon>
  3. сохранить файл
  4. в VS.IDE в появившемся диалоге "File Modification Detected" нажать "Reload".
В результате в Solution Explorer у ObjectVisualize.cs слева появится [+] и подфайл ObjectVisualize.Interop.cs. Это очень удобно. Cтранно, что в Visual Studio 2005 на уровне UI нет встроенной возможности по созданию зависимостей между файлами c partial классами, но воможно появится в следующей версии.

6/05/2007

Visual Studio 2008 Shell

Наверное, Visual Studio 2008 Shell - это самый долгожданный продукт для всех тех, кто когда-либо пытался создать WinForms приложение, похожее на Visual Studio IDE.

Было много реализаций ... Из всех мне в свое время понравились: DockManager (или WinFormsUI Docking, автор - Weifen Luo, см. на sourceforge.net) и SandDock (обнаружил в статье "Creating MS Office like automation supported object model in .NET", скачать).

Так вот, благодаря Visual Studio 2008 Shell теперь можно создать свою IDE, со своим Solution Explorer'ом, вложенными проектами, своими Toolbar'ами, редакторами и т.д. Наконец-то можно будет предоставить заказчику CMS (систему управления контентом/сайтом), в которой все привычно и удобно, нет ничего лишнего, есть поддержка Drag'n'Drop и не требуется постоянного подключения к сети.

- Visual Studio 2008 Shell Home Page
- Visual Studio Extensibility Team Blog

Visual Studio Shell (isolated mode)

In-process database (встроенная СУБД)

Можно забыть про сериализацию/десериализацию DataSet'ов и про Microsoft Access database.


SQL Server 2005 Compact Edition (прежнее название - SQL Server Everywhere Edition) - Ideal for mobile and desktop applications; Embeddable in applications for all Windows platforms, including tablet PCs, pocket PCs and smart phones (no longer restricted to the Windows Mobile platform); Free to download, develop, deploy, and redistribute; Microsoft is positioning Compact Edition as the default local database.

В Compact Edition отсутствует full text search и XML query processing.

- Microsoft SQL Server 2005 Compact Edition Home



- Microsoft SQL Server 2005 Compact Edition Overview
- Choosing Between SQL Server 2005 Compact Edition and SQL Server 2005 Express Edition
- Microsoft SQL Server 2005 Compact Edition Access Database Synchronizer - provides a way to synchronize data between Microsoft Access database on a desktop and Microsoft SQL Server 2005 Compact Edition database on a device.

6/04/2007

Блоггеры очень рискуют

Люди так устроены, что не могут без общения. Форма общения значения не имеет. Главное, чтобы было с кем поделиться порцией результатов деятельности своего ума и получить в ответ результаты деятельности чужого ума. Наверное, поэтому такое распространение получили блоги. Что только не пишут в блогах, какие только темы не обсуждают. Это может привести к серьезным последствиямНапример, всего одна фраза в блоге: "мой шеф решил использовать зеленую краску для покрытия носа" может очень не понравиться работодателю, для которого это не просто фраза, а факт - раскрытие конфиденциальной информации. И никто не будет смотреть на то, что блог читает только бабушка блоггера, которая работала на том же месте, что и внук, а теперь на пенсии и живет в другом городе, но очень интересуется делами компании из праздного любопытства. Что же делать блоггеру? Оградить бабушку или надеяться на то, что работодатель не сможет найти блог? Найдет, еще как найдет ;) Очевидно, что необходимо спрятать определенный контент от посторонних глаз. Но как спрятать контент, если он находится на серверах у хостера? Понятно, что у хостера никак не спрятать. И не надо надеяться, что "утечка" никогда не произойдет. Казалось бы - это тупик, но выход есть - это WHS, а также результаты конкурса Code2Fame Challenge.

Кстати, люди еще любят фиксировать моменты своей жизни: фотографируют, снимают видео. Поэтому в исследовательских центрах уже ведутся работы по разботке технологий для фиксации всего того, что человек видит, слышит, чувствует. В Microsoft есть проекты MyLifeBits Project и Digital Memories (Memex). В Японии разработали систему по записи и воспроизведению запахов. Еще есть концепция personal-memory storage (см. Computing in the 21st Century: A Collection of Heady Visions). Но все это проникнет в нашу жизнь через несколько лет, а пока в броузеры наконец-то встроят базу данных (SQLite) для хранения истории посещенных страниц.

Подробнее о MyLifeBits:

"MyLifeBits is a lifetime store of everything. It is the fulfillment of Vannevar Bush's 1945 Memex vision including full-text search, text & audio annotations, and hyperlinks. There are two parts to MyLifeBits: an experiment in lifetime storage, and a software research effort. The experiment: Gordon Bell has captured a lifetime's worth of articles, books, cards, CDs, letters, memos, papers, photos, pictures, presentations, home movies, videotaped lectures, and voice recordings and stored them digitally. He is now paperless, and is beginning to capture phone calls, IM transcripts, television, and radio. The software research: Jim Gemmell and Roger Lueder have developed the MyLifeBits software, which leverages SQL server to support: hyperlinks, annotations, reports, saved queries, pivoting, clustering, and fast search. MyLifeBits is designed to make annotation easy, including  gang annotation on right click, voice annotation, and web browser integration. It includes tools to record web pages, IM transcripts, radio and television. The MyLifeBits screensaver supports annotation and rating. We are beginning to explore features such as document similarity ranking and faceted classification. We have collaborated with the WWMX team to get a mapped UI, and with the SenseCam team to digest and display SenseCam output. Support for academic research: Our team helped administer the Microsoft Research Digital Memories (Memex) request for proposals. Winners are now posted. We also helped establish the ACM CARPE Workshops: CARPE 2004    CARPE 2005   CARPE 2006. Many more links can be found at the CARPE Research Community web site".

Продолжается рост 3D-модели мира

Трехмерная модель мира продолжает пополняться представительствами крупных компаний. К Microsoft, Intel, IBM и другим, добавилась NASA, которая открыла агентство CoLab в  Second Life. CoLab будет заниматься поиском специалистов и всех заинтересованных в космических полетах среди более чем 6-ти миллионов обитателей виртуальной вселенной. >>

"Microsoft Dynamics CRM 3.0" в подарок

Microsoft Dynamics выпускает книги о CRM- и ERP-системах. Есть возможность получить одну из книг бесплатно, просто заполнив форму на сайте «Библиотека Microsoft Dynamics».

Из всех книг я выбрал "Microsoft Dynamics CRM 3.0" - детальное практическое руководство по конфигурированию, адаптации и расширению возможностей Microsoft Dynamics CRM. Книга адресована разработчикам, IT-специалистам и опытным пользователям, которым требуется изучить новые возможности и усовершенствования Microsoft Dynamics CRM 3.0.

Авторы: Майкл Снайдер, Джим Стегер — ведущие мировых экперты в области CRM, соучредители консалтинговой компании Sonoma Partners, которая в 2003 и 2005 годах была награждена компанией Microsoft титулом лучшей в мире партнерской организацией по реализации проектов на базе Microsoft Dynamics CRM.

В книге есть: инструкции по интеграции; примеры программного кода, которые можно адаптировать для той или иной ситуации; как настроить Microsoft Dynamics CRM 3.0; как управлять доступом к информации посредством настроек безопасности; как создавать и применять пользовательские отчеты; как интегрировать Microsoft Dynamics CRM с другими бизнес-приложениями и инструментами; как разрабатывать конфигурации клиентской и серверной части приложения; автоматизировать бизнес-процессы; и многое другое. 

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

P.S.
Спасибо Andrey Gladkikh.

6/03/2007

Что такое Sitemaps?

Файл Sitemap представляет собой XML-файл, в котором перечислены URL-адреса веб-сайта в сочетании с метаданными, связанными с каждым URL-адресом (дата его последнего изменения; частота изменений; его приоритетность на уровне сайта), чтобы поисковые системы могли более грамотно сканировать этот сайт.

XML-формат файла Sitemap. Sitemap поддерживают Google, Yahoo! и Microsoft.