среда, 25 ноября 2009 г.

Тестовые данные в SketchFlow

Сегодня поговорим о том, как в SketchFlow проекте показать тестовые данные.
Пусть необходим список сотрудников, при клике на конкретном сотруднике открывается более подробная информация.

понедельник, 23 ноября 2009 г.

Создание окна из потока отличного от потока диспетчера приложения

Возникла задача, в процессе вызова метода из workflow показать форму для ввода дополнительных данных (для тех, кто не в курсе - workflow выполняются в отдельном потоке, и соответственно если метод вызывается из workflow, он тоже выполняется в этом потоке). Приложение написано на WPF. Привычная последовательность действий:
    public void StartReadFromScala(Guid idWorkflow)
    {
      WndReadFromScala form = new WndReadFromScala();
      form.Show();
    }


* This source code was highlighted with Source Code Highlighter.

Выполнялось, но форма не появлялась :(

Пришлось пойти на следующее ухищрение:
    public void StartReadFromScala(Guid idWorkflow)
    {
      // Создаем форму для ввода данных, но создаем ее в главном потоке
      Application.Current.Dispatcher.Invoke(new NoParamHandler(CreateWndReadFromScala), new object[] { });
    }

    private void CreateWndReadFromScala()
    {
      WndReadFromScala form = new WndReadFromScala();
      form.Show();
    }


* This source code was highlighted with Source Code Highlighter.

А вот теперь все работает ;)

вторник, 3 ноября 2009 г.

Олимпиада по многократному решению делемы заключенного

Было принято решение провести олимпиаду по решению многократной дилемы заключенного.
К участию приглашаются все желающие. Дата проведения олимпиады будет объявлена дополнительно. Ориентировочно олимпиада будет проходить 17 декабря 2009 года в 16:00.

Для участия необходимо предоставить dll разработанную на платформе .Net и содержащую класс потомок интерфейса:
namespace Competition
{
  public interface ICompetition
  {
    /// <summary>
    /// Передает в библиотеку количество участников
    /// </summary>
    /// <param name="p_count">количество участников</param>
    void SetCount(int p_count);
    /// <summary>
    /// Делает один ход
    /// </summary>
    /// <param name="p_prevResult">Массив предыдущих ответов соответствующих участников</param>
    /// <returns>Массив ответов на текущем шаге</returns>
    bool[] MakeStep(bool[] p_prevResult);
  }
}


* This source code was highlighted with Source Code Highlighter.

Интерфейс добавляется в проект из сборки которую можно скачать здесь.

В процессе проведения соревнования запрещается:
1. Попытка загрузки, рефакторинга, изменения или удаления сборок оппонентов.
2. Запрещается влиять на работу сервера иными средствами кроме возвращения массива из метода MakeStep.
3. Осуществлять сговор участников соревнования.
4. Модифицировать ICompetition.dll или реализовывать интерфейс ICompetition в своих сборках.


Порядок проведения соревнования:
1. Все участники соревнования предоставляют dll удовлетворяющие описанным выше требованиям и запретам.
2. Сервер олимпиады подгружает все зарегистрированные сборки с загрузкой из каждой ОДНОГО класса потомка интерфейса ICompetition.
3. От каждого класса создается объект посредством вызова конструктора по умолчанию.
4. Для каждого созданного объекта вызывается метод SetCount в который передается количество участников соревнований.
5а. В первом туре в метод MakeStep передается null. Метод должен вернуть в виде массива bool-евых значений свое отношение к сборкам противников: true - сотрудничать, false - предавать. Количество значений в массиве должно соответствовать количеству участников полученных классом через метод SetCount.
5б. Во втором и последующих турах (проходит от 30 до 50 туров), в метод MakeStep передается отношение к данному участнику всех оппонентов. Количество значений в массиве соответствует количеству участников полученных классом через метод SetCount. На основе полученных данных необходимо вернуть массив отношения к сборкам противников.
6. Через 5 секунд после вызова соответствующих методов, все методы не закончившие обработку и не вернувшие значение снимаются с соревнований.
7. Если количество туров превысило 30 и сгенерированное случайное число меньше 1/20 то соревнование заканчивается, в противном случае переход в пункт 5б.

Если два участника поставили взаимное true, то каждый из них получает по 7 очков рейтинга. Если два участника поставили взаимное false, то каждый из них получает по 3 очка рейтинга. Если один из участников поставил true в ответ на false другого участника, то первый не получает очки рейтинга, а второй получает 10 очков рейтинга.

Пять программ набравших наибольшее количество баллов рейтинга получают по 5,4,3,2 и 1 очку в зависимости от занятого места.
Соревнования повторяются 3-5 раз. Программа набравшая суммарно максимальное количество очков признается победителем олимпиады.

В качестве приза будет нечто полезное программистам ;)

Удачной олимпиады.

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