Welcome to MSDN Blogs Sign in | Join | Help

Тонкая настройка правил рабочих элементов в TFS

Очень часто в организациях и командах использующих Team Foundation Server требуется специфичная функциональность. Действительно,  шаблоны процессов входящие в комплект поставки TFS достаточно универсальны и обеспечивают базовый уровень автоматизации, который может не  учитывать уникальной  специфики свойственной подходу который принят в какой-то конкретной организации или группе разработчиков.

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

Модификации процесса и состояний рабочих элементов могут быть осуществлены как на уровне конкретного процесса, так и на уровне глобального шаблона. Основным инструментарием, который помогает это делать, являются утилиты командной строки WitImport и Witexport. Дополнительно, существуют возможности модификации процессов с помощью расширения Visual Studio Power Tools. Это расширение можно скачать с сайта http://Codeplex.com .

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

Требование по установке поля «Оставшаяся работа» в 0 при переводе задачи в статус «Закрыто».

В некоторых случаях требуется, чтобы полю «Оставшаяся работа» было присвоено значение 0 при переводе задачи в статус «Закрыто». Организуется это следующим образом:

1)      В определении задачи следует создать новое поле «Проверка поля Оставшаяся работа»

      <FIELD type="String" name="Проверка поля Оставшаяся работа"

             refname="Demo.RemainingWorkValidation">

        <ALLOWEDVALUES>

          <LISTITEM value="Ошибок Нет" />

        </ALLOWEDVALUES>

        <WHEN field="Microsoft.VSTS.Scheduling.RemainingWork"

              value="0">

          <COPY from="value" value="Ошибок нет" />

        </WHEN>

      </FIELD>

2)      Добавить новую вкладку, и вывести это поле на эту вкладку:

          <Tab Label="Валидация">

            <Group>

              <Column PercentWidth="100">

                <Control Type="FieldControl"

                         FieldName="Demo.RemainingWorkValidation"

                         Label="Проверка обуления поля Оставшаяся работа"

                         LabelPosition="Left"/>               

              </Column>

            </Group>

          </Tab>

3)      Добавить в определение перехода между статусами из «Активно» в «Закрыто» следующий код:

        <TRANSITION from="Активные" to="Закрыто">

          <REASONS>

            <DEFAULTREASON

value="Завершено и не требует просмотра или тестирования"/>

            <REASON value="Отложено"/>

            <REASON value="Вырезать"/>

            <REASON value="Обгоняется событиями"/>

            <REASON value="Отменено"/>

          </REASONS>

          <FIELDS>

            <FIELD refname="Demo.RemainingWorkValidation">

              <WHENNOT field="Microsoft.VSTS.Scheduling.RemainingWork"

                       value="0">

                <COPY from="value"

                      value="Оставшаяся работа должна быть в значении 0"

                      ReadOnly="True"

    />

              </WHENNOT>

            </FIELD>

4)      Добавить в состояние «Активные» следующий код:

        <STATE value="Активные">

          <FIELDS>

            <FIELD refname="Demo.RemainingWorkValidation">

              <COPY from="value" value="Ошибок нет" />

            </FIELD>

5)      Добавить в состояние «Закрыто» следующий код:

        <STATE value="Закрыто">

          <FIELDS>

            <FIELD refname="Demo.RemainingWorkValidation">

              <WHENNOT field="Microsoft.VSTS.Scheduling.RemainingWork"

                       value="0">

                <COPY from="value"

                      value=" Оставшаяся работа должна быть в значении 0" />

              </WHENNOT>

            </FIELD>

 

В результате получим следующее сообщение, если поле «Оставшаяся работа не будет содержать 0 при переводе статуса:

Требование, обеспечивающее возможность перевода рабочего элемента «Ошибка» в статус «Закрыто» только тем пользователем, который его создал.

Иногда требуется ввести ограничение обеспечивающее возможность перевода рабочего элемента «Ошибка» в статус «Закрыто» только тем пользователем, который его создал или администраторами проекта.  Для этого следует ввести следующие модификации в определение стандартного элемента «Ошибка»:

1)      Создать поле «ClosedByValidation»

      <FIELD name="Closed By Validation"

             refname="Demo.ClosedByValidation"

             type="String">

        <COPY from="currentuser" />

        <FROZEN not="[project]\Администраторы проекта"/>

      </FIELD>

2)      Добавить следующее правило в состояние «Закрыто»

        <STATE value="Закрыто">

          <FIELDS>

            <FIELD refname="Demo.ClosedByValidation">

              <COPY from="currentuser" />

            </FIELD>

3)      Добавить новую вкладку «Валидация» и вывести на нее следующие поля:

          <Tab Label="Валидация">

            <Group>

              <Column PercentWidth="100">

                <Control Type="FieldControl"

                         FieldName="System.CreatedBy"

                         Label="Кем создано"

                         LabelPosition="Left"

                         ReadOnly="True" />

 

                <Control Type="FieldControl"

                         FieldName="Demo.ClosedByValidation"

 Label="Кем закрыто (должно соответствовать кем                                                                             создано)"

                         LabelPosition="Left"

                         ReadOnly="True" />

              </Column>

            </Group>

          </Tab>

 

В поле Demo.ClosedByValidation будет записан пользователь – создатель рабочего элемента. И в случае если это значение будет отличаться от текущего пользователя при переводе рабочего элемента «Ошибки» в статус «Закрыто» будет выведено сообщение об ошибке:

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

Иногда требуется чтобы рабочие элементы типа «Ошибка» могли создаваться только пользователями тестерами входящими в группу [project]\Тестировщики. Для этого следует ввести в стандартное определение рабочего элемента «Ошибка» следующие модификации:

1)      В переход между состояниям по умолчанию добавить следующий код:

        <TRANSITION from="" to="Предложено">

          <REASONS>

            <DEFAULTREASON value="Создать"/>

            <REASON value="Не удалось выполнить построение"/>

          </REASONS>

          <FIELDS>

            <FIELD refname="System.AssignedTo">

              <DEFAULT from="currentuser"/>

            </FIELD>

            <FIELD refname="System.State">

              <READONLY not="[project]\Тестировщики" />

            </FIELD>

          </FIELDS>

   </TRANSITION>

 

Теперь при попытке сохранить такой рабочий элемент пользователем который не входит в рабочую группу «Тестировщики» будет выведено сообщение об ошибке:

 

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

        <TRANSITION from=""

to="Предложено"

for="[project]\Тестеры"

not="[project]\Аналитики">

     

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

Обеспечение некоторого поля значениями по умолчанию.

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

        <FIELD name="Категория"

               refname="MyCompany.MyProcess.Category"

               type="String"

               reportable="dimension">

          <ALLOWEDVALUES>

            <LISTITEM value="Управление процессом" />

            <LISTITEM value="Планирование" />

            <LISTITEM value="Исполнение" />

            <LISTITEM value="Ревью" />

          </ALLOWEDVALUES>

          <DEFAULT from="value" value="Исполнение" />

        </FIELD>

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

Обеспечение зависимости поля списка от значений другого поля

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

        <FIELD name="Категория"

               refname="MyCompany.MyProcess.Category"

               type="String"

               reportable="dimension">

          <WHEN field="Microsoft.VSTS.Common.Discipline"

                value="Требования">

            <ALLOWEDVALUES>

              <LISTITEM value="Планирование" />

              <LISTITEM value="Ревью" />

            </ALLOWEDVALUES>

          </WHEN>

          <WHENNOT field="Microsoft.VSTS.Common.Discipline"

                   value="Требования">

            <ALLOWEDVALUES>

              <LISTITEM value="Управление процессом" />

              <LISTITEM value="Планирование" />

              <LISTITEM value="Исполнение" />

              <LISTITEM value="Ревью" />

            </ALLOWEDVALUES>

          </WHENNOT>

          <DEFAULT from="value" value="Исполнение" />

        </FIELD>

 

Как уже стало понятно из примера, требуемая возможность обеспечивается модификаторами WHEN и WHENNOT.

Обеспечение значения поля шаблону.

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

          <FIELD name="Версия"

                 refname="MyCompany.MyProcess.Version"

                 type="String">

            <MATCH pattern="vNN.NN.AX"/>

          </FIELD>

После внесения такой модификации, значение поля будет требовать соответствия шаблону  vNN.NN.AX. Более подробно о формате шаблонов можно узнать в документации к Team Foundation Server.

Обеспечение значения поля «Назначено» некоторому набору пользователей входящих в группу.

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

        <FIELD name="Назначено"

               refname="System.AssignedTo"

               type="String"

               reportable="dimension">

          <ALLOWEDVALUES expanditems="true">

            <LISTITEM value="[Project]\Участники" />

          </ALLOWEDVALUES>

        </FIELD>

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

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

        <?xml version="1.0" encoding="utf-8"?>

        <gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/globallists">

          <GLOBALLIST name="Дисциплина">

            <LISTITEM value="Архитектура" />

            <LISTITEM value="Требования" />

            <LISTITEM value="Разработка" />

            <LISTITEM value="Управление релизами" />

            <LISTITEM value="Управление проектом" />

            <LISTITEM value="Тестирование" />

          </GLOBALLIST>

        </gl:GLOBALLISTS>

 

После чего необходимо проделать операцию импорта этого файла следующей командой:

glimport /f «Путь к файлу»\<имя файла.xml>" /t "имя сервера"

 

Posted by dmandreev | 2 Comments

Программа Metro для раннего ознакомления с продуктами Microsoft

Как известно, Microsoft давно предоставляет доступ к бета версиям своих продуктов.. Но, к сожалению, всегда было достаточно трудно получить дополнительную информацию и руководства к этим ранним продуктам, чтобы предварительное знакомство привело к получению опыта и полноценных знаний о новых технологиях. Это легко объяснимо, ведь документация тоже должна быть создана, но даже на стадии бета тестирования эта информация часто бывает не полной. А опыт сообщества вообще появляется только после некоторого времени после выхода релиза. Отчасти, задачу раннего ознакомления решают такие программы как RDP (Rapid Deployment Program) илиTAP (Technical Adoption Program) но они требовали немало усилий организационного характера по номинации и менеджмент этих программ осуществляется централизовано из Редмонда.

Уже при создании SQL2005 в Microsoft была сделана попытка изменить такое положение дел, и это привело к созданию программы для разработчиков, которую участники знают как «Yukon Ascend». Вместе с созданием продукта подготавливались учебные материалы, причем не только силами Microsoft, но и лучшими внешними специалистами в области баз данных. Отчасти это было отступлением от традиций, но в Microsoft были уверены, что созданные материалы будут менее «корпоративными» и выхолощенными. Основной целью при этом была мантра «Разработчики учат Разработчиков». Пятидневный «партизанский» курс, по результатам которого ваша голова буквально переполнялась информацией. И это работало, люди хотели больше. После беты 2 были выпущены лабораторные работы, проводились сессии «спроси эксперта». В результате появилось большое сообщество специалистов, информированных о продукте даже до его выпуска.

Этот подход оказался настолько успешным, что был расширен на продукты Vista, Windows Server, Visual Studio и Office. Конечно, были некоторые ожидаемые проблемы, с которым мы уже столкнулись еще на "Youkon Ascend". Несколько сотен партнеров вовлеченных в такое взаимодействие уже требуют больших усилий от Microsoft. Для масштабирования и вовлечения большего числа участников была разработана новая программа «Touchdown», которая через онлайн предполагала самостоятельную работу участников, тем не менее, близкую по результативности, которую дала Ascend программа.

Это привело к созданию двух программ с одними и теми же целями, что конечно не внесло порядка в работу направленную с ранним ознакомлением. И в 2007 году Microsoft объединила две эти программы. Мы называем ее Metro Early Adopter Program (Метро - Программа Раннего Ознакомления). Metro представляет комбинацию всего лучшего что было применено и дало результаты в предыдущих программах и даже больше. В Июле 2008 года эта программа была расширена, и теперь охватывает не только производителей программного обеспечения (ISV) но и наших заказчиков и партнеров. Перечень участников теперь включает в себя корпоративных заказчиков, ведущие веб-сайты, ISV, веб-агенства и системных интеграторов. Активности по программе Metro ведутся в более чем 25 странах по всему миру.

  • Metro Enterprise – программа раннего ознакомления для клиентов которые делают ставку на новейшие технологии с целью получения конкурентных преимуществ
  • Metro предлагает структурированный подход ранней адаптации предоставляя участникам возможности:
    • Узнать о новейших технологиях Microsoft
    • Осуществить пилотное развертывание бета продуктов Microsoft
    • Получить доступ к поддержке бета продуктов Microsoft
    • Общаться с интернациональным сообществом разработчиков и архитекторов через форумы Metro
    • Поделиться опытом раннего использования с бизнес и технологическим сообществом

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

  • Подписание NDA
  • Согласие на участие в совместных маркетинговых мероприятиях и подготовке примера внедрения
  • Назначение выделенной команды для участия в программе
  • Согласие на участие в регулярных конференц-звонках, предоставлении статуса и отзывов

Перечень продуктов входящих в текущую программу Metro включает самые новейшие технологии.

Metro Products

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

Если ваша компания заинтересована в участии в программе Metro вы можете связаться с своим PAM, AM или сотрудниками Отдела Стратегических Технологий (DPE).

Posted by dmandreev | 0 Comments

Новая версия Openxml SDK

Совсем упустил из виду выход OpenXMK SDK CTP 2. Скачать его можно тут http://go.microsoft.com/fwlink/?LinkId=127912

Из самых важных нововведений следует отметить наличие полноценного DOM (Document Object Model) что делает генерацию файлов Word и Excel простой и быстрой задачей, и самое главное без дебрей COM.

Также следует отметить

  1. Утилиту для сравнения двух OpenXML файлов
  2. Браузер классов OpenXML который позволяет разобраться с схемой формата
  3. Рефлектор документов который может написать за вас код генерации

Последний компонент помогает быстро и эффективно создать код для генерации из документа. Т.е. Вы берете шаблон документа Word, выделяете те параграфы (или документ целиком) которые вам необходимы, а на выходе получаете код C# который этот документ в точности генерирует. Остается только параметризовать этот код, и генератор отчетов готов!

 

Posted by dmandreev | 1 Comments

Live Broadcast и MediaElement.MarkerReached

Многие наверное видели Silverlight Banking Demo и обратили внимание на то как приложение синхронизируется там с видео.

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

Самым эффектным моментом этой демонстрации является синхронизация, при которой дядечка в видео показывает рукой на элемент приложения и этот графический элемент на знак рукой реагирует.

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

Собственно обработчик этот MarkerReached и о нем можно почитать по ссылке. Как создавать такие видеофайлы с маркерами рассказано в этом видео http://silverlight.net/Learn/learnvideo.aspx?video=263

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

Тут то и возникает соблазн использовать этот механизм в каких нибудь живых (live) трансляциях.

Представим себе следующую ситуацию.

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

Еще раз отмечу, маркеры внутри потока, четко синхронизированы в live режиме с местом видео. Такое технологическое решение какими либо Out of band (OOB) средствами сделать достаточно трудно и это все равно будет подвержено рассинхронизации.

Надеюсь сценарий понятный. И возможно те кто читает этот пост скажут «Супер, пойду попробую». Не тут то было.

Expression Encoder которым мы можем вставить маркеры в статическое видео, не будет работать с Live потоком.

Но выход есть, который этот сценарий реализует на ура. Нужно всего лишь воспользоваться Windows Media Encoder 9.0 SDK. Можно написать приложение которое будет программно конфигурировать encoder, брать источник видео и звука, и подмешивать туда маркеры.

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

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using WMEncoderLib;

using WMPREVIEWLib;

namespace LiveBroadcastSample

{

public partial class MainForm : Form

{

WMEncoderApp mainApp = null;

IWMEncoder enc = null;

IWMEncSourceGroupCollection srcGrpCol = null;

IWMEncSourceGroup grp = null;

IWMEncSource srcAudio = null;

IWMEncVideoSource2 srcVideo = null;

IWMEncSource srcScript = null;

/*

IWMEncProfile pro=null;

IWMEncProfileCollection profColl=null;

*/

IWMEncBroadcast brdcst;

IWMEncDataViewCollection DVColl_Preview;

int lPreviewStream = -1;

WMEncDataView Preview;

IWMEncDataViewCollection DVColl_Postview;

int lPostviewStream;

WMEncDataView Postview;

public MainForm()

{

InitializeComponent();

mainApp = new WMEncoderApp();

enc = mainApp.Encoder;

WMEncoder encoder = (WMEncoder)enc;

encoder.OnAcquireCredentials += new _IWMEncoderEvents_OnAcquireCredentialsEventHandler(encoder_OnAcquireCredentials);

mainApp.Visible = false;

srcGrpCol = enc.SourceGroupCollection;

grp=srcGrpCol.Add("SG_1");

srcAudio = grp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);

srcVideo = (IWMEncVideoSource2)grp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);

srcScript = grp.AddSource(WMENC_SOURCE_TYPE.WMENC_SCRIPT);

srcAudio.SetInput("Microphone (2- Microsoft LifeCa", "Device", "");

srcVideo.SetInput("Microsoft LifeCam VX-3000", "Device", "");

srcScript.SetInput("", "UserScript", "");

DVColl_Postview = srcVideo.PostviewCollection;

Postview = new WMEncDataView();

lPostviewStream = DVColl_Postview.Add(Postview);

grp.set_Profile("C:\\Program Files\\Windows Media Components\\Encoder\\Profiles\\scriptstream.prx");

HttpBroadcast();

//PushDistrib(); //если передаем сигнал дальше Windows media services 2008

CreatePreview();

}

IWMEncPushDistribution PushDist=null;

//если передаем сигнал дальше на Windows media services 2008

private void PushDistrib()

{

IWMEncPushDistribution PushDist = (IWMEncPushDistribution)enc.Broadcast;

PushDist.ServerName = "192.168.12.45";

PushDist.PublishingPoint = "pubpointtest";

PushDist.Template = "pubpoint";

PushDist.AutoRemovePublishingPoint = true;

enc.PrepareToEncode(true);

}

private void CreatePreview()

{

DVColl_Preview = srcVideo.PreviewCollection;

Preview = new WMEncDataView();

IWMEncPrePreview pPrev = (IWMEncPrePreview)srcVideo.GetSourcePlugin();

pPrev.SetCaptureParent((int)panelPreview.Handle);

lPreviewStream = DVColl_Preview.Add(Preview);

}

private void HttpBroadcast()

{

brdcst = enc.Broadcast;

brdcst.set_PortNumber(WMENC_BROADCAST_PROTOCOL.WMENC_PROTOCOL_HTTP, 8080);

enc.PrepareToEncode(true);

}

//callback авторизация с Windows media services 2008 в случае трансляции на сервер

void encoder_OnAcquireCredentials(string bstrRealm,

string bstrSite, ref object pvarUser,

ref object pvarPassword, ref object plFlags)

{

pvarUser = "Administrator";

pvarPassword = "Pass@word1";

}

//старт кодирования

private void StartButtonClick(object sender, EventArgs e)

{

enc.Start();

/*

IWMEncVideoSource2 s=(IWMencVideoSource2) srcVideo.GetSourcePlugin();

bugbug

Postview.SetViewProperties(lPostviewStream, (int)panel1.Handle);

Postview.StartView(lPostviewStream);

*/

}

private void StopEncodingClick(object sender, EventArgs e)

{

enc.Stop();

}

private void SendMessageToStreamButtonClick(object sender, EventArgs e)

{

enc.SendScript(0, txtText.Text, txtMsg.Text);

}

}

}

Posted by dmandreev | 1 Comments
Filed under:

Новый информационный ресурс Techdays

Уважаемые коллеги, хочу поделиться с вами радостной новостью – мы решили вывести традиционные семинары для технических специалистов - Дни Разработчика (DevDays) и Семинары TechNet на новый уровень.

 

  • Во-первых – создать единый ресурс, где можно получить информацию о предстоящих технических мероприятиях как и для разработчиков, так и для ИТ-специалистов, чтобы не пропустить ни один семинар серии. Многие ходят и на Дни Разработчика и на Семинары TechNet – теперь вся информация о них будет в одном источнике – подпишитесь на RSS.
  • Во-вторых – публиковать не только материалы и записи выступлений, но и очень большое количество дополнительных технических веб-трансляций (более 120!) на русском языке, позволяющих изучить гораздо более широкий спектр тем и технологий, чем мы можем рассказать за один день, более того, новые веб-трансляции будут там появляться постоянно, а не только в рамках весенней и осенней серии семинаров – подпишитесь на RSS. Эти веб-трансляции создаются как и нашими сотрудниками, так и независимыми экспертами, что делает содержание еще более разносторонним и интересным.
  • В-третьих - подготовиться к прослушиванию докладов семинаров с помощью обзорных веб-трансляций – это позволит нам делать выступления еще более детальными и специализированными.
  • В-четвертых – прослушивая доклады, вы можете отвечать на вопросы по ним, выигрывать призы и получать право зарегистрироваться на семинар в вашем городе.

 

Все это вместе называется TechDays.ru – встречаем, смотрим более 120 технических веб-трансляций, регистрируемся на семинары в ваших городах и выигрываем призы!

 

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

 

Posted by dmandreev | 1 Comments

Дерганье мыши и ззадддержжки клавиатуры в VirtualPC2007SP1

Уже давно пользуюсь VirtualPC и c тех пор как стал работать на Vista/Core2Duo, столкнулся с неприятной особенностью – дерганьем мыши и клавиатурными задержками случайного характера. Т.е. печатаешь, а буквы появляются на экране с задержкой в пол секунды, ведешь мышью, а она замирает, потом прыгает.

Не то чтобы совсем невозможно было пользоваться, как то мирился, но было очень некомфортно. Сегодня мне присоветовали сделать процессу Virtual PC.exe CPU Affinity 0, с помощью Task Manager.

Все эти дурацкие симптомы как рукой сняло. Может быть есть какие либо другие способы устранить эту проблему, тогда дайте знать.

 

[mouse jerking in virtualpc 2007]

Posted by dmandreev | 2 Comments

Пошаговые руководства

Вот здесь опубликованы следующие руководства (step-by-step guides):

  • Руководство по настройке службы сертификации Active Directory в ОС Windows Server 2008
  • Руководство по настройке службы управления правами Active Directory в ОС Windows Server
  • Руководство по настройке двухузлового отказоустойчивого кластера для файлового сервера в среде Windows Server 2008
  • Руководство по настройке двухузлового отказоустойчивого кластера для сервера печати в среде Windows Server 2008
  • Руководство по созданию и развертыванию шаблонов службы управления правами Active Directory
  • Руководство по развертыванию службы управления правами Active Directory в экстрасети
  • Руководство по развертыванию службы управления правами Active Directory с сервером Microsoft Office SharePoint Server 2007
  • Руководство по развертыванию политик брандмауэра операционной системы Windows в режиме повышенной безопасности
  • Руководство по организации удаленного доступа по протоколу SSTP
  • Руководство по использованию службы доменных имен в небольших сетях
  • Руководство по функции установки Server Core операционной системы Windows Server 2008
  • Руководство по использованию сценариев диспетчера сервера
  • Руководство по установке программного обеспечения сервера шлюза служб терминалов операционной системы Windows Server 2008
  • Удаленные приложения RemoteApp служб терминалов Windows Server 2008: Руководство по настройке
  • Балансировка нагрузки посредника сеансов служб терминалов Windows Server 2008: Руководство по настройке
  • Руководство по использованию федерации удостоверений со службой управления правами Active Directory
  • Руководство по использованию служб развертывания операционной системы Windows в среде Windows Server 2008
  • Руководство по созданию основы сети
  • Руководство по лицензированию служб терминалов операционной системы Windows Server 2008

Надеюсь, это будет полезно многим.

Ссылка: Пошаговые руководства по Windows Server 2008 на русском языке

Posted by dmandreev | 0 Comments

Вы все еще думаете что коллективная разработка "обеспечивает"?

 

Q: How long does it take a crack a SSH user account using these keys?
A: This depends on the speed of the network and the configuration of the SSH server. It should be possible to try all 32,767 keys of both DSA-1024 and RSA-2048 within a couple hours, but be careful of anti-brute-force scripts on the target server.

 

http://metasploit.com/users/hdm/tools/debian-openssl/

Posted by dmandreev | 0 Comments

Протоколы

Наверное многие видели новость, и ищут по какому адресу в MSDN лежит документация по протоколам J

 

Windows Communication Protocols (MCPP)

http://msdn2.microsoft.com/en-us/library/cc216513.aspx

 

Windows Server Protocols (WSPP)

http://msdn2.microsoft.com/en-us/library/cc197979.aspx

 

Остальное (тоже очень много) постепенно появится в ближайшие несколько месяцев.

Проверять можно тут http://msdn2.microsoft.com/en-us/library/cc203350.aspx

 

Posted by dmandreev | 0 Comments

Бинарные форматы Office

Собственно инцициатива:

http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx

http://www.microsoft.com/interop/osp/default.mspx

 

Документация по бинарным форматам office:

  • Windows Compound Binary File Format Specification PDF | XPS
  • Windows Metafile Format (.wmf) Specification PDF | XPS
  • Ink Serialized Format (ISF) Specification PDF | XPS

 

Пример транслятора .doc->.docx

http://b2xtranslator.sourceforge.net/

Posted by dmandreev | 0 Comments

Карта Office System 2007 для разработчика

Недавно обновилось (v2) интерактивное приложение-карта по разработке для Office System 2007.

Его можно скачать по вот этому адресу: Microsoft Office Interactive Developer Map (Office Developer Center)

 

Posted by dmandreev | 0 Comments

Материалы к веб-касту «Введение в разработку для Sharepoint»

В своем недавнем веб-касте (http://www.microsoft.com/rus/events/detail.mspx?eventid=1032361893) , я обещал опубликовать в этом блоге материалы и ссылки.

Хотелось бы выполнить это обещание, и предоставить вашему вниманию наиподробнейший документ по материалам связанным с Sharepoint.

http://dmandreev.members.winisp.net/SharePointResourceGuide_January2008.pdf

Posted by dmandreev | 0 Comments

Контроль версий файлов в TFS

 

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

Находится эта утилита по умолчанию в C:\Program Files\Microsoft Visual Studio 8\Common7\IDE  , имя файла  tf.exe

 

 

Примеры:

  • Создание клиентской рабочей области, set mappings
    • tf workspace /template:WorkspaceName;username WS1 /s:http://servername:8080
  • Конфигурация  diff средства
    tf diff /configure
  • Получение файлов
  • tf get
  • Открытие файла на редактирование
    tf edit foo.cs
  • Check in
    tf checkin
  • Бэкап работы в шелв
    tf shelve /i MyWork
  • Бэкап в шелв с возвратом к исходному состоянию
    tf shelve /i MyWork /move
  • Удаленный код ревью шелва
    tf unshelve CoolStuff;buckh

 

Вся документация по tf.exe находится на MSDN http://msdn2.microsoft.com/en-us/library/cc31bk2e(VS.80).aspx

 

 

Некоторые моменты о конфигурации diff

1)      Она доступна не только из командной строки но и через интерфейс VS via tools -> options -> source control -> visual studio team foundation server

2)      Параметры передаются уже заключенные в кавычки

 

Вот настройки для наиболее распространенных систем:

 

Diff тулы:

Продукт

Команда

Аргументы

TFS default

diffmerge.exe

%1 %2 %6 %7 %5 /ignorespace

WinDiff

windiff.exe

%1 %2

DiffDoc (for Word files)

DiffDoc.exe

/M%1 /S%2

WinMerge

winmerge.exe

/ub /dl %6 /dr %7 %1 %2

Beyond Compare

bc2.exe

%1 %2 /title1=%6 /title2=%7

KDiff3

kdiff3.exe

%1 --fname %6 %2 --fname %7

Araxis

compare.exe

/wait /2 /title1:%6 /title2:%7 %1 %2

Compare It!

Wincmp3.exe

%1 /=%6 %2 /=%7

SourceGear DiffMerge

DiffMerge.exe

/title1=%6 /title2=%7 %1 %2

 

Merge тулы:

Продукт

Команда

Аргументы

TFS default

diffmerge.exe

/merge %1 %2 %3 %4 %6 %7

KDiff3

kdiff3.exe

%3 --fname %8 %2 --fname %7 %1 --fname %6 -o %4

Visual SourceSafe

ssexp.exe

/merge %1 %2 %3 %4 %6 %7

Araxis

compare.exe

/wait /swap /a3 /3 /title1:%6 /title2:%7 /title3:%8 %1 %2 %3 %4

Beyond Compare (2-way merge)

bc2.exe

%1 %2 /savetarget=%4 /title1=%6 /title2=%7

WinMerge (2-way merge)

winmerge.exe

/ub /dl %6 /dr %7 %1 %2 %4

Guiffy

guiffy.exe

-s -h1%6 -h2%7 -hm%9 %1 %2 %3 %4

Ellie Computing

guimerge.exe

--mode=merge3 %3 %1 %2 --to=%4 --title0=%8 --title1=%6 --title2=%7 --to-title=%9

SourceGear DiffMerge

DiffMerge.exe

/title1=%6 /title2=%7 /title3=%8 /result=%4 %1 %2 %3

     

 

 

Если средств командной строки будет не хватать, то можно воспользоваться WebServices API TFS

 

TeamFoundationServer tfs = new TeamFoundationServer("http://tfsserver:8080");

 

 

VersionControlServer versionControl = (VersionControlServer) tfs.GetService(typeof(VersionControlServer));

 

 

//Получение информации о workspace (локального маппинга).

WorkspaceInfo wsInfo =
Workstation.Current.GetLocalWorkspaceInfo(Environment.CurrentDirectory);

// Stop if we couldn't figure out the workspace.

if (wsInfo == null)

{

    Console.Error.WriteLine("Unable to determine the workspace.");

    Environment.Exit(1);

}

 

//Получение референса на сервер

TeamFoundationServer tfs = new TeamFoundationServer(wsInfo.ServerUri.AbsoluteUri);

 

// Получение референса на воркспейс

Workspace workspace = wsInfo.GetWorkspace(tfs);

 

// Получение файлов в воркспейс.

workspace.Get();

 

 

Дополнительные ссылки на примеры:

 

*      Простые примеры
http://blogs.msdn.com/buckh/archive/2006/03/15/552288.aspx

*      Как показать метки
http://blogs.msdn.com/buckh/archive/2005/10/25/484854.aspx

*      Как показать размер и даты файлов
http://blogs.msdn.com/buckh/archive/2005/10/26/485458.aspx

*      Пример checkin политики
http://blogs.msdn.com/jmanning/archive/2006/01/21/515858.aspx

*      Показ текущих изменений с конкретного времени
http://blogs.msdn.com/jmanning/archive/2005/12/01/499033.aspx

*      Сканирование истории в чейнджсетах с измененными checkin политиками http://blogs.msdn.com/jmanning/archive/2005/11/04/489193.aspx

 

Posted by dmandreev | 0 Comments

Excel на стероидах

 

Наверное всем известно что у нас есть два продукта – MOSS 2007 и Windows Compute Cluster Server.

В состав MOSS входит технология Excel Services, это фактически «вычислительный движок» excel, который позволяет обрабатывать электронные таблицы на сервере.

Но мало кто знает что есть решение которое кластеризует Excel. Как то так сложилось что это решение называют «Параллельный Excel» (“Parallel Excel”).

 

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

 

Для того чтобы все это работало, требуется совсем не много, а именно:

·         Кластер на базе Windows Compute Cluster Server Edition

·         На каждый из узлов кластера установлен MOSS с включенным Excel Services

·         На управляющий узел установлены специальные дополнения которые интегрируются с клиентом

·         На клиентский компьютер так же установлен небольшой плагин к Excel.

 

  • вычисления должны представлять собой множество независимых задач которые могут выполнятся параллельно, например:
    • Таблица с множеством независимых формульных вычислений
    • Таблица, одни и те же вычисления в которой множество раз происходят с различными данными (Симуляция Монте-Карло, параметрические вычисления)
    • Пакетные задания которые обрабатывают множество файлов Excel последовательно
  • Ограничения
    • Плагины третьих сторон и дополнения разработанные своими силами могут потребовать дополнительной доработки серверного окружения
    • Макросы VBA не работоспособны на Excel Services
  • Программное обеспечение
    • Office Excel 2007
    • Office SharePoint Server 2007 с работающими Excel Services
    • Windows Compute Cluster Server 2003

 Slide13

Сценарий работы этого решения таков:

1.       Конечный пользователь имеет задачу запрограммированную в Excel и большой набор данных в этой же таблице.

2.       С помощью плагина он обозначает границы вычислений и запускает эти вычисления.

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

4.       И затем результаты возвращаются клиенту, причем сразу в открытую на рабочем компьютере таблицу

 

 

Очевидно, что при таком сценарии можно решать множество задач из различных предметных областей, например

          Симуляция

          Алгоритмический трейдинг

          Портфельное моделирование

          Анализ рисков

          Бизнес моделирование

          Планирование бюджетов

          Статистический анализ

          Обработка данных

 

И при этом скорость вычисления результатов будет фактически зависеть только от количества вычислительных узлов. Представте себе трейдера который получает анализ портфеля акций не за 8 часов работы компьютера а за 15 минут! А ведь такие результаты может выдать 32 узловой кластер!

Никакой десктоп никогда не выдаст такой скорости в силу не только процессорной мощности но и ограниченности ресурсов памяти.

 Slide6

Подробную статью и пример можно скачать с нашего сайта по адресам

·         http://msdn2.microsoft.com/en-us/library/bb693433.aspx

·         http://www.microsoft.com/downloads/details.aspx?familyid=513d97da-34b7-4346-a9e5-b8998170aade&displaylang=en

 

Posted by dmandreev | 0 Comments
More Posts Next page »
 
Page view tracker