суббота, 28 марта 2009 г.

Imagine Cup 2009. 1/4 финала.















Сегодня я побывал на 1/4 финала конкурса программных проектов Imagine Cup и мне хочется поделиться с вами своими ощущениями и впечатлениями. Он проходил в Московском офисе Microsoft на Крылатских Холмах.

Вообще суббота - нерабочий день в комплексе, так что бесплатная маршрутка к нему в этот день не ходит, и нам пришлось добираться общественным транспортом.

Приехали мы около 10 часов, время начала репетиций выступлений, и у нас было время осмотреться, пообщаться с выступающими, принять участие в импровизированном завтраке и сделать пару фоток офиса. Также мне удалось минут 10 поиграть в Xbox, помеченной мною ещё во время прошлого визита. Приставка оставила очень приятные впечатления, несмотря на то, что я практически не играю в игры, а приставки в руках не держал уже много лет.

Но стрелка часов приближалась к 12 - времени начала выступлений и мы направились в зал. В программе выступлений было 5 команд: из МФТИ, МИФИ, МГУ, МИРЭА и МГУПИ. По результатам жеребьёвки первым выпало выступать команде из МИФИ с проектом Lullius. Идея проекта заключается в упрощении обмена информацией с помощью матричных кодов, снимать которые можно с помощью мобильных устройств. Сама идея мне понравилась, но презентация, манера выступления и демонстрация меня разочаровали...

Следущей командой была команда из МИРЭА. Хотя слово команда не очень применима - это был один человек (по правилам соревнований могут принимать участие команды от 1 до 4 человек + наставник). Была поднята проблема экологической устойчивости. Посмотреть на проект можно здесь. Опять же очень актуальная тема, но выступление... во-первых, слишком много терминологии из экологии, автор не рассказывал, а большей частью читал свою презентацию и слишком дерзко отвечал на вопросы жюри. Надо сказать, что жюри состояло из Дмитрия Сошникова, координатора академических программ Microsoft, преподавателей МГТУ им. Баумана, МАИ, Высшей Школы Экономики и журналистки одной известной газеты.
Закрывали первую половину выступлений студенты из МГУ. Они предложили в игровой форме бороться с глобальными проблемами: от загрязнения окружающей среды до зависимости от World Of Warcraft. Была показана демонстрация игры: эдакая стрелялка, но надо заметить, что вся игра, в том числе и движок, обеспечивающий очень достойный уровень графики, был написан ими. В целом выступление мне очень понравилось. Разве что они не смогли ответить на вопрос, как они будут бороться с зависимостью от их игры, которая, кстати говоря болжна распространяться бесплатно.

Потом нас ждал 30 минутный обеденный перерыв, после которого свой проект предавляла команда МГУПИ, в рядах которой была единственная девушка на сегодняшних соревнованиях. Они предлагали бороться с пробками с помощью построения модели в зависимости от времени суток и регулироавния светофоров. У них, на мой взгляд, была самая лучшая презентация за всё время конкурса, хотя во время вопросов к команде выяснилось, что их модель не учитывает достаточное большое количество случайных факторов, например день недели, время года и вся модель строится их расчёта количества машин на дорогах, что в пересчёте на Москву требует огромных вычислительных ресурсов.

Завершали день студенты из МФТИ с проектом myRange, который помогает находить интересных людей на расстоянии действия Bluetooth. Команда держалась очень достойно и в итоге заняла первое место, 2-ое место у команды МИФИ, ну а 3-е у МГУПИ.
Через несколько недель нас ждёт финал, на который я надеюсь попасть. Говорят, что основной фишкой будет команда девушек из Челябинска. Насколько это является правдой мы скоро узнаем.

среда, 11 марта 2009 г.

Реальное приложение на F#

В своём прошлом посте я вскользь упомянул новый функциональный язык программирования от Microsoft - F#. Он вызвал достаточно сильный интерес с моей стороны и сегодня попробую показать вам что-нибудь относительно полезное, написанное на нём. Но надо заметить, что я не знаю ни F#, ни C#, да и чего там скрывать... вообще не знаком с платформой .Net. Этот пример я взял с презентации этого языка на PDC2008 и . Несколько примеров также можно найти тут и тут. Для реализации нам понабятся Visual Studio 2008 и Microsoft F# CTP 1.9.6.2. Чтобы интегрировать F# в VS придётся проделать несложные манипуляции. В некоторых местах я буду приводить для сравнения участки кода, написанного на C#.

Ну чтож... начнём) Наша задача: получить данные с сайта и обработать их (например отобразим первый и последний столбец).

Первым делом подключим необходимые библиотеки:

open System
open System.Windows.Forms
open System.Net
open System.IO

Далее нам нужна ссылка на файл данных. Поэтому перейдём на сайт, спустимся вниз и найдём кнопку Download To Spreadsheet. Кликнем по ней правой клавишей и скопируем ссылку.

let url = "http://ichart.finance.yahoo.com/table.csv?s=MSFT&d=2&e=9&f=2009&g=d&a=2&b=13&c=1986&ignore=.csv"

- это следущая строчка, после поключения библиотек, где let фактически создаёт псевдоним выражения. Кстати тип url задавать не нужно, F# сам определяет его. В С# это будет выглять так: string url = "ссылка';

Следующим этапом будет создание веб-запроса, потока обмена данными и чтением их в строку:

let req = WebRequest.Create(url)
let resp = req.GetResponse()
let stream = resp.GetResponseStream()
let reader = new StreamReader(stream)
let csv = reader.ReadToEnd()


Аналогичные действия на С#:

WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
csv = reader.ReadToEnd();

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

let prices =
csv.Split([|'\n'|])
|> Seq.skip 1
|> Seq.map (fun line -> line.Split([|','|]))
|> Seq.filter (fun values -> values |> Seq.length = 7)
|> Seq.map (fun values ->
System.DateTime.Parse(values.[0]),
float values.[6])

Здесь мы сталкиваемся с ещё 2-мя очень важными элементами F# - это fun (как можно догаться из названия задаёт функцию) и символ |> , который берёт входные данные слева от себя, производит действия и возвращает полученный результат, который может использоватться в следующей строчке с |>.

Мне удалось сделать это на C# в таком виде:

csv.Split('\n');
string [] line = str.Split('\n');
string[] elements;
for (int i = 1; i <= line.Length; i++)
{ elements = line[i].Split(','); ichTextBox1.Text = richTextBox1.Text + i + " " + elements[0] + " " + elements[5]+"\n";
}
И если мы, выделив всё написанное выше, запустим на выполнение и в F#Interactive введём prices;; , то всё будет неплохо работать, но вывод данных неочень приятен и понятен, поэтому добавим форму и таблицу:
let grid (prices:seq)=
let form = new Form(Width = 400, Height = 500, Visible = true, Text = "Prices")
let grid = new DataGridView(Width = 282, Height = 374, Visible = true)
form.Controls.Add(grid)
grid.DataSource <- prices |> Seq.to_array

Вот и всё. У меня получилась вот такая штука:



















На сегодня на этом и закончим. Если у вас есть идеи как изменить код к лучшему, то с удовольствием вас выслушаю.

суббота, 7 марта 2009 г.

Microsoft, Microsoft и ещё раз Microsoft

Сегодня я хочу рассказать вам про Microsoft, а именно про моё посещения тренинга для студентов-партнёров в этой корпорации. Он проходил в офисе Microsoft в Москве на Крылатских Холмах 6 марта.
Программа была очень насыщенной и включала 5 различных технологий, которые редмондская компания пытается привнести в наш с вами мир. Трениг проходил в ОС Windows 7, которая произвела на меня очень хорошее впечтление.
Всё началось с F# - нового функционального языка программирования, который должен войти в состав Visual Studio 2010. Что же такое функциональные языки программирования? Это языки, основным конструктивным элементом является математическое понятие функции. Существует различия в понимании функции в математике и функции в программировании. Функция в математике не может изменить вызывающее её окружение и запомнить результаты своей работы, а только предоставляет результат вычисления функции. Также тексты программ на функциональных языках программирования описывают «как решить задачу», но не предписывают последовательность действий для решения. Зачем Microsoft ставить его "на одну доску" с тем же C#? Я процитирую блог Дмитрия Сошникова, чтобы ответить на это вопрос. Одна из основных причин – функциональное программирование позволяет проще писать многопоточные приложения для многоядерных процессоров. Почему это так – мы рассмотрим в следующем уроке, где будем говорить о том, что же такое функциональное программирование. Кроме того, функциональные программы не допускают или минимизируют побочные эффекты, что увеличивает надежность программ и упрощает отладку. "В целом можно сказать, что функциональное программирование позволяет нам писать в несколько раз меньше кода, но при этом заставляет больше думать. Если Вы любите работать головой, а не пальцами – обратите внимание на F# и на функциональное программирование. А я постараюсь вам помочь сделать это безболезненно, на русском языке." Но не попробуешь - не поймёшь, поэтому нам предложили решить пару достаточно простых задачек на F#, которым я скорее всего посвящу свой следующий пост (для этого уже поставил Visual Studio 2008, распространяемую бесплатно среди аспирантов и студентов для некоммерческого использования).
Потом перед нами выступал Дмитрий Мартынов с докладом о Windows Azure. Он объяснял, как это всё устроено, на чём можно писать приложения под эту платформу, как происходит идентификация пользователя и как это выгодно - хранить все данные out. Сейчас Windows Azure находится в стадии beta-тестирования и потому доступ к ней может получить практически любой желающий и совершенно бесплатно. Если я ничего этим не нарушу, то попытаюсь подробно рассказать что да как, но в другой раз, сегодня же моя задача ввести вас в курс самых акуальных и передовых технологий Microsoft.
Следующим этапом тренинга стал
Silverlight 2, работать с которым учил нас Михаил Черномордиков, который является одним из ведущих небезизвестного Podcast9. Примеры были очень хороши, но времени как всегда было мало, а хотелось бы узнать значительно больше (те кто смотрел инаугурацию Барака Обама знайте - именно технология Silverlight дала вам эту возможность). Если вам хочется познакомиться с ней поближе, то вот вам ссылка на русскоязычное сообщество.
После почти 4 часов непрерывного впитывания знаний нас ждал обед, талоны на который нам было любезно выданы. Надо сказать, что атмосфера царящая в Microsoft просто непередаема словами, это надо видеть и самому почувствовать на себе. Обеденный час подошёл к концу и мы опять отправились в тренниг класс, чтобы погрузиться в новые технологии.
А там нас ждал
Гайдар Магдануров, очень позитивный человк, который нёс в наши головы доброе и вечтное о ASP.NET MVC. Это фреймворк, работающий по принципу Model-view-controller - архитектуре программного обеспечения, когда приложения делится на 3 отдельных компонента: модель данных, т пользовательский интерфейс и управляющая логика. Мы на примере смогли убедиться в эффективности такого подхода, написав под чутким руководством простенькое приложение, тащащее информацию из базы данных.
Заключительным этапом был SQL Server Data Services. Нам попытались объяснить что да как, но мозг к тому времени уже плохо цеплялся за информацию да и попробовать самим что-либо сделать нам не дали.
На этом мой день в Microsoft закончился, но этим точно не закончатся мои посты о технологиях этой компании и в ближайщее время напишу что-нибудь про F#.

Выражаю огромную благодарность Дмитрию Сошникову за возможность посмотреть на всё изнутри и за отличную организацию тренинга.