<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://mit.spbau.ru/sewiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zalim</id>
		<title>SEWiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://mit.spbau.ru/sewiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zalim"/>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Zalim"/>
		<updated>2026-06-18T22:25:29Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9E%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B8_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=2111</id>
		<title>Обобщенное и генеративное программирование</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9E%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B8_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=2111"/>
				<updated>2012-12-28T19:23:35Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Презентации, использованные на лекциях */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Власьев Михаил Игоревич &amp;lt;br&amp;gt;&lt;br /&gt;
mailto:michael.vlassiev@jetbrains.com&lt;br /&gt;
&lt;br /&gt;
== Презентации, использованные на лекциях ==&lt;br /&gt;
[[Медиа:GenProg_1.pdf | Вводная лекция]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Медиа:Introduction_to_MPS.pdf | Введение в МПС]] ([https://docs.google.com/open?id=0B3pvyfja13p5S29iWVdYd1NZcTQ  проект с примером]) &amp;lt;br&amp;gt;&lt;br /&gt;
[[Медиа:GenProg_2.pdf | Лекции]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://dl.dropbox.com/u/9957315/jetbrains.mps.demo.lazytype.zip Обновленный проект с примером]&lt;br /&gt;
&lt;br /&gt;
== Задания для получения зачета (на выбор) ==&lt;br /&gt;
&lt;br /&gt;
1. Калькулятор. &amp;lt;br&amp;gt;&lt;br /&gt;
Придумать и реализовать язык на котором можно было бы описывать требования к калькулятору (набор действий, расположенных на кнопках). По описанию калькулятора должна генерироваться программа на Java, реализующая этот калькулятор.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Конечный автомат. &amp;lt;br&amp;gt;&lt;br /&gt;
Язык описания и реализация на MPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Трассировка. &amp;lt;br&amp;gt;&lt;br /&gt;
Придумать и реализовать аспект для baseLanguage языка в MPS, управляющий трассировкой выполнения (logging). Небоходимо предусмотреть возможность включать трассировку вызовов методов, обращений к полям.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
Generative Programming: Methods, Tools, and Applications &amp;lt;br&amp;gt;&lt;br /&gt;
Krysztof Czarnecki, Ulrich Eisenecker &amp;lt;br&amp;gt;&lt;br /&gt;
Addison-Wesley Professional; 1 edition (June 16, 2000) &amp;lt;br&amp;gt;&lt;br /&gt;
Перевод: Чернецки К., Айзенекер У. Порождающее программирование: методы, инструменты, применение / Пер. с англ. СПб: Питер, 2005.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Domain-Specific Languages &amp;lt;br&amp;gt;&lt;br /&gt;
Martin Fowler &amp;lt;br&amp;gt;&lt;br /&gt;
Addison-Wesley; 2011 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
JetBrains MPS: http://www.jetbrains.com/mps &amp;lt;br&amp;gt;&lt;br /&gt;
Загрузка: http://www.jetbrains.com/mps/download/index.html &amp;lt;br&amp;gt;&lt;br /&gt;
Руководство: http://confluence.jetbrains.net/display/MPSD25/MPS+User's+Guide &amp;lt;br&amp;gt;&lt;br /&gt;
Отчеты об ошибках писать сюда: http://youtrack.jetbrains.com/issues/MPS &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=WhereIsMyMoney&amp;diff=1992</id>
		<title>WhereIsMyMoney</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=WhereIsMyMoney&amp;diff=1992"/>
				<updated>2012-11-15T21:21:02Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Where is My Builds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Состав команды (а. 432) ==&lt;br /&gt;
&lt;br /&gt;
# Залим Башоров&lt;br /&gt;
# Фофанова Мария&lt;br /&gt;
# Коровин Алексей&lt;br /&gt;
# Опейкин Александр&lt;br /&gt;
# Кринкин Михаил&lt;br /&gt;
&lt;br /&gt;
== Репозиторий ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/Temp1ar/WhereIsMyMoney&lt;br /&gt;
&lt;br /&gt;
== Where is My Builds ==&lt;br /&gt;
https://play.google.com/store/apps/details?id=ru.spbau.WhereIsMyMoney&lt;br /&gt;
&lt;br /&gt;
https://github.com/Temp1ar/WhereIsMyMoney/wiki&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
&lt;br /&gt;
Пишем приложение под Android, которое парсит СМСки от банка, и на основе полученных данных говорит пользователю что-нибудь полезное.&lt;br /&gt;
&lt;br /&gt;
Фичи:&lt;br /&gt;
&lt;br /&gt;
# Предустановленные фильтры для известных банков&lt;br /&gt;
# Возможность создавать свои фильтры&lt;br /&gt;
# История транзакций по карте&lt;br /&gt;
# Визуализация (опциональная фича, построение всяких разных графиков баланса)&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=WhereIsMyMoney&amp;diff=1948</id>
		<title>WhereIsMyMoney</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=WhereIsMyMoney&amp;diff=1948"/>
				<updated>2012-11-14T12:36:38Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Состав команды (а. 432) ==&lt;br /&gt;
&lt;br /&gt;
# Залим Башоров&lt;br /&gt;
# Фофанова Мария&lt;br /&gt;
# Коровин Алексей&lt;br /&gt;
# Опейкин Александр&lt;br /&gt;
# Кринкин Михаил&lt;br /&gt;
&lt;br /&gt;
== Репозиторий ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/Temp1ar/WhereIsMyMoney&lt;br /&gt;
&lt;br /&gt;
== Where is My Builds ==&lt;br /&gt;
https://github.com/Temp1ar/WhereIsMyMoney/wiki&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
&lt;br /&gt;
Пишем приложение под Android, которое парсит СМСки от банка, и на основе полученных данных говорит пользователю что-нибудь полезное.&lt;br /&gt;
&lt;br /&gt;
Фичи:&lt;br /&gt;
&lt;br /&gt;
# Предустановленные фильтры для известных банков&lt;br /&gt;
# Возможность создавать свои фильтры&lt;br /&gt;
# История транзакций по карте&lt;br /&gt;
# Визуализация (опциональная фича, построение всяких разных графиков баланса)&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=Devdays2h2012&amp;diff=1947</id>
		<title>Devdays2h2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=Devdays2h2012&amp;diff=1947"/>
				<updated>2012-11-14T12:33:56Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Страницы проектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Страницы проектов ==&lt;br /&gt;
&lt;br /&gt;
* [[Shepherd_Game| Игра &amp;quot;В погоне за овцой&amp;quot; под Android]]&lt;br /&gt;
* [[Project_Grothendieck|Project Grothendieck (Визуализатор алгебраических структур)]]&lt;br /&gt;
* [[MorseKeyboard|Клавиатура Морзе]]&lt;br /&gt;
* [[Cheque recognizer 2.0|Распознавание чеков]]&lt;br /&gt;
* [[DontMissStop|Будильник &amp;quot;Не проспи остановку&amp;quot;]]&lt;br /&gt;
* [[Машина_Тьюринга|Машина Тьюринга]]&lt;br /&gt;
* [[SynchronizedPlayer]]&lt;br /&gt;
* [[Билетоловилка]]&lt;br /&gt;
* [[ScaLaTeX| ScaLaTeX]]&lt;br /&gt;
* [[WhereIsMyMoney|Where is My Money]]&lt;br /&gt;
* [[GooglePlay client for PC]]&lt;br /&gt;
* [[Hear me please]]&lt;br /&gt;
&lt;br /&gt;
== Разное ==&lt;br /&gt;
&lt;br /&gt;
* [[audd12_ideas| Идеи проектов]]&lt;br /&gt;
* [[audday1_initial|Доска с начала мероприятия]]&lt;br /&gt;
* [[audday2_promises_and_status| Состояние проектов на 13.11.2012 утро]]&lt;br /&gt;
* [[audday2_reality| Состояние проектов на 13.11.2012 вечер]]&lt;br /&gt;
* [[audday3_morning| Состояние проектов на 14.11.2012 утро]]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=WhereIsMyMoney&amp;diff=1855</id>
		<title>WhereIsMyMoney</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=WhereIsMyMoney&amp;diff=1855"/>
				<updated>2012-11-12T08:43:51Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Репозиторий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Состав команды (а. 432) ==&lt;br /&gt;
&lt;br /&gt;
# Залим Башоров&lt;br /&gt;
# Фофанова Мария&lt;br /&gt;
# Коровин Алексей&lt;br /&gt;
# Опейкин Александр&lt;br /&gt;
# Кринкин Михаил&lt;br /&gt;
&lt;br /&gt;
== Репозиторий ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/Temp1ar/WhereIsMyMoney&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
&lt;br /&gt;
Пишем приложение под Android, которое парсит СМСки от банка, и на основе полученных данных говорит пользователю что-нибудь полезное.&lt;br /&gt;
&lt;br /&gt;
Фичи:&lt;br /&gt;
&lt;br /&gt;
# Предустановленные фильтры для известных банков&lt;br /&gt;
# Возможность создавать свои фильтры&lt;br /&gt;
# Ручное добавление транзакций&lt;br /&gt;
# История транзакций по карте&lt;br /&gt;
# Визуализация (опциональная фича, построение всяких разных графиков баланса)&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8_2012&amp;diff=1750</id>
		<title>Формальные языки 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8_2012&amp;diff=1750"/>
				<updated>2012-11-08T17:36:09Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Булычев Д.Ю.&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D1%8B%D0%B5_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8&amp;diff=1727</id>
		<title>Сетевые технологии</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D1%8B%D0%B5_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8&amp;diff=1727"/>
				<updated>2012-10-26T18:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Домашние задания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Кузнецов Антон Михайлович&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
[http://mit.spbau.ru/sewiki/images/0/07/Network_Sockets_20110930.pdf Презентация по сокетам]&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
# Есть два IP адреса и маска. Написать программу, которая отвечает на вопрос: лежат ли эти IP адреса в одной подсети&lt;br /&gt;
# Разобраться с tcpdump (написать команду и вывод команды в письме)&lt;br /&gt;
## Увидеть как пингуют мой компьютер&lt;br /&gt;
## Разобраться с ICMP type 3 запросами:&lt;br /&gt;
### Что приходит при отправке пакета на несуществующий узел&lt;br /&gt;
### Что приходит при отправке пакета и обрыве сети&lt;br /&gt;
### Что приходит при отправке пакета и кончается TTL&lt;br /&gt;
# Д/З к 19.10.12&lt;br /&gt;
## Посмотреть route, iptables&lt;br /&gt;
## Раньше А и Б выходили в инет через одну точку.&lt;br /&gt;
### Сделать так чтобы А выходил в инет через Б&lt;br /&gt;
### Теперь настроить на Б SNAT и показать, что при обращении к какому то урлу source подменяется&lt;br /&gt;
## Написать проверялку endian на компе (Big | Little - endian)&lt;br /&gt;
## Hello-Server&amp;lt;br/&amp;gt;Передаем: &amp;lt;имя&amp;gt; &amp;lt;время отправки&amp;gt; &amp;lt;br/&amp;gt;в ответ возвращается: Hello, &amp;lt;имя&amp;gt; &amp;lt;время отправики с сервера&amp;gt;&lt;br /&gt;
### Продемонстрировать, что ответ может прийти не сразу (много клиентов)&lt;br /&gt;
### tcp&lt;br /&gt;
### udp&lt;br /&gt;
### Сравнить количество обслуженных клиентов&lt;br /&gt;
# Chat (сервер, клиент) -- [http://mit.spbau.ru/sewiki/images/1/11/Network2012_chat_task_board.jpg фото доски]&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Network2012_chat_task_board.jpg&amp;diff=1726</id>
		<title>Файл:Network2012 chat task board.jpg</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Network2012_chat_task_board.jpg&amp;diff=1726"/>
				<updated>2012-10-26T18:29:01Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D1%85_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%B2_2012&amp;diff=1646</id>
		<title>Разработка интерактивных интерфейсов 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D1%85_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%B2_2012&amp;diff=1646"/>
				<updated>2012-10-22T19:34:01Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Проекты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Кринкин Кирилл Владимирович&lt;br /&gt;
&lt;br /&gt;
== Проекты ==&lt;br /&gt;
1. Кринкин М., Башоров З.&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://github.com/bashor/RemoteControl Remote Control]&lt;br /&gt;
&lt;br /&gt;
2. Кононенко, Сорокин, Казенюк&lt;br /&gt;
&lt;br /&gt;
3. Опейкин, Коровин&lt;br /&gt;
&lt;br /&gt;
4. Шеставин, Певзнер&lt;br /&gt;
&lt;br /&gt;
5. Савельев, Фофанова&lt;br /&gt;
&lt;br /&gt;
6. Краско, Иванов&lt;br /&gt;
&lt;br /&gt;
7. Лазарев&lt;br /&gt;
&lt;br /&gt;
8. Великий&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D1%8B%D0%B5_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8&amp;diff=1641</id>
		<title>Сетевые технологии</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D1%8B%D0%B5_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8&amp;diff=1641"/>
				<updated>2012-10-18T18:21:33Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Домашние задания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Кузнецов Антон Михайлович&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
[http://mit.spbau.ru/sewiki/images/0/07/Network_Sockets_20110930.pdf Презентация по сокетам]&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
# Есть два IP адреса и маска. Написать программу, которая отвечает на вопрос: лежат ли эти IP адреса в одной подсети&lt;br /&gt;
# Разобраться с tcpdump (написать команду и вывод команды в письме)&lt;br /&gt;
## Увидеть как пингуют мой компьютер&lt;br /&gt;
## Разобраться с ICMP type 3 запросами:&lt;br /&gt;
### Что приходит при отправке пакета на несуществующий узел&lt;br /&gt;
### Что приходит при отправке пакета и обрыве сети&lt;br /&gt;
### Что приходит при отправке пакета и кончается TTL&lt;br /&gt;
# Д/З к 19.10.12&lt;br /&gt;
## Посмотреть route, iptables&lt;br /&gt;
## Раньше А и Б выходили в инет через одну точку.&lt;br /&gt;
### Сделать так чтобы А выходил в инет через Б&lt;br /&gt;
### Теперь настроить на Б SNAT и показать, что при обращении к какому то урлу source подменяется&lt;br /&gt;
## Написать проверялку endian на компе (Big | Little - endian)&lt;br /&gt;
## Hello-Server&amp;lt;br/&amp;gt;Передаем: &amp;lt;имя&amp;gt; &amp;lt;время отправки&amp;gt; &amp;lt;br/&amp;gt;в ответ возвращается: Hello, &amp;lt;имя&amp;gt; &amp;lt;время отправики с сервера&amp;gt;&lt;br /&gt;
### Продемонстрировать, что ответ может прийти не сразу (много клиентов)&lt;br /&gt;
### tcp&lt;br /&gt;
### udp&lt;br /&gt;
### Сравнить количество обслуженных клиентов&lt;br /&gt;
&lt;br /&gt;
В следующий раз к/р (19.10.12).&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0_2012&amp;diff=1621</id>
		<title>Компьютерная графика 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0_2012&amp;diff=1621"/>
				<updated>2012-10-07T20:41:45Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лекторы - Алексей Романов и Евгений Жидков&lt;br /&gt;
&lt;br /&gt;
[https://sites.google.com/site/cgcourseau2012autumn/ страница курса]&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=UML_2012&amp;diff=1620</id>
		<title>UML 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=UML_2012&amp;diff=1620"/>
				<updated>2012-10-07T20:38:00Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Новиков А.&lt;br /&gt;
&lt;br /&gt;
*[http://uml3.ru http://uml3.ru]&lt;br /&gt;
*[http://blog.modelware.ru/ http://blog.modelware.ru/]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1612</id>
		<title>SE Wiki</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1612"/>
				<updated>2012-10-02T19:55:56Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: Добавил ссылки на расписание&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Учебная информация ==&lt;br /&gt;
[http://mit.spbau.ru/ru/scheduleSE Расписание]&lt;br /&gt;
&lt;br /&gt;
5 курс:&lt;br /&gt;
* [[Базы_данных_2012|Базы данных]]&lt;br /&gt;
* [[Алгебраические_структуры_2012|Алгебраические структуры]]&lt;br /&gt;
* [[Алгоритмы_и_структуры_данных_2012|Алгоритмы и структуры данных]]&lt;br /&gt;
* [[Операционные_системы_2012|Операционные системы]]&lt;br /&gt;
* [[Основы_программной_инженерии_2012|Основы программной инженерии]]&lt;br /&gt;
* [[Теория_графов_2012|Теория графов]]&lt;br /&gt;
* [[Комбинаторика_2012|Комбинаторика]]&lt;br /&gt;
* [[Мат_логика_2012|Мат. логика]]&lt;br /&gt;
* [[Unix_и_Скриптовые_языки_2012|Unix и скриптовые языки]]&lt;br /&gt;
* [[C___2012|С++]]&lt;br /&gt;
* [[Технологический_семинар_2012|Технологический семинар]]&lt;br /&gt;
* [[НИР_2012|НИР]]&lt;br /&gt;
&lt;br /&gt;
6 курс:&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.google.com/calendar/embed?mode=WEEK&amp;amp;src=9f7hm9olebmkjnkglq6ussvd7s%40group.calendar.google.com&amp;amp;color=%23060D5E&amp;amp;src=e0hc0uakdjbknh05tcr5fomct8%40group.calendar.google.com&amp;amp;color=%232F6309&amp;amp;src=notnpt47cf0g3cufakpqpcecp5nt1505%40import.calendar.google.com&amp;amp;color=%235A6986&amp;amp;ctz=Europe%2FMoscow Расписание в гугл календаре (html)] [http://www.google.com/calendar/ical/9f7hm9olebmkjnkglq6ussvd7s%40group.calendar.google.com/public/basic.ics (ical)]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[Виртуальные_машины_2012|Виртуальные машины]]&lt;br /&gt;
* [[Машинное_обучение_2012|Машинное обучение]]&lt;br /&gt;
* [[UML_2012|UML]]&lt;br /&gt;
* [[Компьютерная_графика_2012|Компьютерная графика]]&lt;br /&gt;
* [[Параллельные_и_распределенные_вычисления_2012|Параллельные и распределенные вычисления]]&lt;br /&gt;
* [[Программирование_в_ядре_Windows_2012|Программирование в ядре Windows]]&lt;br /&gt;
* [[Тестирование_ПО_2012|Тестирование ПО]]&lt;br /&gt;
* [[Анализ_данных_2012| Анализ данных]]&lt;br /&gt;
* [[Формальные_языки_2012|Формальные языки]]&lt;br /&gt;
* [[Методы_формальной_верификации_программ_2012|Методы формальной верификации программ]]&lt;br /&gt;
* [[Разработка_интерактивных_интерфейсов_2012|Разработка интерактивных интерфейсов]]&lt;br /&gt;
* [[SCALA_2012|Scala]]&lt;br /&gt;
* [[Сетевые технологии]]&lt;br /&gt;
* [[Обобщенное и генеративное программирование]]&lt;br /&gt;
&lt;br /&gt;
== Архив за прошлые семестры ==&lt;br /&gt;
* [[Весна_2012|Весенний семестр 2012]]&lt;br /&gt;
* [[Осень_2011|Осенний семестр 2011]]&lt;br /&gt;
&lt;br /&gt;
== Практики ==&lt;br /&gt;
* [[НИР 5SE осень 2012|Темы практик, осень 2012-го года]]&lt;br /&gt;
* [https://docs.google.com/spreadsheet/pub?key=0Aif17q2hwUt4dG9CRFdGa2tLeV9ab1l1QWlkOFp3bFE&amp;amp;output=html Темы практик, лето 2012-го года]&lt;br /&gt;
* [[Темы практик, 5SE, осень 2011-го года | Темы практик, осень 2011-го года]]&lt;br /&gt;
* [[Темы практик |Темы практик, весна 2011-го года]]&lt;br /&gt;
&lt;br /&gt;
== Студенты ==&lt;br /&gt;
* [[2010|Набор 2010-го года]]&lt;br /&gt;
* [[2011|Набор 2011-го года]]&lt;br /&gt;
* [[2012|Набор 2012-го года]]&lt;br /&gt;
&lt;br /&gt;
== Важные ссылки ==&lt;br /&gt;
Для 5-го курса:&lt;br /&gt;
* [http://code.google.com/p/spbau-cpp-2011/ cpp] - репозиторий для лабораторных по С++.&lt;br /&gt;
* [http://code.google.com/p/aptu-os/source/checkout aptu-os] - репозиторий для лабораторных по операционным системам.&lt;br /&gt;
&lt;br /&gt;
Для 6-го курса:&lt;br /&gt;
* [http://code.google.com/p/hpcource/ hpcource] - репозиторий для лабораторных по параллельному программированию.&lt;br /&gt;
* [http://code.google.com/p/mathvm/ mathvm] - репозиторий для лабораторных по виртуальным машинам.&lt;br /&gt;
* [http://code.google.com/p/spbau-network-2011/source/checkout spbau-network-2011] -  репозиторий для лабораторных по сетевым технологиям.&lt;br /&gt;
&lt;br /&gt;
== Дополнительно == &lt;br /&gt;
* [[Q&amp;amp;A]]&lt;br /&gt;
* [[Мероприятия]]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=SCALA_2012&amp;diff=1608</id>
		<title>SCALA 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=SCALA_2012&amp;diff=1608"/>
				<updated>2012-10-02T17:19:07Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Подхалюзин А., Исакова С.&lt;br /&gt;
&lt;br /&gt;
* [https:/docs.google.com/spreadsheet/ccc?key=0Am1c1yb3OpowdE1Eb3RNUHZNM3h3YzBqNHAxMnRCRlE&amp;amp;pli=1#gid=0| Результаты домашних и контрольных работ]&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
* [https://github.com/Alefas/game-task/blob/master/presentation.pdf?raw=true 01 (pdf)]&lt;br /&gt;
* [https://github.com/svtk/lecture2 02 (src)]&lt;br /&gt;
* [https://github.com/Alefas/complex-task/blob/master/presentation.pdf?raw=true 03 (pdf]&lt;br /&gt;
* [https://github.com/svtk/lecture4 04 (src)]&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
# [https://github.com/Alefas/game-task Four Score]&lt;br /&gt;
# [https://github.com/Alefas/complex-task Сase class Complex]&lt;br /&gt;
# [https://github.com/svtk/lecture4/blob/master/README.md Implement normalization of a lambda term]&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B_2012&amp;diff=1607</id>
		<title>Виртуальные машины 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B_2012&amp;diff=1607"/>
				<updated>2012-10-02T17:02:01Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Иготти Н. А.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/mathvm репозиторий]&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
# Конвертер AST-дерева в код&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B_2012&amp;diff=1606</id>
		<title>Виртуальные машины 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B_2012&amp;diff=1606"/>
				<updated>2012-10-02T16:53:53Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Домашние задания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Иготти Н. А.&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
[http://code.google.com/p/mathvm/ wiki &amp;amp;&amp;amp; code]&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%8F%D0%B4%D1%80%D0%B5_Windows_2012&amp;diff=1571</id>
		<title>Программирование в ядре Windows 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%8F%D0%B4%D1%80%D0%B5_Windows_2012&amp;diff=1571"/>
				<updated>2012-09-14T20:43:55Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: Добавление ссылки на первое Д/З&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Кринкин Кирилл Владимирович&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
#[http://code.google.com/p/windows-kernel-course/wiki/PR_ProcessExplorer Написать консольный ProcessViewer]&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
*[http://code.google.com/p/windows-kernel-course Проект на googlecode]&lt;br /&gt;
*[http://groups.google.com/group/nt-kernel-course Рассылка для обсуждений]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%8F%D0%B4%D1%80%D0%B5_Windows_2012&amp;diff=1570</id>
		<title>Программирование в ядре Windows 2012</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%8F%D0%B4%D1%80%D0%B5_Windows_2012&amp;diff=1570"/>
				<updated>2012-09-14T20:42:11Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: Добавление ресурсов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Кринкин Кирилл Владимирович&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
*[http://code.google.com/p/windows-kernel-course Проект на googlecode]&lt;br /&gt;
*[http://groups.google.com/group/nt-kernel-course Рассылка для обсуждений]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1569</id>
		<title>SE Wiki</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1569"/>
				<updated>2012-09-14T20:37:19Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Учебная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Учебная информация ==&lt;br /&gt;
5 курс:&lt;br /&gt;
* [[Базы_данных_2012|Базы данных]]&lt;br /&gt;
* [[Алгебраические_структуры_2012|Алгебраические структуры]]&lt;br /&gt;
* [[Алгоритмы_и_структуры_данных_2012|Алгоритмы и структуры данных]]&lt;br /&gt;
* [[Операционные_системы_2012|Операционные системы]]&lt;br /&gt;
* [[Основы_программной_инженерии_2012|Основы программной инженерии]]&lt;br /&gt;
* [[Теория_графов_2012|Теория графов]]&lt;br /&gt;
* [[Комбинаторика_2012|Комбинаторика]]&lt;br /&gt;
* [[Мат_логика_2012|Мат. логика]]&lt;br /&gt;
* [[Unix_и_Скриптовые_языки_2012|Unix и скриптовые языки]]&lt;br /&gt;
* [[C___2012|С++]]&lt;br /&gt;
* [[Технологический_семинар_2012|Технологический семинар]]&lt;br /&gt;
* [[НИР_2012|НИР]]&lt;br /&gt;
&lt;br /&gt;
6 курс:&lt;br /&gt;
* [[Виртуальные_машины_2012|Виртуальные машины]]&lt;br /&gt;
* [[Машинное_обучение_2012|Машинное обучение]]&lt;br /&gt;
* [[UML_2012|UML]]&lt;br /&gt;
* [[Компьютерная_графика_2012|Компьютерная графика]]&lt;br /&gt;
* [[Параллельные_и_распределенные_вычисления_2012|Параллельные и распределенные вычисления]]&lt;br /&gt;
* [[Программирование_в_ядре_Windows_2012|Программирование в ядре Windows]]&lt;br /&gt;
* [[Тестирование_ПО_2012|Тестирование ПО]]&lt;br /&gt;
* [[Анализ_данных_2012| Анализ данных]]&lt;br /&gt;
* [[Формальные_языки_2012|Формальные языки]]&lt;br /&gt;
* [[Методы_формальной_верификации_программ_2012|Методы формальной верификации программ]]&lt;br /&gt;
* [[Разработка_интерактивных_интерфейсов_2012|Разработка интерактивных интерфейсов]]&lt;br /&gt;
* [[SCALA_2012|Scala]]&lt;br /&gt;
* [[Сетевые технологии]]&lt;br /&gt;
* [[Обобщенное и генеративное программирование]]&lt;br /&gt;
&lt;br /&gt;
== Архив за прошлые семестры ==&lt;br /&gt;
* [[Весна_2012|Весенний семестр 2012]]&lt;br /&gt;
* [[Осень_2011|Осенний семестр 2011]]&lt;br /&gt;
&lt;br /&gt;
== Практики ==&lt;br /&gt;
* [https://docs.google.com/spreadsheet/pub?key=0Aif17q2hwUt4dG9CRFdGa2tLeV9ab1l1QWlkOFp3bFE&amp;amp;output=html Темы практик, лето 2012-го года]&lt;br /&gt;
* [[Темы практик, 5SE, осень 2011-го года | Темы практик, осень 2011-го года]]&lt;br /&gt;
* [[Темы практик |Темы практик, весна 2011-го года]]&lt;br /&gt;
&lt;br /&gt;
== Студенты ==&lt;br /&gt;
* [[2010|Набор 2010-го года]]&lt;br /&gt;
* [[2011|Набор 2011-го года]]&lt;br /&gt;
* [[2012|Набор 2012-го года]]&lt;br /&gt;
&lt;br /&gt;
== Важные ссылки ==&lt;br /&gt;
Для 5-го курса:&lt;br /&gt;
* [http://code.google.com/p/spbau-cpp-2011/ cpp] - репозиторий для лабораторных по С++.&lt;br /&gt;
* [http://code.google.com/p/aptu-os/source/checkout aptu-os] - репозиторий для лабораторных по операционным системам.&lt;br /&gt;
&lt;br /&gt;
Для 6-го курса:&lt;br /&gt;
* [http://code.google.com/p/hpcource/ hpcource] - репозиторий для лабораторных по параллельному программированию.&lt;br /&gt;
* [http://code.google.com/p/mathvm/ mathvm] - репозиторий для лабораторных по виртуальным машинам.&lt;br /&gt;
* [http://code.google.com/p/spbau-network-2011/source/checkout spbau-network-2011] -  репозиторий для лабораторных по сетевым технологиям.&lt;br /&gt;
&lt;br /&gt;
== Дополнительно == &lt;br /&gt;
* [[Q&amp;amp;A]]&lt;br /&gt;
* [[Мероприятия]]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1509</id>
		<title>SE Wiki</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1509"/>
				<updated>2012-09-13T15:14:22Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Учебная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Учебная информация ==&lt;br /&gt;
5 курс:&lt;br /&gt;
* [[Unix_и_Скриптовые_языки_2012|Unix и скриптовые языки]]&lt;br /&gt;
&lt;br /&gt;
6 курс:&lt;br /&gt;
* [[Методы_формальной_верификации_программ_2012|Методы формальной верификации программ]]&lt;br /&gt;
&lt;br /&gt;
== Архив за прошлые семестры ==&lt;br /&gt;
* [[Весна_2012|Весенний семестр 2012]]&lt;br /&gt;
* [[Осень_2011|Осенний семестр 2011]]&lt;br /&gt;
&lt;br /&gt;
== Практики ==&lt;br /&gt;
* [https://docs.google.com/spreadsheet/pub?key=0Aif17q2hwUt4dG9CRFdGa2tLeV9ab1l1QWlkOFp3bFE&amp;amp;output=html Темы практик, лето 2012-го года]&lt;br /&gt;
* [[Темы практик, 5SE, осень 2011-го года | Темы практик, осень 2011-го года]]&lt;br /&gt;
* [[Темы практик |Темы практик, весна 2011-го года]]&lt;br /&gt;
&lt;br /&gt;
== Студенты ==&lt;br /&gt;
* [[2010|Набор 2010-го года]]&lt;br /&gt;
* [[2011|Набор 2011-го года]]&lt;br /&gt;
* [[2012|Набор 2012-го года]]&lt;br /&gt;
&lt;br /&gt;
== Важные ссылки ==&lt;br /&gt;
Для 5-го курса:&lt;br /&gt;
* [http://code.google.com/p/spbau-cpp-2011/ cpp] - репозиторий для лабораторных по С++.&lt;br /&gt;
* [http://code.google.com/p/aptu-os/source/checkout aptu-os] - репозиторий для лабораторных по операционным системам.&lt;br /&gt;
&lt;br /&gt;
Для 6-го курса:&lt;br /&gt;
* [http://code.google.com/p/hpcource/ hpcource] - репозиторий для лабораторных по параллельному программированию.&lt;br /&gt;
* [http://code.google.com/p/mathvm/ mathvm] - репозиторий для лабораторных по виртуальным машинам.&lt;br /&gt;
* [http://code.google.com/p/spbau-network-2011/source/checkout spbau-network-2011] -  репозиторий для лабораторных по сетевым технологиям.&lt;br /&gt;
&lt;br /&gt;
== Дополнительно == &lt;br /&gt;
* [[Q&amp;amp;A]]&lt;br /&gt;
* [[Мероприятия]]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1504</id>
		<title>SE Wiki</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1504"/>
				<updated>2012-09-12T15:43:46Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Важные ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Учебная информация ==&lt;br /&gt;
&lt;br /&gt;
[[Unix_и_Скриптовые_языки_2012|Unix и скриптовые языки]]&lt;br /&gt;
&lt;br /&gt;
== Архив за прошлые семестры ==&lt;br /&gt;
* [[Весна_2012|Весенний семестр 2012]]&lt;br /&gt;
* [[Осень_2011|Осенний семестр 2011]]&lt;br /&gt;
&lt;br /&gt;
== Практики ==&lt;br /&gt;
* [https://docs.google.com/spreadsheet/pub?key=0Aif17q2hwUt4dG9CRFdGa2tLeV9ab1l1QWlkOFp3bFE&amp;amp;output=html Темы практик, лето 2012-го года]&lt;br /&gt;
* [[Темы практик, 5SE, осень 2011-го года | Темы практик, осень 2011-го года]]&lt;br /&gt;
* [[Темы практик |Темы практик, весна 2011-го года]]&lt;br /&gt;
&lt;br /&gt;
== Студенты ==&lt;br /&gt;
* [[2010|Набор 2010-го года]]&lt;br /&gt;
* [[2011|Набор 2011-го года]]&lt;br /&gt;
* [[2012|Набор 2012-го года]]&lt;br /&gt;
&lt;br /&gt;
== Важные ссылки ==&lt;br /&gt;
Для 5-го курса:&lt;br /&gt;
* [http://code.google.com/p/spbau-cpp-2011/ cpp] - репозиторий для лабораторных по С++.&lt;br /&gt;
* [http://code.google.com/p/aptu-os/source/checkout aptu-os] - репозиторий для лабораторных по операционным системам.&lt;br /&gt;
&lt;br /&gt;
Для 6-го курса:&lt;br /&gt;
* [http://code.google.com/p/hpcource/ hpcource] - репозиторий для лабораторных по параллельному программированию.&lt;br /&gt;
* [http://code.google.com/p/mathvm/ mathvm] - репозиторий для лабораторных по виртуальным машинам.&lt;br /&gt;
* [http://code.google.com/p/spbau-network-2011/source/checkout spbau-network-2011] -  репозиторий для лабораторных по сетевым технологиям.&lt;br /&gt;
&lt;br /&gt;
== Дополнительно == &lt;br /&gt;
* [[Q&amp;amp;A]]&lt;br /&gt;
* [[Мероприятия]]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2._RTTI&amp;diff=1457</id>
		<title>Приведение типов. RTTI</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2._RTTI&amp;diff=1457"/>
				<updated>2012-06-11T07:33:55Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* dynamic_cast */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Приведение типов==&lt;br /&gt;
Приведение типов делится на C style cast и C++ style cast&lt;br /&gt;
===Приведение в стиле C===&lt;br /&gt;
Синтаксис приведения:&lt;br /&gt;
* (тип_к_которому_приводим) переменная&lt;br /&gt;
* тип_к_которому_приводим (переменная)&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int i = 10;&lt;br /&gt;
double d = (double) i;&lt;br /&gt;
float f = float(i);&lt;br /&gt;
char const* ch = &amp;quot;hello&amp;quot;;&lt;br /&gt;
string str = (string) ch;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Приведение в стиле С++===&lt;br /&gt;
В С++ для приведения типов используются следующие функции:&lt;br /&gt;
* const_cast&lt;br /&gt;
* reinterpret_cast&lt;br /&gt;
* static_cast&lt;br /&gt;
* dynamic_cast&lt;br /&gt;
Во всех случаях синтаксис приведения будет выглядеть следующим образом:&lt;br /&gt;
..._cast &amp;lt;тип_к_которому_приводим&amp;gt; (переменная)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первые три более подробно (dynamic_cast рассматривается в разделе RTTI).&lt;br /&gt;
====const_cast====&lt;br /&gt;
Добавляет/убирает у объекта квалификаторы const и volatile. Если убрать константность у объекта, который был объявлен как константный, то при записи может возникнуть undefined behavior (в зависимости от типа объекта).&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ситуацию, когда нам может пригодиться const_cast.&lt;br /&gt;
Предположим у нас класс A, в котором хранятся элементы типа Т. Пусть требуется реализовать метод get (константный и не константный), который по индексу i будет возвращать i-ый элемент. Можно описать реализацию только одного метода (константного), а второй реализовать через вызов первого при помощи const_cast:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
T const&amp;amp; get (int i) const;&lt;br /&gt;
T&amp;amp;       get (int i) {&lt;br /&gt;
    return const_cast&amp;lt;T&amp;amp;&amp;gt; (const_cast&amp;lt;A const*&amp;gt; (this).get(i) );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====reinterpret_cast====&lt;br /&gt;
Приводит любой указатель к любому указателю.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Point3 {&lt;br /&gt;
    double x;&lt;br /&gt;
    double y;&lt;br /&gt;
    double z;&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
Point3* p = ...;&lt;br /&gt;
double* p_x = reinterpret_cast&amp;lt;double*&amp;gt; (p);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Замечание: приведенный пример отработает корректно в случае если структура Point3 плотно упакована в памяти (см. опции компилятора).&lt;br /&gt;
====static_cast====&lt;br /&gt;
Используется для приведения&lt;br /&gt;
* числовых типов (аналогично C-style cast)&lt;br /&gt;
* указателей и ссылок для классов связанных наследованием&lt;br /&gt;
* пользовательских преобразований&lt;br /&gt;
Преобразование выполняется в момент компиляции и run-time проверки (как это есть в dynamic_cast) приведения типов нет, поэтому сложные приведения типов следует делать очень аккуратно. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A {};&lt;br /&gt;
struct B : A {};&lt;br /&gt;
...&lt;br /&gt;
B* b;&lt;br /&gt;
A* a = static_cast&amp;lt;A*&amp;gt; (b);&lt;br /&gt;
b = static_cast&amp;lt;B*&amp;gt; (a);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание: static_cast меняет указатель в зависимости от того какое у классов наследование (в отличии от reinterpret_cast), поэтому если будет forward declaration, то static_cast выдаст ошибку (на этапе компиляции):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A;&lt;br /&gt;
struct B;&lt;br /&gt;
B* b;&lt;br /&gt;
A* a = static_cast&amp;lt;A*&amp;gt;(b); // ошибка!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Общее замечание по разделу Приведение типов===&lt;br /&gt;
При программировании на С++ рекомендуется использовать только C++-style cast (а еще лучше -- не пользоваться приведением типов)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;s&amp;gt;При программировании на С++ рекомендуется использовать C-style cast только в случаях приведения элементарных типов друг к другу.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RTTI==&lt;br /&gt;
RTTI расшифровывается как Run-time type information. Это механизм, позволяющий определять тип объекта в момент выполнения программы. В С++ данный механизм реализуется при помощи следующих элементов:&lt;br /&gt;
* оператор dynamic_cast (используется для преобразования полиморфных типов)&lt;br /&gt;
* оператор typeid (для точного определения типа объекта)&lt;br /&gt;
* класс type_info (для хранения информации, возвращаемой оператором typeid)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим применение и синтаксис typeid и type_info на примере:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;typeinfo&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
A* a;&lt;br /&gt;
type_info&amp;amp; ti = typeid(a);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; ti.name() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Более сложный пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;typeinfo&amp;gt;&lt;br /&gt;
struct A {};&lt;br /&gt;
struct B : A {};&lt;br /&gt;
...&lt;br /&gt;
A* a = new B();&lt;br /&gt;
typeid(a);  // A*&lt;br /&gt;
typeid(*a); // B&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У класса type_info помимо метода name (возвращающего строку - char*, характеризующую тип объекта) и операторов равенства/неравенства есть еще метод before, который позволяет упорядочивать экземпляры type_info и хранить их, например, в map.&lt;br /&gt;
&lt;br /&gt;
===dynamic_cast===&lt;br /&gt;
Позволяет приводить указатель или объект одного типа к указателю или ссылке на другой класс (связанный с первым через наследование).&lt;br /&gt;
В отличии от static_cast выполняется в run-time.&lt;br /&gt;
При ошибке приведения к указателю на тип dynamic_cast возвращает нулевой указатель, при ошибке приведения к ссылке на тип выбрасывается исключение bad_cast.&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A {&lt;br /&gt;
	virtual void f() {}&lt;br /&gt;
};&lt;br /&gt;
struct B : A {&lt;br /&gt;
	virtual void f() {}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
A* pa = new B;&lt;br /&gt;
A* pa2 = new A;&lt;br /&gt;
&lt;br /&gt;
B* pb = dynamic_cast&amp;lt;B*&amp;gt;(pa);   // pb указывает на B&lt;br /&gt;
B* pb2 = dynamic_cast&amp;lt;B*&amp;gt;(pa2); // pb2 указывает на А, а не на В! pb2 == NULL&lt;br /&gt;
&lt;br /&gt;
pb-&amp;gt;f();&lt;br /&gt;
pb2-&amp;gt;f(); // ошибка на этапе исполнения! pb2 == NULL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание: При приведении к указателю на void возвращается указатель на начало блока.&lt;br /&gt;
&lt;br /&gt;
=== Общие замечания по разделу RTTI ===&lt;br /&gt;
* почти всегда можно обойтись без RTTI и чаще всего использование этого механизма говорит об ошибке проектирования&lt;br /&gt;
* на этапе отладки применение RTTI бывает полезно.&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2._RTTI&amp;diff=1456</id>
		<title>Приведение типов. RTTI</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2._RTTI&amp;diff=1456"/>
				<updated>2012-06-11T07:28:33Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Общее замечание по разделу Приведение типов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Приведение типов==&lt;br /&gt;
Приведение типов делится на C style cast и C++ style cast&lt;br /&gt;
===Приведение в стиле C===&lt;br /&gt;
Синтаксис приведения:&lt;br /&gt;
* (тип_к_которому_приводим) переменная&lt;br /&gt;
* тип_к_которому_приводим (переменная)&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int i = 10;&lt;br /&gt;
double d = (double) i;&lt;br /&gt;
float f = float(i);&lt;br /&gt;
char const* ch = &amp;quot;hello&amp;quot;;&lt;br /&gt;
string str = (string) ch;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Приведение в стиле С++===&lt;br /&gt;
В С++ для приведения типов используются следующие функции:&lt;br /&gt;
* const_cast&lt;br /&gt;
* reinterpret_cast&lt;br /&gt;
* static_cast&lt;br /&gt;
* dynamic_cast&lt;br /&gt;
Во всех случаях синтаксис приведения будет выглядеть следующим образом:&lt;br /&gt;
..._cast &amp;lt;тип_к_которому_приводим&amp;gt; (переменная)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первые три более подробно (dynamic_cast рассматривается в разделе RTTI).&lt;br /&gt;
====const_cast====&lt;br /&gt;
Добавляет/убирает у объекта квалификаторы const и volatile. Если убрать константность у объекта, который был объявлен как константный, то при записи может возникнуть undefined behavior (в зависимости от типа объекта).&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ситуацию, когда нам может пригодиться const_cast.&lt;br /&gt;
Предположим у нас класс A, в котором хранятся элементы типа Т. Пусть требуется реализовать метод get (константный и не константный), который по индексу i будет возвращать i-ый элемент. Можно описать реализацию только одного метода (константного), а второй реализовать через вызов первого при помощи const_cast:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
T const&amp;amp; get (int i) const;&lt;br /&gt;
T&amp;amp;       get (int i) {&lt;br /&gt;
    return const_cast&amp;lt;T&amp;amp;&amp;gt; (const_cast&amp;lt;A const*&amp;gt; (this).get(i) );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====reinterpret_cast====&lt;br /&gt;
Приводит любой указатель к любому указателю.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Point3 {&lt;br /&gt;
    double x;&lt;br /&gt;
    double y;&lt;br /&gt;
    double z;&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
Point3* p = ...;&lt;br /&gt;
double* p_x = reinterpret_cast&amp;lt;double*&amp;gt; (p);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Замечание: приведенный пример отработает корректно в случае если структура Point3 плотно упакована в памяти (см. опции компилятора).&lt;br /&gt;
====static_cast====&lt;br /&gt;
Используется для приведения&lt;br /&gt;
* числовых типов (аналогично C-style cast)&lt;br /&gt;
* указателей и ссылок для классов связанных наследованием&lt;br /&gt;
* пользовательских преобразований&lt;br /&gt;
Преобразование выполняется в момент компиляции и run-time проверки (как это есть в dynamic_cast) приведения типов нет, поэтому сложные приведения типов следует делать очень аккуратно. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A {};&lt;br /&gt;
struct B : A {};&lt;br /&gt;
...&lt;br /&gt;
B* b;&lt;br /&gt;
A* a = static_cast&amp;lt;A*&amp;gt; (b);&lt;br /&gt;
b = static_cast&amp;lt;B*&amp;gt; (a);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание: static_cast меняет указатель в зависимости от того какое у классов наследование (в отличии от reinterpret_cast), поэтому если будет forward declaration, то static_cast выдаст ошибку (на этапе компиляции):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A;&lt;br /&gt;
struct B;&lt;br /&gt;
B* b;&lt;br /&gt;
A* a = static_cast&amp;lt;A*&amp;gt;(b); // ошибка!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Общее замечание по разделу Приведение типов===&lt;br /&gt;
При программировании на С++ рекомендуется использовать только C++-style cast (а еще лучше -- не пользоваться приведением типов)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;s&amp;gt;При программировании на С++ рекомендуется использовать C-style cast только в случаях приведения элементарных типов друг к другу.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RTTI==&lt;br /&gt;
RTTI расшифровывается как Run-time type information. Это механизм, позволяющий определять тип объекта в момент выполнения программы. В С++ данный механизм реализуется при помощи следующих элементов:&lt;br /&gt;
* оператор dynamic_cast (используется для преобразования полиморфных типов)&lt;br /&gt;
* оператор typeid (для точного определения типа объекта)&lt;br /&gt;
* класс type_info (для хранения информации, возвращаемой оператором typeid)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим применение и синтаксис typeid и type_info на примере:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;typeinfo&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
A* a;&lt;br /&gt;
type_info&amp;amp; ti = typeid(a);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; ti.name() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Более сложный пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;typeinfo&amp;gt;&lt;br /&gt;
struct A {};&lt;br /&gt;
struct B : A {};&lt;br /&gt;
...&lt;br /&gt;
A* a = new B();&lt;br /&gt;
typeid(a);  // A*&lt;br /&gt;
typeid(*a); // B&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У класса type_info помимо метода name (возвращающего строку - char*, характеризующую тип объекта) и операторов равенства/неравенства есть еще метод before, который позволяет упорядочивать экземпляры type_info и хранить их, например, в map.&lt;br /&gt;
&lt;br /&gt;
===dynamic_cast===&lt;br /&gt;
Позволяет приводить указатель или объект одного типа к указателю или ссылке на другой класс (связанный с первым через наследование).&lt;br /&gt;
В отличии от static_cast выполняется в run-time.&lt;br /&gt;
При ошибке приведения к указателю на тип dynamic_cast возвращает нулевой указатель, при ошибке приведения к ссылке на тип выбрасывается исключение bad_cast.&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A {&lt;br /&gt;
	virtual void f() {}&lt;br /&gt;
};&lt;br /&gt;
struct B : A {&lt;br /&gt;
	virtual void f() {}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
A* pa = new B;&lt;br /&gt;
A* pa2 = new A;&lt;br /&gt;
&lt;br /&gt;
B* pb = dynamic_cast&amp;lt;B*&amp;gt;(pa);   // pb указывает на B&lt;br /&gt;
B* pb2 = dynamic_cast&amp;lt;B*&amp;gt;(pa2); // pb2 указывает на А, а не на В!&lt;br /&gt;
&lt;br /&gt;
pb-&amp;gt;f();&lt;br /&gt;
pb2-&amp;gt;f(); // ошибка на этапе исполнения!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание: При приведении к указателю на void возвращается указатель на начало блока.&lt;br /&gt;
&lt;br /&gt;
=== Общие замечания по разделу RTTI ===&lt;br /&gt;
* почти всегда можно обойтись без RTTI и чаще всего использование этого механизма говорит об ошибке проектирования&lt;br /&gt;
* на этапе отладки применение RTTI бывает полезно.&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2._RTTI&amp;diff=1455</id>
		<title>Приведение типов. RTTI</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2._RTTI&amp;diff=1455"/>
				<updated>2012-06-11T07:00:03Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Приведение типов==&lt;br /&gt;
Приведение типов делится на C style cast и C++ style cast&lt;br /&gt;
===Приведение в стиле C===&lt;br /&gt;
Синтаксис приведения:&lt;br /&gt;
* (тип_к_которому_приводим) переменная&lt;br /&gt;
* тип_к_которому_приводим (переменная)&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int i = 10;&lt;br /&gt;
double d = (double) i;&lt;br /&gt;
float f = float(i);&lt;br /&gt;
char const* ch = &amp;quot;hello&amp;quot;;&lt;br /&gt;
string str = (string) ch;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Приведение в стиле С++===&lt;br /&gt;
В С++ для приведения типов используются следующие функции:&lt;br /&gt;
* const_cast&lt;br /&gt;
* reinterpret_cast&lt;br /&gt;
* static_cast&lt;br /&gt;
* dynamic_cast&lt;br /&gt;
Во всех случаях синтаксис приведения будет выглядеть следующим образом:&lt;br /&gt;
..._cast &amp;lt;тип_к_которому_приводим&amp;gt; (переменная)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первые три более подробно (dynamic_cast рассматривается в разделе RTTI).&lt;br /&gt;
====const_cast====&lt;br /&gt;
Добавляет/убирает у объекта квалификаторы const и volatile. Если убрать константность у объекта, который был объявлен как константный, то при записи может возникнуть undefined behavior (в зависимости от типа объекта).&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ситуацию, когда нам может пригодиться const_cast.&lt;br /&gt;
Предположим у нас класс A, в котором хранятся элементы типа Т. Пусть требуется реализовать метод get (константный и не константный), который по индексу i будет возвращать i-ый элемент. Можно описать реализацию только одного метода (константного), а второй реализовать через вызов первого при помощи const_cast:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
T const&amp;amp; get (int i) const;&lt;br /&gt;
T&amp;amp;       get (int i) {&lt;br /&gt;
    return const_cast&amp;lt;T&amp;amp;&amp;gt; (const_cast&amp;lt;A const*&amp;gt; (this).get(i) );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====reinterpret_cast====&lt;br /&gt;
Приводит любой указатель к любому указателю.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Point3 {&lt;br /&gt;
    double x;&lt;br /&gt;
    double y;&lt;br /&gt;
    double z;&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
Point3* p = ...;&lt;br /&gt;
double* p_x = reinterpret_cast&amp;lt;double*&amp;gt; (p);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Замечание: приведенный пример отработает корректно в случае если структура Point3 плотно упакована в памяти (см. опции компилятора).&lt;br /&gt;
====static_cast====&lt;br /&gt;
Используется для приведения&lt;br /&gt;
* числовых типов (аналогично C-style cast)&lt;br /&gt;
* указателей и ссылок для классов связанных наследованием&lt;br /&gt;
* пользовательских преобразований&lt;br /&gt;
Преобразование выполняется в момент компиляции и run-time проверки (как это есть в dynamic_cast) приведения типов нет, поэтому сложные приведения типов следует делать очень аккуратно. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A {};&lt;br /&gt;
struct B : A {};&lt;br /&gt;
...&lt;br /&gt;
B* b;&lt;br /&gt;
A* a = static_cast&amp;lt;A*&amp;gt; (b);&lt;br /&gt;
b = static_cast&amp;lt;B*&amp;gt; (a);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание: static_cast меняет указатель в зависимости от того какое у классов наследование (в отличии от reinterpret_cast), поэтому если будет forward declaration, то static_cast выдаст ошибку (на этапе компиляции):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A;&lt;br /&gt;
struct B;&lt;br /&gt;
B* b;&lt;br /&gt;
A* a = static_cast&amp;lt;A*&amp;gt;(b); // ошибка!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Общее замечание по разделу Приведение типов===&lt;br /&gt;
При программировании на С++ рекомендуется использовать C-style cast только в случаях приведения элементарных типов друг к другу.&lt;br /&gt;
&lt;br /&gt;
==RTTI==&lt;br /&gt;
RTTI расшифровывается как Run-time type information. Это механизм, позволяющий определять тип объекта в момент выполнения программы. В С++ данный механизм реализуется при помощи следующих элементов:&lt;br /&gt;
* оператор dynamic_cast (используется для преобразования полиморфных типов)&lt;br /&gt;
* оператор typeid (для точного определения типа объекта)&lt;br /&gt;
* класс type_info (для хранения информации, возвращаемой оператором typeid)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим применение и синтаксис typeid и type_info на примере:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;typeinfo&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
A* a;&lt;br /&gt;
type_info&amp;amp; ti = typeid(a);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; ti.name() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Более сложный пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;typeinfo&amp;gt;&lt;br /&gt;
struct A {};&lt;br /&gt;
struct B : A {};&lt;br /&gt;
...&lt;br /&gt;
A* a = new B();&lt;br /&gt;
typeid(a);  // A*&lt;br /&gt;
typeid(*a); // B&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У класса type_info помимо метода name (возвращающего строку - char*, характеризующую тип объекта) и операторов равенства/неравенства есть еще метод before, который позволяет упорядочивать экземпляры type_info и хранить их, например, в map.&lt;br /&gt;
&lt;br /&gt;
===dynamic_cast===&lt;br /&gt;
Позволяет приводить указатель или объект одного типа к указателю или ссылке на другой класс (связанный с первым через наследование).&lt;br /&gt;
В отличии от static_cast выполняется в run-time.&lt;br /&gt;
При ошибке приведения к указателю на тип dynamic_cast возвращает нулевой указатель, при ошибке приведения к ссылке на тип выбрасывается исключение bad_cast.&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct A {&lt;br /&gt;
	virtual void f() {}&lt;br /&gt;
};&lt;br /&gt;
struct B : A {&lt;br /&gt;
	virtual void f() {}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
A* pa = new B;&lt;br /&gt;
A* pa2 = new A;&lt;br /&gt;
&lt;br /&gt;
B* pb = dynamic_cast&amp;lt;B*&amp;gt;(pa);   // pb указывает на B&lt;br /&gt;
B* pb2 = dynamic_cast&amp;lt;B*&amp;gt;(pa2); // pb2 указывает на А, а не на В!&lt;br /&gt;
&lt;br /&gt;
pb-&amp;gt;f();&lt;br /&gt;
pb2-&amp;gt;f(); // ошибка на этапе исполнения!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание: При приведении к указателю на void возвращается указатель на начало блока.&lt;br /&gt;
&lt;br /&gt;
=== Общие замечания по разделу RTTI ===&lt;br /&gt;
* почти всегда можно обойтись без RTTI и чаще всего использование этого механизма говорит об ошибке проектирования&lt;br /&gt;
* на этапе отладки применение RTTI бывает полезно.&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=STL._%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D1%8B&amp;diff=1453</id>
		<title>STL. Последовательные контейнеры</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=STL._%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D1%8B&amp;diff=1453"/>
				<updated>2012-06-11T06:42:53Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Внимание!''' В лекции могут содержаться ошибки и неточности. Прошу исправлять по мере обнаружения.&lt;br /&gt;
== Введение в STL ==&lt;br /&gt;
STL - Standart Template Library. Она стандартизированна. Существует несколько реализаций, в том числе:&lt;br /&gt;
* GCC&lt;br /&gt;
* MS&lt;br /&gt;
* STL Port&lt;br /&gt;
В неё входят:&lt;br /&gt;
* Контейнеры&lt;br /&gt;
* Итераторы&lt;br /&gt;
* Алгоритмы&lt;br /&gt;
&lt;br /&gt;
== Последовательные контейнеры ==&lt;br /&gt;
Ко всем последовательным контейнерам предъявляются общие требования:&lt;br /&gt;
* Copy-constructable (т.е. публичный конструктор копирования).&lt;br /&gt;
* Assignable (т.е. публичный оператор присваивания).&lt;br /&gt;
* Стандартная семантика.&lt;br /&gt;
&lt;br /&gt;
=== Разновидности ===&lt;br /&gt;
* &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt; - массив подряд идущих элементов.&lt;br /&gt;
* &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt; - список взаимосвязанных элеметов.&lt;br /&gt;
* &amp;lt;code&amp;gt;deque&amp;lt;/code&amp;gt; - совокупность связанных в список массивов фиксированной длины + индексная таблица.&lt;br /&gt;
* &amp;lt;code&amp;gt;string/wstring&amp;lt;/code&amp;gt; - строка.&lt;br /&gt;
Для использования этих контейнеров необходимо перед названием типов писать &amp;lt;code&amp;gt;std::&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
using std::vector;&lt;br /&gt;
std::vector&amp;lt;int&amp;gt; v;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
У шаблона есть и второй параметр - аллокатор. Он отвечает за стратегию распределения памяти. Его использовать не надо!&lt;br /&gt;
&lt;br /&gt;
Основные методы вектора представлены ниже:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
v.push_back(13); //добавить элемент к вектору&lt;br /&gt;
v.empty(); //вектор пуст?&lt;br /&gt;
v.size(); //количество элементов в векторе&lt;br /&gt;
v[i]; //обращение к i-му элементу вектора&lt;br /&gt;
v.at(i); //то же самое, только в случае выхода за пределы вектора кидается исключение out_of_range&lt;br /&gt;
v.erase(it); //удаление элемента по итератору (о них будет рассказано далее)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Пример хранения структуры графа:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
vector&amp;lt;vector&amp;lt;int&amp;gt; &amp;gt; g;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deque === &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;deque&amp;gt;&lt;br /&gt;
std::deque&amp;lt;int&amp;gt; d;&lt;br /&gt;
d.push_back(10);&lt;br /&gt;
d.push_front(7);&lt;br /&gt;
// + методы, присущие vector&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Итераторы ===&lt;br /&gt;
При работе с непрерывными массивами мы использовали указатели с операциями &amp;lt;code&amp;gt;*p&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;++p&amp;lt;/code&amp;gt;. У контейнеров для таких целей применяются итераторы.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
vector&amp;lt;int&amp;gt; v(100, 0);&lt;br /&gt;
vector&amp;lt;int&amp;gt;::iterator it = v.begin();&lt;br /&gt;
for (; it != v.end(); ++it)&lt;br /&gt;
  *it = 5;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Если заменить вектор на другой контейнер, последний цикл будет работать по-прежнему (с учётом того, что такой конструктор есть тольео у вектора).&lt;br /&gt;
&lt;br /&gt;
'''Замечание:''' В условии цикла разумно использовать именно оператор !=, а не &amp;lt;, поскольку последний определён не для всех итераторов.&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#incude &amp;lt;list&amp;gt;&lt;br /&gt;
std::list&amp;lt;int&amp;gt; l;&lt;br /&gt;
l.push_back(7);&lt;br /&gt;
//и другие аналогичные методы&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование итераторов ===&lt;br /&gt;
Вставка в список производится по итераторам:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
v.insert(v.begin() + 5, 10); //вставить 10 на 5-ю позицию&lt;br /&gt;
v.end(); //указывает на элемент после последнего! &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Рассмотрим простой пример:&lt;br /&gt;
&lt;br /&gt;
|1|2|3|4|5|6|7|8|9|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;v.begin() + 5&amp;lt;/code&amp;gt; указывает на 6. Если от него получить итератор, который бежит в обратном направлении, он будет указывать на 5. Поэтому итератор удобнее рассматривать как указывающий на промежуток, а не на конкретный элемент.&lt;br /&gt;
&lt;br /&gt;
=== Различные замечания ===&lt;br /&gt;
* &amp;lt;code&amp;gt;l.size()&amp;lt;/code&amp;gt; в большинстве реализаций работает за О(1).&lt;br /&gt;
* В &amp;lt;code&amp;gt;deque&amp;lt;/code&amp;gt; удаление и добавление в начало и конец работают за О(1).&lt;br /&gt;
* &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt; не умеет уменьшаться, он только растёт.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
v.clear(); //v.erase(v.begin(), v.end());&lt;br /&gt;
//чтобы действительно очистить буфер, надо:&lt;br /&gt;
vector&amp;lt;int&amp;gt;().swap(v);&lt;br /&gt;
//чтобы заменить, немного иначе:&lt;br /&gt;
vector&amp;lt;int&amp;gt;(v).swap(v);&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
* При расширении массивов могут возникнуть проблемы, а именно, инвалидация итераторов. Можно использовать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
v.reserve(100); //зарезервировать размер буфера, равный 100&lt;br /&gt;
v.reserve(v.size() + 100); &lt;br /&gt;
v.capacity; //размер буфера&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Инвалидация может так же произойти и при удалении элементов (итератор будет указывать не на тот элемент, который ожидается). Ниже приведены два примера правильной работы с итераторами:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//удаляем все элементы, кратные 2&lt;br /&gt;
for (it = v.begin(); it != v.end(); ) {&lt;br /&gt;
  if (*it % 2)&lt;br /&gt;
    v.erase(it);&lt;br /&gt;
  else&lt;br /&gt;
    ++it;&lt;br /&gt;
}&lt;br /&gt;
//вставим перед элементами, кратными 2, новые элементы, равные 0&lt;br /&gt;
for (it = v.begin(); it != v.end(); ++it) {&lt;br /&gt;
  if (*it % 2) {&lt;br /&gt;
    it = v.insert(it, 0);&lt;br /&gt;
    ++it;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
typedef basic_string&amp;lt;char&amp;gt; string;&lt;br /&gt;
typedef basic_string&amp;lt;wchar&amp;gt; wstring;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Стратегия cow (copy on write) позволяет выиграть при копировании.&lt;br /&gt;
&lt;br /&gt;
Для &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; объектов есть &amp;lt;code&amp;gt;const_iterator&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Строки на самом деле имеют три параметра в конструкторе. Один из них - аллокатор, отвечает за распределение памяти, и другой - chartrait, определяет механизм сравнения строк.&lt;br /&gt;
&lt;br /&gt;
=== Код в стиле С ===&lt;br /&gt;
* &amp;lt;code&amp;gt;s.c_str();&amp;lt;/code&amp;gt; возвращает строку в стиле С.&lt;br /&gt;
* &amp;lt;code&amp;gt;string(str);&amp;lt;/code&amp;gt; конструирует строку в стиле С++ от строки в стиле С.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;v[0]; v.size();&amp;lt;/code&amp;gt; возвращают указатель на начало массива и его длину.&lt;br /&gt;
* &amp;lt;code&amp;gt;vector|list|deque&amp;lt;int&amp;gt;(p, p+size);&amp;lt;/code&amp;gt; конструируют вектор, список или деку соответственно от массива.&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1394</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1394"/>
				<updated>2012-04-24T07:31:45Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* 09.03.2012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
* 20.03.2012 - Третья встреча.&lt;br /&gt;
** Обсудили структуру проекта. Определили &amp;quot;первые шаги&amp;quot; реализации.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: Презентация (reaches), организация проекта, загрузка OSM формата, reaches preprocessing. &lt;br /&gt;
** Сорокин: создать wiki, github, разобраться с визуализатором и написать алг. Дейкстры, презентация? &lt;br /&gt;
** Иванов: web интерфейс (client-side), работающий сервер обрабатывающий запросы поиска евклидова расстояния между 2мя точками&lt;br /&gt;
** ?- допишите на какую тему презентации плиз.&lt;br /&gt;
* 27.03.2012&lt;br /&gt;
** Была проведена презентация Артема Сорокина по алгоритмам на графах (? уточни плз. название алгоритмов)&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Иванов: закончить предыдущее задание. (ServerSide договорились делать на python'e, клиент уже почти написан на javascript'e с использованием openLayers api)&lt;br /&gt;
* 13.04.2012&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: реализация препроцессинга с Penalties и Shortcuts.&lt;br /&gt;
** Сорокин: Transit points (?)&lt;br /&gt;
** Иванов: Веб-сервер (?)&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 09.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 12.03.2012 ====&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3175 Башоров] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3177 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3176 Певзнер] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 27.03.2012 ====&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Закоммитили рабочие версии кода по задачам, ожидаем ревью. &amp;lt;br/&amp;gt;&lt;br /&gt;
(задачи: [http://redmine.osll.spb.ru/issues/3175 Башоров], [http://redmine.osll.spb.ru/issues/3177 Опейкин], [http://redmine.osll.spb.ru/issues/3176 Певзнер])&lt;br /&gt;
&lt;br /&gt;
=== 09.03.2012 ===&lt;br /&gt;
Певзнер: обсудила замечания по результатам ревью по старой задаче, получила новую задачу переноса тегов для suite в button панель. &amp;lt;br/&amp;gt;&lt;br /&gt;
Башоров: сделать главную страницу для Test Suites. &amp;lt;br/&amp;gt;&lt;br /&gt;
Опейкин: реализация фильтрации на стороне сервера. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 13.03.2012 ===&lt;br /&gt;
Unit testing seminar&lt;br /&gt;
&lt;br /&gt;
=== 19.03.2012 ===&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Башоров: получил новую задачу. &amp;lt;br/&amp;gt;&lt;br /&gt;
Опейкин:  &amp;lt;br/&amp;gt;&lt;br /&gt;
Певзнер: обсудила некоторые вопросы по новой задаче. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3я встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
** По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность.&lt;br /&gt;
*4я встреча:&lt;br /&gt;
** Портированная библиотека работать не хочет и разобраться без отладчика - очень трудно. Попытались настроить удалённую отладку на CUDA. Всё настроилось, но софт (Nsight) очень сырой, происходят непонятные ошибки и они нигде не журналируются и не объясняются. (Коровин А.)&lt;br /&gt;
*5я встреча:&lt;br /&gt;
** Реализован поиск с помощью регулярных выражений на основе матричных вычислений с использованием библиотеки cuBLAS. Пока сделан поиск в одной строке. Дальше надо распараллелить на несколько строк. (Лазарев С.)&lt;br /&gt;
** Портированная библиотека после длительной отладки начала матчить строку с регулярным выражением. Задача 1 выражение - 1 строка решена. Следующая задача задействовать все ядра видеокарты и научиться матчить N строк на одно регулярное выражение. (Коровин А.)&lt;br /&gt;
** Реализовн поиск с помощью re2 одной строки на одном ядре. Теперь нужно сделать для n строк на к ядрах.&lt;br /&gt;
*6я встреча:&lt;br /&gt;
** Был реализован матчинг N строк на 1 регулярное выражение на CUDA. К следующей встрече нужно попробовать оптимизировать программу. (Коровин А.)&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 - Всё хорошо.&lt;br /&gt;
* 19/mar/2011 - Снова всё хорошо - работаем.&lt;br /&gt;
* 26/mar/2011 - Семен у нас большой шутник, см. список задач на трекере&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: http://code.google.com/p/aptu-practice-code-duplication/ &amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фофанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
===28.02.2012 - Вводная встреча===&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фофанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
===06.03.2012 - Контрольная встреча===&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
===15.03.2012===&lt;br /&gt;
В рамках НИР необходимо ответить на три вопроса.&lt;br /&gt;
* Научная новизна&lt;br /&gt;
** Список существующих решений для нашей задачи.(Ярослав)&lt;br /&gt;
** Способы оценки существующих решений.(Маша) &lt;br /&gt;
** Библиотеки, для проведения испытания (исследуемая выборка) (Дмитрий)&lt;br /&gt;
* Рабочий прототип. Решено делать плагин на базе IntelliJ IDEA. Функциональность плагина будет выяснена дальше. &lt;br /&gt;
* Этапы разработки&lt;br /&gt;
Решено разбить разработку на три этапа.&lt;br /&gt;
# Определение требований к разрабатываемой программе.(3 недели)&lt;br /&gt;
# Создание прототипа (2 недели)&lt;br /&gt;
# Разработка плагина (4 недели)&lt;br /&gt;
## Основная функциональность (2 недели)&lt;br /&gt;
## Тестирование и доведение (2 неделя)&lt;br /&gt;
## Документирование и создание презентационных материалов (1 неделя параллельно со вторым пунктом.)&lt;br /&gt;
Итого 9 недель. Предположительный срок завершения проекта : 21 мая&lt;br /&gt;
&lt;br /&gt;
===21.03.2012===&lt;br /&gt;
*Возможные метрики для сравнения алгоритмов поиска дубликатов&lt;br /&gt;
** Время работы, используемая память, CPU&lt;br /&gt;
** Число правильно найденных дубликатов&lt;br /&gt;
*** Необходимо учитывать длину каждого дубликата, чтобы учитывать возможную вложенность. Длина дубликата определяется числом символов в нем.&lt;br /&gt;
** Число неправильно найденных дубликатов&lt;br /&gt;
*Метрики для алгоритмов замены дубликатов&lt;br /&gt;
** Объем кода, получающегося после замены найденных дубликатов на вызовы соответствующих методов&lt;br /&gt;
** Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла.&lt;br /&gt;
*Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже.&lt;br /&gt;
&lt;br /&gt;
===6.04.2012===&lt;br /&gt;
*Исследованы IdeaCodeDuplicatePlugin, Digger, Simian и получены следующие метрики:&lt;br /&gt;
**Весовой коэффициент. Каждой строке присваивается вес, который соответствует числу программ, сказавших, что эта строка что-то дублирует.&lt;br /&gt;
***idea   23310&lt;br /&gt;
***digger 34839&lt;br /&gt;
***simian 26050&lt;br /&gt;
**Коэффициент по пересечению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.94&lt;br /&gt;
***digger  0.92&lt;br /&gt;
***simian  0.94&lt;br /&gt;
**Коэффициент по объединению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.86&lt;br /&gt;
***digger  0.12&lt;br /&gt;
***simian  0.18&lt;br /&gt;
*Попарные сравнения алгоритмов по тем же параметрам:&lt;br /&gt;
**digger  |  1.12 | 0.55 | 29589&lt;br /&gt;
**simian  |  1.03 | 0.76 | 21863 &lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.93 |19123&lt;br /&gt;
**digger  | 1.0   | 0.15 | 28710&lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.89 | 18060&lt;br /&gt;
**simian  | 1.0   | 0.19 | 19921&lt;br /&gt;
* Решено использовать алгоритм из Simian.&lt;br /&gt;
&lt;br /&gt;
===11.04.2012===&lt;br /&gt;
: Пишется прототип, в основе которого лежит Simian. Прототип будет представлять собой плагин к IntelliJ IDEA. Для отображения найденных дублирующих строк будет использоваться механизм Inspections. В качестве возможных исправлений пользователю будет предложено заменить строки на вызов соответствующего метода. Эквивалентность найденных дублирующих строк будет дополнительно проверяться с помощью соответствующих синтаксических деревьев.&lt;br /&gt;
&lt;br /&gt;
===16.04.2012===&lt;br /&gt;
: Написан плагин для замены дублирующего кода вызовами соответствующих методов. В основе лежит поиск дубликатов IntelliJ Idea, так как при первом рассмотрении данный алгоритм находит гораздо более сложные дубликаты нежели Simian. В плагине используется механизм Inspections из IntelliJ Idea. При запуске анализатора кода находятся все public static методы, после чего каждый класс из предлагаемого скоупа анализируется на предмет наличия кода дублирующего найденные методы. Затем пользователю предлагается заменить дублирующий код на вызов соответствующих методов.&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Владислав Савельев&lt;br /&gt;
* Дмитрий Шеставин&lt;br /&gt;
* Сергей Казенюк ([[AVMConf_Kazenyuk|отчёты]])&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
13 марта. Встреча с разработчиками проекта. Поставлены задачи.&lt;br /&gt;
: Владислав: Послушал лекцию Кирилла Владимировича про QT. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про QT и шаблон MVC, а также читать про QML.&lt;br /&gt;
&lt;br /&gt;
27 марта.&lt;br /&gt;
: Владислав: Написал интерфейс с лейаутами, правильно создающий контейнеры. Для создания добавил диалоговое окно (с валидацией адреса и прочих штук).&lt;br /&gt;
&lt;br /&gt;
10 апреля.&lt;br /&gt;
: Владислав: Переписал интерфейс с использованием «модели — представления — модели представления». Нарисовал иконок и спроектировал внешний вид приложения в перспективе для презентации Жени Баталова на предзащите.&lt;br /&gt;
: Добавил в программный интерфейс конфигуратора возможность для получения от устройства информации о списке контейнеров.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;br /&gt;
* В язык для рестовых тестов добавлена возможность проверять хереды респонса&lt;br /&gt;
* Добавлен ui для администрирования приложение&lt;br /&gt;
* Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов.&lt;br /&gt;
&lt;br /&gt;
Отчет 19.03 - 25.03&lt;br /&gt;
* Написан классификатор, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Добавлены новые возможности web-интерфейса для администрирования приложения.&lt;br /&gt;
&lt;br /&gt;
Отчет 25.03 - 7.04&lt;br /&gt;
* Написан JobProcessor, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Написаны тесты на JobProcessor&lt;br /&gt;
* Начата реализация интеграции приложения с Ютрэком&lt;br /&gt;
* Осуществлен переход на более новую версию библиотеки jersey&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1393</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1393"/>
				<updated>2012-04-24T07:31:04Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* 13.03.2012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
* 20.03.2012 - Третья встреча.&lt;br /&gt;
** Обсудили структуру проекта. Определили &amp;quot;первые шаги&amp;quot; реализации.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: Презентация (reaches), организация проекта, загрузка OSM формата, reaches preprocessing. &lt;br /&gt;
** Сорокин: создать wiki, github, разобраться с визуализатором и написать алг. Дейкстры, презентация? &lt;br /&gt;
** Иванов: web интерфейс (client-side), работающий сервер обрабатывающий запросы поиска евклидова расстояния между 2мя точками&lt;br /&gt;
** ?- допишите на какую тему презентации плиз.&lt;br /&gt;
* 27.03.2012&lt;br /&gt;
** Была проведена презентация Артема Сорокина по алгоритмам на графах (? уточни плз. название алгоритмов)&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Иванов: закончить предыдущее задание. (ServerSide договорились делать на python'e, клиент уже почти написан на javascript'e с использованием openLayers api)&lt;br /&gt;
* 13.04.2012&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: реализация препроцессинга с Penalties и Shortcuts.&lt;br /&gt;
** Сорокин: Transit points (?)&lt;br /&gt;
** Иванов: Веб-сервер (?)&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 09.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 12.03.2012 ====&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3175 Башоров] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3177 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3176 Певзнер] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 27.03.2012 ====&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Закоммитили рабочие версии кода по задачам, ожидаем ревью. &amp;lt;br/&amp;gt;&lt;br /&gt;
(задачи: [http://redmine.osll.spb.ru/issues/3175 Башоров], [http://redmine.osll.spb.ru/issues/3177 Опейкин], [http://redmine.osll.spb.ru/issues/3176 Певзнер])&lt;br /&gt;
&lt;br /&gt;
=== 09.03.2012 ===&lt;br /&gt;
Певзнер: обсудила замечания по результатам ревью по старой задаче, получила новую задачу переноса тегов для suite в button панель&lt;br /&gt;
Башоров: сделать главную страницу для Test Suites&lt;br /&gt;
Опейкин: реализация фильтрации на стороне сервера.&lt;br /&gt;
=== 13.03.2012 ===&lt;br /&gt;
Unit testing seminar&lt;br /&gt;
&lt;br /&gt;
=== 19.03.2012 ===&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Башоров: получил новую задачу. &amp;lt;br/&amp;gt;&lt;br /&gt;
Опейкин:  &amp;lt;br/&amp;gt;&lt;br /&gt;
Певзнер: обсудила некоторые вопросы по новой задаче. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3я встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
** По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность.&lt;br /&gt;
*4я встреча:&lt;br /&gt;
** Портированная библиотека работать не хочет и разобраться без отладчика - очень трудно. Попытались настроить удалённую отладку на CUDA. Всё настроилось, но софт (Nsight) очень сырой, происходят непонятные ошибки и они нигде не журналируются и не объясняются. (Коровин А.)&lt;br /&gt;
*5я встреча:&lt;br /&gt;
** Реализован поиск с помощью регулярных выражений на основе матричных вычислений с использованием библиотеки cuBLAS. Пока сделан поиск в одной строке. Дальше надо распараллелить на несколько строк. (Лазарев С.)&lt;br /&gt;
** Портированная библиотека после длительной отладки начала матчить строку с регулярным выражением. Задача 1 выражение - 1 строка решена. Следующая задача задействовать все ядра видеокарты и научиться матчить N строк на одно регулярное выражение. (Коровин А.)&lt;br /&gt;
** Реализовн поиск с помощью re2 одной строки на одном ядре. Теперь нужно сделать для n строк на к ядрах.&lt;br /&gt;
*6я встреча:&lt;br /&gt;
** Был реализован матчинг N строк на 1 регулярное выражение на CUDA. К следующей встрече нужно попробовать оптимизировать программу. (Коровин А.)&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 - Всё хорошо.&lt;br /&gt;
* 19/mar/2011 - Снова всё хорошо - работаем.&lt;br /&gt;
* 26/mar/2011 - Семен у нас большой шутник, см. список задач на трекере&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: http://code.google.com/p/aptu-practice-code-duplication/ &amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фофанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
===28.02.2012 - Вводная встреча===&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фофанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
===06.03.2012 - Контрольная встреча===&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
===15.03.2012===&lt;br /&gt;
В рамках НИР необходимо ответить на три вопроса.&lt;br /&gt;
* Научная новизна&lt;br /&gt;
** Список существующих решений для нашей задачи.(Ярослав)&lt;br /&gt;
** Способы оценки существующих решений.(Маша) &lt;br /&gt;
** Библиотеки, для проведения испытания (исследуемая выборка) (Дмитрий)&lt;br /&gt;
* Рабочий прототип. Решено делать плагин на базе IntelliJ IDEA. Функциональность плагина будет выяснена дальше. &lt;br /&gt;
* Этапы разработки&lt;br /&gt;
Решено разбить разработку на три этапа.&lt;br /&gt;
# Определение требований к разрабатываемой программе.(3 недели)&lt;br /&gt;
# Создание прототипа (2 недели)&lt;br /&gt;
# Разработка плагина (4 недели)&lt;br /&gt;
## Основная функциональность (2 недели)&lt;br /&gt;
## Тестирование и доведение (2 неделя)&lt;br /&gt;
## Документирование и создание презентационных материалов (1 неделя параллельно со вторым пунктом.)&lt;br /&gt;
Итого 9 недель. Предположительный срок завершения проекта : 21 мая&lt;br /&gt;
&lt;br /&gt;
===21.03.2012===&lt;br /&gt;
*Возможные метрики для сравнения алгоритмов поиска дубликатов&lt;br /&gt;
** Время работы, используемая память, CPU&lt;br /&gt;
** Число правильно найденных дубликатов&lt;br /&gt;
*** Необходимо учитывать длину каждого дубликата, чтобы учитывать возможную вложенность. Длина дубликата определяется числом символов в нем.&lt;br /&gt;
** Число неправильно найденных дубликатов&lt;br /&gt;
*Метрики для алгоритмов замены дубликатов&lt;br /&gt;
** Объем кода, получающегося после замены найденных дубликатов на вызовы соответствующих методов&lt;br /&gt;
** Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла.&lt;br /&gt;
*Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже.&lt;br /&gt;
&lt;br /&gt;
===6.04.2012===&lt;br /&gt;
*Исследованы IdeaCodeDuplicatePlugin, Digger, Simian и получены следующие метрики:&lt;br /&gt;
**Весовой коэффициент. Каждой строке присваивается вес, который соответствует числу программ, сказавших, что эта строка что-то дублирует.&lt;br /&gt;
***idea   23310&lt;br /&gt;
***digger 34839&lt;br /&gt;
***simian 26050&lt;br /&gt;
**Коэффициент по пересечению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.94&lt;br /&gt;
***digger  0.92&lt;br /&gt;
***simian  0.94&lt;br /&gt;
**Коэффициент по объединению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.86&lt;br /&gt;
***digger  0.12&lt;br /&gt;
***simian  0.18&lt;br /&gt;
*Попарные сравнения алгоритмов по тем же параметрам:&lt;br /&gt;
**digger  |  1.12 | 0.55 | 29589&lt;br /&gt;
**simian  |  1.03 | 0.76 | 21863 &lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.93 |19123&lt;br /&gt;
**digger  | 1.0   | 0.15 | 28710&lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.89 | 18060&lt;br /&gt;
**simian  | 1.0   | 0.19 | 19921&lt;br /&gt;
* Решено использовать алгоритм из Simian.&lt;br /&gt;
&lt;br /&gt;
===11.04.2012===&lt;br /&gt;
: Пишется прототип, в основе которого лежит Simian. Прототип будет представлять собой плагин к IntelliJ IDEA. Для отображения найденных дублирующих строк будет использоваться механизм Inspections. В качестве возможных исправлений пользователю будет предложено заменить строки на вызов соответствующего метода. Эквивалентность найденных дублирующих строк будет дополнительно проверяться с помощью соответствующих синтаксических деревьев.&lt;br /&gt;
&lt;br /&gt;
===16.04.2012===&lt;br /&gt;
: Написан плагин для замены дублирующего кода вызовами соответствующих методов. В основе лежит поиск дубликатов IntelliJ Idea, так как при первом рассмотрении данный алгоритм находит гораздо более сложные дубликаты нежели Simian. В плагине используется механизм Inspections из IntelliJ Idea. При запуске анализатора кода находятся все public static методы, после чего каждый класс из предлагаемого скоупа анализируется на предмет наличия кода дублирующего найденные методы. Затем пользователю предлагается заменить дублирующий код на вызов соответствующих методов.&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Владислав Савельев&lt;br /&gt;
* Дмитрий Шеставин&lt;br /&gt;
* Сергей Казенюк ([[AVMConf_Kazenyuk|отчёты]])&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
13 марта. Встреча с разработчиками проекта. Поставлены задачи.&lt;br /&gt;
: Владислав: Послушал лекцию Кирилла Владимировича про QT. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про QT и шаблон MVC, а также читать про QML.&lt;br /&gt;
&lt;br /&gt;
27 марта.&lt;br /&gt;
: Владислав: Написал интерфейс с лейаутами, правильно создающий контейнеры. Для создания добавил диалоговое окно (с валидацией адреса и прочих штук).&lt;br /&gt;
&lt;br /&gt;
10 апреля.&lt;br /&gt;
: Владислав: Переписал интерфейс с использованием «модели — представления — модели представления». Нарисовал иконок и спроектировал внешний вид приложения в перспективе для презентации Жени Баталова на предзащите.&lt;br /&gt;
: Добавил в программный интерфейс конфигуратора возможность для получения от устройства информации о списке контейнеров.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;br /&gt;
* В язык для рестовых тестов добавлена возможность проверять хереды респонса&lt;br /&gt;
* Добавлен ui для администрирования приложение&lt;br /&gt;
* Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов.&lt;br /&gt;
&lt;br /&gt;
Отчет 19.03 - 25.03&lt;br /&gt;
* Написан классификатор, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Добавлены новые возможности web-интерфейса для администрирования приложения.&lt;br /&gt;
&lt;br /&gt;
Отчет 25.03 - 7.04&lt;br /&gt;
* Написан JobProcessor, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Написаны тесты на JobProcessor&lt;br /&gt;
* Начата реализация интеграции приложения с Ютрэком&lt;br /&gt;
* Осуществлен переход на более новую версию библиотеки jersey&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1392</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1392"/>
				<updated>2012-04-24T07:19:43Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* 19.03.2012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
* 20.03.2012 - Третья встреча.&lt;br /&gt;
** Обсудили структуру проекта. Определили &amp;quot;первые шаги&amp;quot; реализации.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: Презентация (reaches), организация проекта, загрузка OSM формата, reaches preprocessing. &lt;br /&gt;
** Сорокин: создать wiki, github, разобраться с визуализатором и написать алг. Дейкстры, презентация? &lt;br /&gt;
** Иванов: web интерфейс (client-side), работающий сервер обрабатывающий запросы поиска евклидова расстояния между 2мя точками&lt;br /&gt;
** ?- допишите на какую тему презентации плиз.&lt;br /&gt;
* 27.03.2012&lt;br /&gt;
** Была проведена презентация Артема Сорокина по алгоритмам на графах (? уточни плз. название алгоритмов)&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Иванов: закончить предыдущее задание. (ServerSide договорились делать на python'e, клиент уже почти написан на javascript'e с использованием openLayers api)&lt;br /&gt;
* 13.04.2012&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: реализация препроцессинга с Penalties и Shortcuts.&lt;br /&gt;
** Сорокин: Transit points (?)&lt;br /&gt;
** Иванов: Веб-сервер (?)&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 09.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 12.03.2012 ====&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3175 Башоров] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3177 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3176 Певзнер] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 27.03.2012 ====&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Закоммитили рабочие версии кода по задачам, ожидаем ревью. &amp;lt;br/&amp;gt;&lt;br /&gt;
(задачи: [http://redmine.osll.spb.ru/issues/3175 Башоров], [http://redmine.osll.spb.ru/issues/3177 Опейкин], [http://redmine.osll.spb.ru/issues/3176 Певзнер])&lt;br /&gt;
&lt;br /&gt;
=== 13.03.2012 ===&lt;br /&gt;
Unit testing seminar&lt;br /&gt;
&lt;br /&gt;
=== 19.03.2012 ===&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Башоров: получил новую задачу. &amp;lt;br/&amp;gt;&lt;br /&gt;
Опейкин:  &amp;lt;br/&amp;gt;&lt;br /&gt;
Певзнер: обсудила некоторые вопросы по новой задаче. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3я встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
** По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность.&lt;br /&gt;
*4я встреча:&lt;br /&gt;
** Портированная библиотека работать не хочет и разобраться без отладчика - очень трудно. Попытались настроить удалённую отладку на CUDA. Всё настроилось, но софт (Nsight) очень сырой, происходят непонятные ошибки и они нигде не журналируются и не объясняются. (Коровин А.)&lt;br /&gt;
*5я встреча:&lt;br /&gt;
** Реализован поиск с помощью регулярных выражений на основе матричных вычислений с использованием библиотеки cuBLAS. Пока сделан поиск в одной строке. Дальше надо распараллелить на несколько строк. (Лазарев С.)&lt;br /&gt;
** Портированная библиотека после длительной отладки начала матчить строку с регулярным выражением. Задача 1 выражение - 1 строка решена. Следующая задача задействовать все ядра видеокарты и научиться матчить N строк на одно регулярное выражение. (Коровин А.)&lt;br /&gt;
** Реализовн поиск с помощью re2 одной строки на одном ядре. Теперь нужно сделать для n строк на к ядрах.&lt;br /&gt;
*6я встреча:&lt;br /&gt;
** Был реализован матчинг N строк на 1 регулярное выражение на CUDA. К следующей встрече нужно попробовать оптимизировать программу. (Коровин А.)&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 - Всё хорошо.&lt;br /&gt;
* 19/mar/2011 - Снова всё хорошо - работаем.&lt;br /&gt;
* 26/mar/2011 - Семен у нас большой шутник, см. список задач на трекере&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: http://code.google.com/p/aptu-practice-code-duplication/ &amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фофанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
===28.02.2012 - Вводная встреча===&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фофанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
===06.03.2012 - Контрольная встреча===&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
===15.03.2012===&lt;br /&gt;
В рамках НИР необходимо ответить на три вопроса.&lt;br /&gt;
* Научная новизна&lt;br /&gt;
** Список существующих решений для нашей задачи.(Ярослав)&lt;br /&gt;
** Способы оценки существующих решений.(Маша) &lt;br /&gt;
** Библиотеки, для проведения испытания (исследуемая выборка) (Дмитрий)&lt;br /&gt;
* Рабочий прототип. Решено делать плагин на базе IntelliJ IDEA. Функциональность плагина будет выяснена дальше. &lt;br /&gt;
* Этапы разработки&lt;br /&gt;
Решено разбить разработку на три этапа.&lt;br /&gt;
# Определение требований к разрабатываемой программе.(3 недели)&lt;br /&gt;
# Создание прототипа (2 недели)&lt;br /&gt;
# Разработка плагина (4 недели)&lt;br /&gt;
## Основная функциональность (2 недели)&lt;br /&gt;
## Тестирование и доведение (2 неделя)&lt;br /&gt;
## Документирование и создание презентационных материалов (1 неделя параллельно со вторым пунктом.)&lt;br /&gt;
Итого 9 недель. Предположительный срок завершения проекта : 21 мая&lt;br /&gt;
&lt;br /&gt;
===21.03.2012===&lt;br /&gt;
*Возможные метрики для сравнения алгоритмов поиска дубликатов&lt;br /&gt;
** Время работы, используемая память, CPU&lt;br /&gt;
** Число правильно найденных дубликатов&lt;br /&gt;
*** Необходимо учитывать длину каждого дубликата, чтобы учитывать возможную вложенность. Длина дубликата определяется числом символов в нем.&lt;br /&gt;
** Число неправильно найденных дубликатов&lt;br /&gt;
*Метрики для алгоритмов замены дубликатов&lt;br /&gt;
** Объем кода, получающегося после замены найденных дубликатов на вызовы соответствующих методов&lt;br /&gt;
** Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла.&lt;br /&gt;
*Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже.&lt;br /&gt;
&lt;br /&gt;
===6.04.2012===&lt;br /&gt;
*Исследованы IdeaCodeDuplicatePlugin, Digger, Simian и получены следующие метрики:&lt;br /&gt;
**Весовой коэффициент. Каждой строке присваивается вес, который соответствует числу программ, сказавших, что эта строка что-то дублирует.&lt;br /&gt;
***idea   23310&lt;br /&gt;
***digger 34839&lt;br /&gt;
***simian 26050&lt;br /&gt;
**Коэффициент по пересечению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.94&lt;br /&gt;
***digger  0.92&lt;br /&gt;
***simian  0.94&lt;br /&gt;
**Коэффициент по объединению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.86&lt;br /&gt;
***digger  0.12&lt;br /&gt;
***simian  0.18&lt;br /&gt;
*Попарные сравнения алгоритмов по тем же параметрам:&lt;br /&gt;
**digger  |  1.12 | 0.55 | 29589&lt;br /&gt;
**simian  |  1.03 | 0.76 | 21863 &lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.93 |19123&lt;br /&gt;
**digger  | 1.0   | 0.15 | 28710&lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.89 | 18060&lt;br /&gt;
**simian  | 1.0   | 0.19 | 19921&lt;br /&gt;
* Решено использовать алгоритм из Simian.&lt;br /&gt;
&lt;br /&gt;
===11.04.2012===&lt;br /&gt;
: Пишется прототип, в основе которого лежит Simian. Прототип будет представлять собой плагин к IntelliJ IDEA. Для отображения найденных дублирующих строк будет использоваться механизм Inspections. В качестве возможных исправлений пользователю будет предложено заменить строки на вызов соответствующего метода. Эквивалентность найденных дублирующих строк будет дополнительно проверяться с помощью соответствующих синтаксических деревьев.&lt;br /&gt;
&lt;br /&gt;
===16.04.2012===&lt;br /&gt;
: Написан плагин для замены дублирующего кода вызовами соответствующих методов. В основе лежит поиск дубликатов IntelliJ Idea, так как при первом рассмотрении данный алгоритм находит гораздо более сложные дубликаты нежели Simian. В плагине используется механизм Inspections из IntelliJ Idea. При запуске анализатора кода находятся все public static методы, после чего каждый класс из предлагаемого скоупа анализируется на предмет наличия кода дублирующего найденные методы. Затем пользователю предлагается заменить дублирующий код на вызов соответствующих методов.&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Владислав Савельев&lt;br /&gt;
* Дмитрий Шеставин&lt;br /&gt;
* Сергей Казенюк ([[AVMConf_Kazenyuk|отчёты]])&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
13 марта. Встреча с разработчиками проекта. Поставлены задачи.&lt;br /&gt;
: Владислав: Послушал лекцию Кирилла Владимировича про QT. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про QT и шаблон MVC, а также читать про QML.&lt;br /&gt;
&lt;br /&gt;
27 марта.&lt;br /&gt;
: Владислав: Написал интерфейс с лейаутами, правильно создающий контейнеры. Для создания добавил диалоговое окно (с валидацией адреса и прочих штук).&lt;br /&gt;
&lt;br /&gt;
10 апреля.&lt;br /&gt;
: Владислав: Переписал интерфейс с использованием «модели — представления — модели представления». Нарисовал иконок и спроектировал внешний вид приложения в перспективе для презентации Жени Баталова на предзащите.&lt;br /&gt;
: Добавил в программный интерфейс конфигуратора возможность для получения от устройства информации о списке контейнеров.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;br /&gt;
* В язык для рестовых тестов добавлена возможность проверять хереды респонса&lt;br /&gt;
* Добавлен ui для администрирования приложение&lt;br /&gt;
* Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов.&lt;br /&gt;
&lt;br /&gt;
Отчет 19.03 - 25.03&lt;br /&gt;
* Написан классификатор, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Добавлены новые возможности web-интерфейса для администрирования приложения.&lt;br /&gt;
&lt;br /&gt;
Отчет 25.03 - 7.04&lt;br /&gt;
* Написан JobProcessor, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Написаны тесты на JobProcessor&lt;br /&gt;
* Начата реализация интеграции приложения с Ютрэком&lt;br /&gt;
* Осуществлен переход на более новую версию библиотеки jersey&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1391</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1391"/>
				<updated>2012-04-24T07:19:02Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* MyFit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
* 20.03.2012 - Третья встреча.&lt;br /&gt;
** Обсудили структуру проекта. Определили &amp;quot;первые шаги&amp;quot; реализации.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: Презентация (reaches), организация проекта, загрузка OSM формата, reaches preprocessing. &lt;br /&gt;
** Сорокин: создать wiki, github, разобраться с визуализатором и написать алг. Дейкстры, презентация? &lt;br /&gt;
** Иванов: web интерфейс (client-side), работающий сервер обрабатывающий запросы поиска евклидова расстояния между 2мя точками&lt;br /&gt;
** ?- допишите на какую тему презентации плиз.&lt;br /&gt;
* 27.03.2012&lt;br /&gt;
** Была проведена презентация Артема Сорокина по алгоритмам на графах (? уточни плз. название алгоритмов)&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Иванов: закончить предыдущее задание. (ServerSide договорились делать на python'e, клиент уже почти написан на javascript'e с использованием openLayers api)&lt;br /&gt;
* 13.04.2012&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: реализация препроцессинга с Penalties и Shortcuts.&lt;br /&gt;
** Сорокин: Transit points (?)&lt;br /&gt;
** Иванов: Веб-сервер (?)&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 09.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 12.03.2012 ====&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3175 Башоров] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3177 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3176 Певзнер] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 27.03.2012 ====&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Закоммитили рабочие версии кода по задачам, ожидаем ревью. &amp;lt;br/&amp;gt;&lt;br /&gt;
(задачи: [http://redmine.osll.spb.ru/issues/3175 Башоров], [http://redmine.osll.spb.ru/issues/3177 Опейкин], [http://redmine.osll.spb.ru/issues/3176 Певзнер])&lt;br /&gt;
&lt;br /&gt;
=== 13.03.2012 ===&lt;br /&gt;
Unit testing seminar&lt;br /&gt;
&lt;br /&gt;
=== 19.03.2012 ===&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Башоров: получил новую задачу.&lt;br /&gt;
Опейкин: &lt;br /&gt;
Певзнер: обсудила некоторые вопросы по новой задаче.&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3я встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
** По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность.&lt;br /&gt;
*4я встреча:&lt;br /&gt;
** Портированная библиотека работать не хочет и разобраться без отладчика - очень трудно. Попытались настроить удалённую отладку на CUDA. Всё настроилось, но софт (Nsight) очень сырой, происходят непонятные ошибки и они нигде не журналируются и не объясняются. (Коровин А.)&lt;br /&gt;
*5я встреча:&lt;br /&gt;
** Реализован поиск с помощью регулярных выражений на основе матричных вычислений с использованием библиотеки cuBLAS. Пока сделан поиск в одной строке. Дальше надо распараллелить на несколько строк. (Лазарев С.)&lt;br /&gt;
** Портированная библиотека после длительной отладки начала матчить строку с регулярным выражением. Задача 1 выражение - 1 строка решена. Следующая задача задействовать все ядра видеокарты и научиться матчить N строк на одно регулярное выражение. (Коровин А.)&lt;br /&gt;
** Реализовн поиск с помощью re2 одной строки на одном ядре. Теперь нужно сделать для n строк на к ядрах.&lt;br /&gt;
*6я встреча:&lt;br /&gt;
** Был реализован матчинг N строк на 1 регулярное выражение на CUDA. К следующей встрече нужно попробовать оптимизировать программу. (Коровин А.)&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 - Всё хорошо.&lt;br /&gt;
* 19/mar/2011 - Снова всё хорошо - работаем.&lt;br /&gt;
* 26/mar/2011 - Семен у нас большой шутник, см. список задач на трекере&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: http://code.google.com/p/aptu-practice-code-duplication/ &amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фофанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
===28.02.2012 - Вводная встреча===&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фофанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
===06.03.2012 - Контрольная встреча===&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
===15.03.2012===&lt;br /&gt;
В рамках НИР необходимо ответить на три вопроса.&lt;br /&gt;
* Научная новизна&lt;br /&gt;
** Список существующих решений для нашей задачи.(Ярослав)&lt;br /&gt;
** Способы оценки существующих решений.(Маша) &lt;br /&gt;
** Библиотеки, для проведения испытания (исследуемая выборка) (Дмитрий)&lt;br /&gt;
* Рабочий прототип. Решено делать плагин на базе IntelliJ IDEA. Функциональность плагина будет выяснена дальше. &lt;br /&gt;
* Этапы разработки&lt;br /&gt;
Решено разбить разработку на три этапа.&lt;br /&gt;
# Определение требований к разрабатываемой программе.(3 недели)&lt;br /&gt;
# Создание прототипа (2 недели)&lt;br /&gt;
# Разработка плагина (4 недели)&lt;br /&gt;
## Основная функциональность (2 недели)&lt;br /&gt;
## Тестирование и доведение (2 неделя)&lt;br /&gt;
## Документирование и создание презентационных материалов (1 неделя параллельно со вторым пунктом.)&lt;br /&gt;
Итого 9 недель. Предположительный срок завершения проекта : 21 мая&lt;br /&gt;
&lt;br /&gt;
===21.03.2012===&lt;br /&gt;
*Возможные метрики для сравнения алгоритмов поиска дубликатов&lt;br /&gt;
** Время работы, используемая память, CPU&lt;br /&gt;
** Число правильно найденных дубликатов&lt;br /&gt;
*** Необходимо учитывать длину каждого дубликата, чтобы учитывать возможную вложенность. Длина дубликата определяется числом символов в нем.&lt;br /&gt;
** Число неправильно найденных дубликатов&lt;br /&gt;
*Метрики для алгоритмов замены дубликатов&lt;br /&gt;
** Объем кода, получающегося после замены найденных дубликатов на вызовы соответствующих методов&lt;br /&gt;
** Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла.&lt;br /&gt;
*Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже.&lt;br /&gt;
&lt;br /&gt;
===6.04.2012===&lt;br /&gt;
*Исследованы IdeaCodeDuplicatePlugin, Digger, Simian и получены следующие метрики:&lt;br /&gt;
**Весовой коэффициент. Каждой строке присваивается вес, который соответствует числу программ, сказавших, что эта строка что-то дублирует.&lt;br /&gt;
***idea   23310&lt;br /&gt;
***digger 34839&lt;br /&gt;
***simian 26050&lt;br /&gt;
**Коэффициент по пересечению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.94&lt;br /&gt;
***digger  0.92&lt;br /&gt;
***simian  0.94&lt;br /&gt;
**Коэффициент по объединению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.86&lt;br /&gt;
***digger  0.12&lt;br /&gt;
***simian  0.18&lt;br /&gt;
*Попарные сравнения алгоритмов по тем же параметрам:&lt;br /&gt;
**digger  |  1.12 | 0.55 | 29589&lt;br /&gt;
**simian  |  1.03 | 0.76 | 21863 &lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.93 |19123&lt;br /&gt;
**digger  | 1.0   | 0.15 | 28710&lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.89 | 18060&lt;br /&gt;
**simian  | 1.0   | 0.19 | 19921&lt;br /&gt;
* Решено использовать алгоритм из Simian.&lt;br /&gt;
&lt;br /&gt;
===11.04.2012===&lt;br /&gt;
: Пишется прототип, в основе которого лежит Simian. Прототип будет представлять собой плагин к IntelliJ IDEA. Для отображения найденных дублирующих строк будет использоваться механизм Inspections. В качестве возможных исправлений пользователю будет предложено заменить строки на вызов соответствующего метода. Эквивалентность найденных дублирующих строк будет дополнительно проверяться с помощью соответствующих синтаксических деревьев.&lt;br /&gt;
&lt;br /&gt;
===16.04.2012===&lt;br /&gt;
: Написан плагин для замены дублирующего кода вызовами соответствующих методов. В основе лежит поиск дубликатов IntelliJ Idea, так как при первом рассмотрении данный алгоритм находит гораздо более сложные дубликаты нежели Simian. В плагине используется механизм Inspections из IntelliJ Idea. При запуске анализатора кода находятся все public static методы, после чего каждый класс из предлагаемого скоупа анализируется на предмет наличия кода дублирующего найденные методы. Затем пользователю предлагается заменить дублирующий код на вызов соответствующих методов.&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Владислав Савельев&lt;br /&gt;
* Дмитрий Шеставин&lt;br /&gt;
* Сергей Казенюк ([[AVMConf_Kazenyuk|отчёты]])&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
13 марта. Встреча с разработчиками проекта. Поставлены задачи.&lt;br /&gt;
: Владислав: Послушал лекцию Кирилла Владимировича про QT. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про QT и шаблон MVC, а также читать про QML.&lt;br /&gt;
&lt;br /&gt;
27 марта.&lt;br /&gt;
: Владислав: Написал интерфейс с лейаутами, правильно создающий контейнеры. Для создания добавил диалоговое окно (с валидацией адреса и прочих штук).&lt;br /&gt;
&lt;br /&gt;
10 апреля.&lt;br /&gt;
: Владислав: Переписал интерфейс с использованием «модели — представления — модели представления». Нарисовал иконок и спроектировал внешний вид приложения в перспективе для презентации Жени Баталова на предзащите.&lt;br /&gt;
: Добавил в программный интерфейс конфигуратора возможность для получения от устройства информации о списке контейнеров.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;br /&gt;
* В язык для рестовых тестов добавлена возможность проверять хереды респонса&lt;br /&gt;
* Добавлен ui для администрирования приложение&lt;br /&gt;
* Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов.&lt;br /&gt;
&lt;br /&gt;
Отчет 19.03 - 25.03&lt;br /&gt;
* Написан классификатор, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Добавлены новые возможности web-интерфейса для администрирования приложения.&lt;br /&gt;
&lt;br /&gt;
Отчет 25.03 - 7.04&lt;br /&gt;
* Написан JobProcessor, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Написаны тесты на JobProcessor&lt;br /&gt;
* Начата реализация интеграции приложения с Ютрэком&lt;br /&gt;
* Осуществлен переход на более новую версию библиотеки jersey&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1390</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1390"/>
				<updated>2012-04-24T07:04:12Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* 12.03.2012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
* 20.03.2012 - Третья встреча.&lt;br /&gt;
** Обсудили структуру проекта. Определили &amp;quot;первые шаги&amp;quot; реализации.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: Презентация (reaches), организация проекта, загрузка OSM формата, reaches preprocessing. &lt;br /&gt;
** Сорокин: создать wiki, github, разобраться с визуализатором и написать алг. Дейкстры, презентация? &lt;br /&gt;
** Иванов: web интерфейс (client-side), работающий сервер обрабатывающий запросы поиска евклидова расстояния между 2мя точками&lt;br /&gt;
** ?- допишите на какую тему презентации плиз.&lt;br /&gt;
* 27.03.2012&lt;br /&gt;
** Была проведена презентация Артема Сорокина по алгоритмам на графах (? уточни плз. название алгоритмов)&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Иванов: закончить предыдущее задание. (ServerSide договорились делать на python'e, клиент уже почти написан на javascript'e с использованием openLayers api)&lt;br /&gt;
* 13.04.2012&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: реализация препроцессинга с Penalties и Shortcuts.&lt;br /&gt;
** Сорокин: Transit points (?)&lt;br /&gt;
** Иванов: Веб-сервер (?)&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 09.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 12.03.2012 ====&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3175 Башоров] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3177 Опейкин]&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3176 Певзнер]&lt;br /&gt;
&lt;br /&gt;
==== 27.03.2012 ====&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Закоммитили рабочие версии кода по задачам, ожидаем ревью. &amp;lt;br/&amp;gt;&lt;br /&gt;
(задачи: [http://redmine.osll.spb.ru/issues/3175 Башоров], [http://redmine.osll.spb.ru/issues/3177 Опейкин], [http://redmine.osll.spb.ru/issues/3176 Певзнер])&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3я встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
** По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность.&lt;br /&gt;
*4я встреча:&lt;br /&gt;
** Портированная библиотека работать не хочет и разобраться без отладчика - очень трудно. Попытались настроить удалённую отладку на CUDA. Всё настроилось, но софт (Nsight) очень сырой, происходят непонятные ошибки и они нигде не журналируются и не объясняются. (Коровин А.)&lt;br /&gt;
*5я встреча:&lt;br /&gt;
** Реализован поиск с помощью регулярных выражений на основе матричных вычислений с использованием библиотеки cuBLAS. Пока сделан поиск в одной строке. Дальше надо распараллелить на несколько строк. (Лазарев С.)&lt;br /&gt;
** Портированная библиотека после длительной отладки начала матчить строку с регулярным выражением. Задача 1 выражение - 1 строка решена. Следующая задача задействовать все ядра видеокарты и научиться матчить N строк на одно регулярное выражение. (Коровин А.)&lt;br /&gt;
** Реализовн поиск с помощью re2 одной строки на одном ядре. Теперь нужно сделать для n строк на к ядрах.&lt;br /&gt;
*6я встреча:&lt;br /&gt;
** Был реализован матчинг N строк на 1 регулярное выражение на CUDA. К следующей встрече нужно попробовать оптимизировать программу. (Коровин А.)&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 - Всё хорошо.&lt;br /&gt;
* 19/mar/2011 - Снова всё хорошо - работаем.&lt;br /&gt;
* 26/mar/2011 - Семен у нас большой шутник, см. список задач на трекере&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: http://code.google.com/p/aptu-practice-code-duplication/ &amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фофанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
===28.02.2012 - Вводная встреча===&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фофанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
===06.03.2012 - Контрольная встреча===&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
===15.03.2012===&lt;br /&gt;
В рамках НИР необходимо ответить на три вопроса.&lt;br /&gt;
* Научная новизна&lt;br /&gt;
** Список существующих решений для нашей задачи.(Ярослав)&lt;br /&gt;
** Способы оценки существующих решений.(Маша) &lt;br /&gt;
** Библиотеки, для проведения испытания (исследуемая выборка) (Дмитрий)&lt;br /&gt;
* Рабочий прототип. Решено делать плагин на базе IntelliJ IDEA. Функциональность плагина будет выяснена дальше. &lt;br /&gt;
* Этапы разработки&lt;br /&gt;
Решено разбить разработку на три этапа.&lt;br /&gt;
# Определение требований к разрабатываемой программе.(3 недели)&lt;br /&gt;
# Создание прототипа (2 недели)&lt;br /&gt;
# Разработка плагина (4 недели)&lt;br /&gt;
## Основная функциональность (2 недели)&lt;br /&gt;
## Тестирование и доведение (2 неделя)&lt;br /&gt;
## Документирование и создание презентационных материалов (1 неделя параллельно со вторым пунктом.)&lt;br /&gt;
Итого 9 недель. Предположительный срок завершения проекта : 21 мая&lt;br /&gt;
&lt;br /&gt;
===21.03.2012===&lt;br /&gt;
*Возможные метрики для сравнения алгоритмов поиска дубликатов&lt;br /&gt;
** Время работы, используемая память, CPU&lt;br /&gt;
** Число правильно найденных дубликатов&lt;br /&gt;
*** Необходимо учитывать длину каждого дубликата, чтобы учитывать возможную вложенность. Длина дубликата определяется числом символов в нем.&lt;br /&gt;
** Число неправильно найденных дубликатов&lt;br /&gt;
*Метрики для алгоритмов замены дубликатов&lt;br /&gt;
** Объем кода, получающегося после замены найденных дубликатов на вызовы соответствующих методов&lt;br /&gt;
** Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла.&lt;br /&gt;
*Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже.&lt;br /&gt;
&lt;br /&gt;
===6.04.2012===&lt;br /&gt;
*Исследованы IdeaCodeDuplicatePlugin, Digger, Simian и получены следующие метрики:&lt;br /&gt;
**Весовой коэффициент. Каждой строке присваивается вес, который соответствует числу программ, сказавших, что эта строка что-то дублирует.&lt;br /&gt;
***idea   23310&lt;br /&gt;
***digger 34839&lt;br /&gt;
***simian 26050&lt;br /&gt;
**Коэффициент по пересечению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.94&lt;br /&gt;
***digger  0.92&lt;br /&gt;
***simian  0.94&lt;br /&gt;
**Коэффициент по объединению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.&lt;br /&gt;
***idea    0.86&lt;br /&gt;
***digger  0.12&lt;br /&gt;
***simian  0.18&lt;br /&gt;
*Попарные сравнения алгоритмов по тем же параметрам:&lt;br /&gt;
**digger  |  1.12 | 0.55 | 29589&lt;br /&gt;
**simian  |  1.03 | 0.76 | 21863 &lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.93 |19123&lt;br /&gt;
**digger  | 1.0   | 0.15 | 28710&lt;br /&gt;
&lt;br /&gt;
**idea    | 1.0   | 0.89 | 18060&lt;br /&gt;
**simian  | 1.0   | 0.19 | 19921&lt;br /&gt;
* Решено использовать алгоритм из Simian.&lt;br /&gt;
&lt;br /&gt;
===11.04.2012===&lt;br /&gt;
: Пишется прототип, в основе которого лежит Simian. Прототип будет представлять собой плагин к IntelliJ IDEA. Для отображения найденных дублирующих строк будет использоваться механизм Inspections. В качестве возможных исправлений пользователю будет предложено заменить строки на вызов соответствующего метода. Эквивалентность найденных дублирующих строк будет дополнительно проверяться с помощью соответствующих синтаксических деревьев.&lt;br /&gt;
&lt;br /&gt;
===16.04.2012===&lt;br /&gt;
: Написан плагин для замены дублирующего кода вызовами соответствующих методов. В основе лежит поиск дубликатов IntelliJ Idea, так как при первом рассмотрении данный алгоритм находит гораздо более сложные дубликаты нежели Simian. В плагине используется механизм Inspections из IntelliJ Idea. При запуске анализатора кода находятся все public static методы, после чего каждый класс из предлагаемого скоупа анализируется на предмет наличия кода дублирующего найденные методы. Затем пользователю предлагается заменить дублирующий код на вызов соответствующих методов.&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Владислав Савельев&lt;br /&gt;
* Дмитрий Шеставин&lt;br /&gt;
* Сергей Казенюк ([[AVMConf_Kazenyuk|отчёты]])&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
13 марта. Встреча с разработчиками проекта. Поставлены задачи.&lt;br /&gt;
: Владислав: Послушал лекцию Кирилла Владимировича про QT. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про QT и шаблон MVC, а также читать про QML.&lt;br /&gt;
&lt;br /&gt;
27 марта.&lt;br /&gt;
: Владислав: Написал интерфейс с лейаутами, правильно создающий контейнеры. Для создания добавил диалоговое окно (с валидацией адреса и прочих штук).&lt;br /&gt;
&lt;br /&gt;
10 апреля.&lt;br /&gt;
: Владислав: Переписал интерфейс с использованием «модели — представления — модели представления». Нарисовал иконок и спроектировал внешний вид приложения в перспективе для презентации Жени Баталова на предзащите.&lt;br /&gt;
: Добавил в программный интерфейс конфигуратора возможность для получения от устройства информации о списке контейнеров.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;br /&gt;
* В язык для рестовых тестов добавлена возможность проверять хереды респонса&lt;br /&gt;
* Добавлен ui для администрирования приложение&lt;br /&gt;
* Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов.&lt;br /&gt;
&lt;br /&gt;
Отчет 19.03 - 25.03&lt;br /&gt;
* Написан классификатор, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Добавлены новые возможности web-интерфейса для администрирования приложения.&lt;br /&gt;
&lt;br /&gt;
Отчет 25.03 - 7.04&lt;br /&gt;
* Написан JobProcessor, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Написаны тесты на JobProcessor&lt;br /&gt;
* Начата реализация интеграции приложения с Ютрэком&lt;br /&gt;
* Осуществлен переход на более новую версию библиотеки jersey&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=DevDays&amp;diff=1373</id>
		<title>DevDays</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=DevDays&amp;diff=1373"/>
				<updated>2012-04-19T19:06:42Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://twitter.com/#!/search/realtime/%23audd12%20OR%20%23AUDevDays #audd12 OR #AUDevDays]&lt;br /&gt;
&lt;br /&gt;
==Проекты==&lt;br /&gt;
* [[Android_Accelerometer|Акселерометр в Android]]: Мария Фофанова, Алина Певзнер, Василий Кононенко, Дмитрий Бандурин&lt;br /&gt;
* [[Cheque_recognizer|Cheque (Receipt) recognizer]]: Дмитрий Шерставин, Залим Башоров, Семен Мартынов, Сергей Казенюк&lt;br /&gt;
* [[Android_Notification|Оповещения с Android]]: Михаил Кринкин, Алексей Коровин, Александр Опейкин, Сергей Лазарев, Ксения Крашенинникова&lt;br /&gt;
* [[Geo_Time_Tracker|Geo Time Tracker for Android]]: Евгений Краско, Алексей Кудинкин, Анна Ждан, Сорокин Артём, Ярослав Лепенькин &lt;br /&gt;
* &amp;lt;del&amp;gt;[[DJVU_Formatter|DJVU форматер под маленькие разрешения экрана]]: Василий Кононенко, Дмитрий Бандурин&amp;lt;/del&amp;gt;&lt;br /&gt;
* [[GTD_tool|GTD(time managment) tool]]: Иванов Антон, Сергей Кормишин, Владислав Савельев&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=DevDays&amp;diff=1314</id>
		<title>DevDays</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=DevDays&amp;diff=1314"/>
				<updated>2012-04-17T01:02:17Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://twitter.com/#!/search/%23AUDevDays #AUDevDays]&lt;br /&gt;
&lt;br /&gt;
==Проекты==&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=DevDays&amp;diff=1313</id>
		<title>DevDays</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=DevDays&amp;diff=1313"/>
				<updated>2012-04-17T00:35:45Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: Новая страница: «==Проекты== *  * * *»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Проекты==&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1312</id>
		<title>SE Wiki</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=SE_Wiki&amp;diff=1312"/>
				<updated>2012-04-17T00:26:30Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: +DevDays&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Учебная информация ==&lt;br /&gt;
&lt;br /&gt;
* [[Java | Java]]&lt;br /&gt;
* [[FunctionalProgramming | Функциональное программирование]]&lt;br /&gt;
* [[IntroductionToProgrammingLanguages | Теоретические основы языков программирования]]&lt;br /&gt;
* [[SoftwareDesign | Software design]]&lt;br /&gt;
* [[SE | Основы программной инженерии]]&lt;br /&gt;
* [[MachineLearning | Машинное обучение]]&lt;br /&gt;
* [[LinuxKernelProgramming | Программирование в ядре Linux]]&lt;br /&gt;
* [[NIR | Научно-исследовательская работа]]&lt;br /&gt;
* [[Теорема_Пойа | Теорема Пойа]]&lt;br /&gt;
* [[C++ | C++]]&lt;br /&gt;
* [[Алгоритмы_и_структуры_данных | Алгоритмы и структуры данных]]&lt;br /&gt;
* [[DevDays]]&lt;br /&gt;
&lt;br /&gt;
== Архив за прошлые семестры ==&lt;br /&gt;
[[Осень_2011|Осенний семестр 2011]]&lt;br /&gt;
&lt;br /&gt;
== Практики ==&lt;br /&gt;
* [[ Темы практик |Темы практик, весна 2011-го года]]&lt;br /&gt;
* [[Темы практик, 5SE, осень 2011-го года ]]&lt;br /&gt;
&lt;br /&gt;
== Студенты ==&lt;br /&gt;
* [[2010|Набор 2010-го года (группа 604)]]&lt;br /&gt;
* [[2011|Набор 2011-го года]]&lt;br /&gt;
== Важные ссылки ==&lt;br /&gt;
Для 5-го курса:&lt;br /&gt;
* [http://code.google.com/p/spbau-cpp-2011/ cpp] - репозиторий для лабораторных по С++.&lt;br /&gt;
Для 6-го курса:&lt;br /&gt;
* [http://code.google.com/p/hpcource/ hpcource] - репозиторий для лабораторных по параллельному программированию.&lt;br /&gt;
* [http://code.google.com/p/mathvm/ mathvm] - репозиторий для лабораторных по виртуальным машинам.&lt;br /&gt;
* [http://code.google.com/p/spbau-network-2011/source/checkout spbau-network-2011] -  репозиторий для лабораторных по сетевым технологиям.&lt;br /&gt;
Для всех:&lt;br /&gt;
* [http://code.google.com/p/aptu-os/source/checkout aptu-os] - репозиторий для лабораторных по операционным системам.&lt;br /&gt;
&lt;br /&gt;
== Дополнительно == &lt;br /&gt;
* [[Q&amp;amp;A]]&lt;br /&gt;
* [[Мероприятия]]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1230</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1230"/>
				<updated>2012-03-31T15:34:36Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* MyFit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
* 20.03.2012 - Третья встреча.&lt;br /&gt;
** Обсудили структуру проекта. Определили &amp;quot;первые шаги&amp;quot; реализации.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: Презентация?, организация проекта, загрузка OSM формата, preprocessing reach points&lt;br /&gt;
** Сорокин: создать wiki, github, разобраться с визуализатором и написать алг. Дейкстры, презентация? &lt;br /&gt;
** Иванов: web интерфейс (client-side), работающий сервер обрабатывающий запросы поиска евклидова расстояния между 2мя точками&lt;br /&gt;
** ?- допишите на какую тему презентации плиз.&lt;br /&gt;
* 27.03.2012&lt;br /&gt;
** Была проведена презентация Артема Сорокина по алгоритмам на графах (? уточни плз. название алгоритмов)&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Иванов: закончить предыдущее задание. (ServerSide договорились делать на python'e, клиент уже почти написан на javascript'e с использованием openLayers api)&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 09.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 12.03.2012 ====&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3175 Башоров]&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3177 Опейкин]&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3176 Певзнер]&lt;br /&gt;
&lt;br /&gt;
==== 27.03.2012 ====&lt;br /&gt;
Митинг в EMC -- обсудили текущие задачи и тестовые задания. &amp;lt;br/&amp;gt;&lt;br /&gt;
Закоммитили рабочие версии кода по задачам, ожидаем ревью. &amp;lt;br/&amp;gt;&lt;br /&gt;
(задачи: [http://redmine.osll.spb.ru/issues/3175 Башоров], [http://redmine.osll.spb.ru/issues/3177 Опейкин], [http://redmine.osll.spb.ru/issues/3176 Певзнер])&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3z встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
** По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность.&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 - Всё хорошо.&lt;br /&gt;
* 19/mar/2011 - Снова всё хорошо - работаем.&lt;br /&gt;
* 26/mar/2011 - Семен у нас большой шутник, см. список задач на трекере&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: http://code.google.com/p/aptu-practice-code-duplication/ &amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фофанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
===28.02.2012 - Вводная встреча===&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фофанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
===06.03.2012 - Контрольная встреча===&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
===15.03.2012===&lt;br /&gt;
В рамках НИР необходимо ответить на три вопроса.&lt;br /&gt;
* Научная новизна&lt;br /&gt;
** Список существующих решений для нашей задачи.(Ярослав)&lt;br /&gt;
** Способы оценки существующих решений.(Маша) &lt;br /&gt;
** Библиотеки, для проведения испытания (исследуемая выборка) (Дмитрий)&lt;br /&gt;
* Рабочий прототип. Решено делать плагин на базе IntelliJ IDEA. Функциональность плагина будет выяснена дальше. &lt;br /&gt;
* Этапы разработки&lt;br /&gt;
Решено разбить разработку на три этапа.&lt;br /&gt;
# Определение требований к разрабатываемой программе.(3 недели)&lt;br /&gt;
# Создание прототипа (2 недели)&lt;br /&gt;
# Разработка плагина (4 недели)&lt;br /&gt;
## Основная функциональность (2 недели)&lt;br /&gt;
## Тестирование и доведение (2 неделя)&lt;br /&gt;
## Документирование и создание презентационных материалов (1 неделя параллельно со вторым пунктом.)&lt;br /&gt;
Итого 9 недель. Предположительный срок завершения проекта : 21 мая&lt;br /&gt;
&lt;br /&gt;
===21.03.2012===&lt;br /&gt;
*Возможные метрики для сравнения алгоритмов поиска дубликатов&lt;br /&gt;
** Время работы, используемая память, CPU&lt;br /&gt;
** Число правильно найденных дубликатов&lt;br /&gt;
*** Необходимо учитывать длину каждого дубликата, чтобы учитывать возможную вложенность. Длина дубликата определяется числом символов в нем.&lt;br /&gt;
** Число неправильно найденных дубликатов&lt;br /&gt;
*Метрики для алгоритмов замены дубликатов&lt;br /&gt;
** Объем кода, получающегося после замены найденных дубликатов на вызовы соответствующих методов&lt;br /&gt;
** Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла.&lt;br /&gt;
*Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже.&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Владислав Савельев&lt;br /&gt;
* Дмитрий Шеставин&lt;br /&gt;
* Сергей Казенюк&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
13 марта. Встреча с разработчиками проекта. Поставлены задачи.&lt;br /&gt;
: Владислав: Послушал лекцию Кирилла Владимировича про QT. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про QT и шаблон MVC, а также читать про QML.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;br /&gt;
* В язык для рестовых тестов добавлена возможность проверять хереды респонса&lt;br /&gt;
* Добавлен ui для администрирования приложение&lt;br /&gt;
* Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов.&lt;br /&gt;
&lt;br /&gt;
Отчет 19.03 - 25.03&lt;br /&gt;
* Написан классификатор, разбивающий сообщения об ошибках на кластеры.&lt;br /&gt;
* Добавлены новые возможности web-интерфейса для администрирования приложения.&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=LinuxKernelProgramming&amp;diff=1199</id>
		<title>LinuxKernelProgramming</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=LinuxKernelProgramming&amp;diff=1199"/>
				<updated>2012-03-24T19:06:13Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Подготовка к работе */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Кринкин Кирилл Владимирович&lt;br /&gt;
&lt;br /&gt;
== Подготовка к работе ==&lt;br /&gt;
&lt;br /&gt;
Все работы рекомендуется проводить в виртуальном окружении, для этого можно использовать [https://www.virtualbox.org/wiki/Downloads VirtualBox].&lt;br /&gt;
&lt;br /&gt;
Для сдачи работ должен использовать git на гуглкоде http://code.google.com/p/linux-kernel-course/&lt;br /&gt;
&lt;br /&gt;
Для этого скачиваем ядро, откатываемся к заранее определённому коммиту (c579bc7e316e7e3f3b56df5e17f623325caa9783)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git&lt;br /&gt;
git reset --hard c579bc7e316e7e3f3b56df5e17f623325caa9783&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
а в конце отсылаем результаты домашней работы в формате, полученном командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git format-patch c579bc7e316e7e3f3b56df5e17f623325caa9783 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка OpenSSH-Server в VirtualBox ===&lt;br /&gt;
Для того, чтобы получить возможность пользоваться буфером обмена (вставлять текст в консоль) и не ставить VirtualBox Guest Additions, можно установить в виртуальную машину OpenSSH-Server, и подключаться к нему любым SSH клиентом.&lt;br /&gt;
Для этого необходимо добавить новую сетевую карту в виртуальную машину. Это делается в настройках, ДО ВКЛЮЧЕНИЯ виртуальной машины: в настройках нужно перейти на страницу с настройками сети, перейти на вкладку со вторым адаптером (первый адаптер используется виртуальной машиной для доступа к интернет через NAT) и выбрать подключение &amp;quot;Host-only adapter&amp;quot; (смотри пример на картинке).&lt;br /&gt;
&lt;br /&gt;
[[Файл:HostOnlyAdapter.png|Настройка дополнительной сетевой карты в VirtualBox]]&lt;br /&gt;
&lt;br /&gt;
Если VirtualBox выдает ошибку при выборе &amp;quot;Host-only Adapter&amp;quot;, то вероятнее всего это связано с тем, что не установлен виртуальный адаптер. Добавить его можно в сетевых настройках VirtualBox (File-&amp;gt;Preferences-&amp;gt;Networks).&lt;br /&gt;
&lt;br /&gt;
[[Файл:VBoxSettings-Network-2012.png|Добавление виртуального адаптера]]&lt;br /&gt;
&lt;br /&gt;
Теперь необходимо включить на этой сетевой карте возможность получить IP адрес по DHCP. Для этого нужно выполнить следующие две команды (предполагается, что в системе до этого была только одна сетевая карта):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo 'allow-hotplug eth1' &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
echo 'iface eth1 inet dhcp' &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и установить OpenSSH-Server&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install openssh-server&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь можно из основной системы произвести подключение к виртуальной. Для этого нужно использовать SSH-клиент, такой как [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html  putty] которому нужно сообщить IP адрес виртуальной машины (его можно узнать командой ifconfig, и, скорее всего, это будет 192.168.56.101).&lt;br /&gt;
&lt;br /&gt;
[[Файл:PuttyConnect.png|Использование Putty для SSH соединения]]&lt;br /&gt;
&lt;br /&gt;
Важно помнить, что по умолчанию SSH не позволяет подключаться, используя учётную запись root. Если необходимы права суперпользователя, в начале подключитесь используя свою учётную запись на виртуальной машине (приняв перед этим сертификат безопасности), а потом используйте su.&lt;br /&gt;
&lt;br /&gt;
Так же рекомендуется в подпункте Translation пункта Window указывать UTF-8 в качестве Character set translation on received data - в частности, это необходимо для правильного отображения Midnight Commander.&lt;br /&gt;
&lt;br /&gt;
=== Сборка ядра 3.3.0-rc2 ===&lt;br /&gt;
Сборка ядра 3.3.0-rc2 (в соответствии с рекомендациями readme)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://www.kernel.org/pub/linux/kernel/v3.x/testing/linux-3.3-rc2.tar.bz2&lt;br /&gt;
su -c “apt-get install bzip2”&lt;br /&gt;
tar -xjf linux-3.3-rc2.tar.bz2&lt;br /&gt;
cd linux-3.3-rc2/&lt;br /&gt;
mkdir -p ~/build/linux-3.3-rc2&lt;br /&gt;
su -c “apt-get install libncurses5-dev”&lt;br /&gt;
make 0=~/build/linux-3.3-rc2 nconfig&lt;br /&gt;
make 0=~/build/linux-3.3-rc2&lt;br /&gt;
su -c “make 0=~/build/linux-3.3-rc2 modules_install install”&lt;br /&gt;
su -c “update-initramfs -c -k 3.3.0-rc2”&lt;br /&gt;
su -c “update-grub2”&lt;br /&gt;
shutdown -r now&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование patch ===&lt;br /&gt;
&lt;br /&gt;
== Создание модулей для ядра Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Введение ===&lt;br /&gt;
&lt;br /&gt;
Некоторые отличия Ядра от программ, выполняемых в пространстве пользователя:&lt;br /&gt;
* Ядро LINUX пишется с расчётом на компилятор GNU C (разработчики ориентируются на стандарт ISO C99). В коде можно использовать ассемблерные вставки (директива ''asm()''), аннотацию ветвления (''likely()'' - более вероятная ветвь, ''unlikely()'' - менее вероятная) и весьма странный [http://www.kernel.org/doc/Documentation/CodingStyle кодстайл].&lt;br /&gt;
* Ядро не имеет доступа к стандартным библиотекам языка программирования C. Это сделано из соображений увеличения скорости выполнения и уменьшения объёма кода.&lt;br /&gt;
* Отсутствует защита памяти. Если обычная программа предпримет попытку некорректного обращения с памятью, то ядро сможет выгрузить такую программу, но если само ядро предпримет такую же попытку, то его будет некому проконтролировать. Так же важно помнить об отсутствии замещения страниц, т.е. каждому байту, используемому ядром, соответствует байт реальной физической памяти.&lt;br /&gt;
* В ядре используются только целочисленные вычисления. Это тоже сделано для ускорения работы, т.к. операции с плавающей точкой значительно более ресурсоёмки (в частности, активнее используются регистры CPU).&lt;br /&gt;
* Объём стека фиксирован, и обычно равен двум страницам памяти (8 Кбайт для x86, и 16 Кбайт для x64). По этой причине не рекомендуется использовать рекурсию.&lt;br /&gt;
* Важным требованием является переносимость - код должен компилироваться на максимально большом количестве систем.&lt;br /&gt;
&lt;br /&gt;
Загружаемый объект ядра называется '''модулем'''.&lt;br /&gt;
Динамическая загрузка и выгрузка модулей по мере необходимости появилась благодаря Питеру Мак-Дональду и впервые была представлена в версии ядра 0.99.&amp;lt;br&amp;gt;&lt;br /&gt;
По своей структуре, модуль похож на обычную прогамму (так же имеется точка входа, и необходима компиляция в бинарный вид) но имеет прямой доступ к структурам и функциям ядра, в то время как обычные программы такой доступ могут получить только через обёртки.&lt;br /&gt;
&lt;br /&gt;
=== Сборка модуля как отдельного объекта (Kernel object) ===&lt;br /&gt;
&lt;br /&gt;
==== Код модуля ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/module.h&amp;gt; // Этот файл подключается в любом модуле по соглашению&lt;br /&gt;
#include &amp;lt;linux/kernel.h&amp;gt; // Содержит макросы для функции printk()&lt;br /&gt;
#include &amp;lt;linux/init.h&amp;gt; // Содержит определения макросов __init и __exit&lt;br /&gt;
void printHW(void) // Функция для вывода приветствия&lt;br /&gt;
{&lt;br /&gt;
    printk(&amp;quot;Hello, world\n&amp;quot;); // выводит сообщение на экран и в лог messages&lt;br /&gt;
}&lt;br /&gt;
EXPORT_SYMBOL(printHW); // Экспорт функций ядра - предоставляет доступ к функции другим модулям ядра&lt;br /&gt;
static int __init start(void) // Точка входа в модуль&lt;br /&gt;
{&lt;br /&gt;
    printHW(); // Вызов функции&lt;br /&gt;
    return 0; // в случае успешной загрузки возвращать нулевое значение&lt;br /&gt;
}&lt;br /&gt;
static void __exit stop(void) // Точка выхода&lt;br /&gt;
{&lt;br /&gt;
    //printk(&amp;quot;Module unloaded\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
module_init(start);&lt;br /&gt;
module_exit(stop);&lt;br /&gt;
MODULE_LICENSE(&amp;quot;GPL&amp;quot;); // Указывает на лицензию, под которой распространяется данный модуль&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== Сборка модуля (make) ====&lt;br /&gt;
&lt;br /&gt;
Файл с кодом модуля (myModule.c) должен находиться в одной папке с make-фалом, в котом должно быть написано&lt;br /&gt;
 obj-m += myModule.o&lt;br /&gt;
Тогда сборку модуля можно запустить командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -C ./linux-3.3-rc2 SUBDIRS=$PWD modules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Внимание, замените путь к исходным кодам ядра на тот, куда вы извлекли содержимое архива linux-3.3-rc2.tar.bz2&lt;br /&gt;
В итоге должен получиться файл модуля myModule.ko&lt;br /&gt;
&lt;br /&gt;
==== Загрузка модуля ====&lt;br /&gt;
&lt;br /&gt;
Теперь полученный модуль можно загрузить (эта команда требует прав суперпользователя). Для этого используется команда&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
insmod &amp;lt;имя модуля&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Список загруженных модулей хранится в /proc/modules (так что можно просмотреть этот файл cat /proc/modules) либо воспользоваться командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Выгружать модуль можно командой (также требует прав суперпользователя)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rmmod &amp;lt;имя модуля&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Примечания ====&lt;br /&gt;
&lt;br /&gt;
Результат работы модуля выводится в /var/log/syslog, для его просмотра рекомендуется на отдельной консоли использовать&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -f /var/log/syslog&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сборка модуля вместе с ядром (Kbuild) ===&lt;br /&gt;
&lt;br /&gt;
Модули для ядра можно собирать при помщи системы Kbuild. инструкции для сборки должны находиться в файле Kconfig.&lt;br /&gt;
&lt;br /&gt;
Что бы подключить наш Kconfig, нужно в файл linux-3.3-rc2/arch/x86/Kconfig.debug добавить строчку (рекомендуется сделать это где-нибудь в начле файла, например 6-й строкой)&lt;br /&gt;
 source &amp;quot;SPbAU/Kconfig&amp;quot;&lt;br /&gt;
Это позволит включать и отключать сборку наших модулей в меню '''Kernel hacking''', что в общем-то логично.&lt;br /&gt;
&lt;br /&gt;
Важно заметить, что если в makefile-файлах относительный путь задавался от места размещения самого файла, то в Kconfig - относительные пути строятся от корневого каталога дерева исходных кодов (в данном случае, от linux-3.3-rc2).&lt;br /&gt;
&lt;br /&gt;
Теперь, в дереве исходных кодов создаём каталог SPbAU, переносим туда (из предыдущего раздела) myModule.c и Makefile, а так же создаём файл Kconfig.&lt;br /&gt;
&lt;br /&gt;
==== Файл Kconfig ====&lt;br /&gt;
Файл Kconfig должен содержать следующий код&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
config SPbAU_KERNEL&lt;br /&gt;
	bool &amp;quot;Modules of students of the St. Petersburg Academic University of the Russian Academy of Sciences&amp;quot;&lt;br /&gt;
	default y&lt;br /&gt;
	---help---&lt;br /&gt;
	 SPbAU module list&lt;br /&gt;
&lt;br /&gt;
config SPbAU_KERNEL_PRINTHW&lt;br /&gt;
	tristate &amp;quot;The first module =)&amp;quot;&lt;br /&gt;
	depends on SPbAU_KERNEL&lt;br /&gt;
	default y&lt;br /&gt;
	---help---&lt;br /&gt;
	 Function prints the text &amp;quot;Hello, world&amp;quot; to the syslog file.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке мы объявляем о том, что хотим сделать раздел SPbAU_KERNEL (очень важно следить, что бы имена не перекрывались, по этому рационально использовать свой префикс, типа SPbAU). Потом мы указываем что пункт является bool, т.е. способен принимать значения Y или N (подробнее о значениях будет сказано чуть ниже), и определено имя этого раздела в меню. По умолчанию, раздел отмечен как ИСТИНА. Далее идёт справачная информация, которая может занимать несколько строк (необходимо соблюдать отступ в 1 пробел от основной линии).&lt;br /&gt;
&lt;br /&gt;
Потом мы описываем свой модуль. Ключевое слово ''tristate'' говорит о том, что этот пункт меню будет принимать одно из трёх возможных значения Y/M/N. Строчка depends on SPbAU_KERNEL показывает, что этот модуль не может быть установлен (и даже пункт не будет отображаться в меню), если в прерыщем пункте (SPbAU_KERNEL) стоит значение, отличное от истины. Это позволяет группировать различные элементы меню, уменьшая общую длинну списка.&lt;br /&gt;
&lt;br /&gt;
Возможные значения изначального состояния пунктов меню:&lt;br /&gt;
*Y - модуль вкомпилируется в ядро (это произайдёт успешно, если не допускать перекрытия имён точек входа)&lt;br /&gt;
*M - модуль компилируется отдельным файлом (kernel object)&lt;br /&gt;
*N - модуль не вкомпилируется&lt;br /&gt;
&lt;br /&gt;
Более подробно о языке формирования Kconfig файлов можно прочитать [http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt здесь].&lt;br /&gt;
&lt;br /&gt;
==== Файл Makefile ====&lt;br /&gt;
&lt;br /&gt;
В Makefile необходимо добавить строчку&lt;br /&gt;
 obj-$(SPbAU_KERNEL_PRINTHW) += SPbAU/&lt;br /&gt;
&lt;br /&gt;
В файле Kconfig для мы указали tristate, т.е. пользователь может выбрать M и собрать отдельно модуль. Тогда команда ''make modules_install'' разместит .ko-файл в указанной директории (SPbAU), которая будет размещена по адресу /lib/modules/3.3.0-rc2/kernel/, т.е. общий путь к модулю будет /lib/modules/3.3.0-rc2/kernel/SPbAU/myModule.ko&lt;br /&gt;
&lt;br /&gt;
==== Сборка ядра с модулем ====&lt;br /&gt;
Вернувшись в корень дерева исходных кодов, вызываем меню&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make menuconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это приведёт к выводу на экран графического меню&lt;br /&gt;
&lt;br /&gt;
[[Файл:Menuconfig.png‎|Вывод menuconfig]]&lt;br /&gt;
&lt;br /&gt;
Нас интересует раздел Kernel hacking, куда мы положили свои команды сборки модуля&lt;br /&gt;
&lt;br /&gt;
[[Файл:Menuconfig_Kernel_hacking.png‎|Вывод раздела Kernel hacking]]&lt;br /&gt;
&lt;br /&gt;
Отметка на пункте &amp;quot;Modules of students of the St. Petersburg Academic University of the Russian Academy of Sciences&amp;quot; позволяет скрывать все наши модули (в данном случае модуль всего 1), а отметка на пункте &amp;quot;The first module =)&amp;quot; может принимать как значение, соответствующее сборке отдального модуля, так и сборки внутри ядра.&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
* Разработка ядра Linux. Роберт Лав (http://www.ozon.ru/context/detail/id/2918313/)&lt;br /&gt;
* Ядро Linux. Д. Бовет, М. Чезати (http://www.ozon.ru/context/detail/id/3589107/)&lt;br /&gt;
* Linux Device Drivers, Джонатан Корбет, Алесандро Рубини, Грег Кроа-Хартман (http://lwn.net/Kernel/LDD3/) официаль&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1138</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1138"/>
				<updated>2012-03-13T21:01:20Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* MyFit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 09.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 12.03.2012 ===&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3175 Башоров]&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3177 Опейкин]&lt;br /&gt;
* [http://redmine.osll.spb.ru/issues/3176 Певзнер]&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3z встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 -&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фо`фанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
'''28.02.2012 - Вводная встреча'''&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фо`фанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
'''06.03.2012 - Контрольная встреча'''&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
'''15.03.2012 - Следующая встреча'''&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Владислав Савельев&lt;br /&gt;
* Дмитрий Шеставин&lt;br /&gt;
* Сергей Казенюк&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
'''13 марта'''&lt;br /&gt;
Встреча с разработчиками проекта. Поставлены задачи.&lt;br /&gt;
Владислав: Послушал лекцию Кирилла Владимировича про Кьют. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про Кьют и шаблон MVC, а также читать про QML.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1136</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1136"/>
				<updated>2012-03-13T06:50:22Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* MyFit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 09.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
==== 12.03.2012 ===&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://osll.spb.ru/issues/3175 Башоров]&lt;br /&gt;
* [http://osll.spb.ru/issues/3177 Опейкин]&lt;br /&gt;
* [http://osll.spb.ru/issues/3176 Певзнер]&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3z встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 -&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фо`фанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
'''28.02.2012 - Вводная встреча'''&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фо`фанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
'''06.03.2012 - Контрольная встреча'''&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
'''15.03.2012 - Следующая встреча'''&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Савельев Владислав&lt;br /&gt;
* Шеставин Дмитрий&lt;br /&gt;
* Казенюк Сергей&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
* Всё начнётся 5 марта.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1135</id>
		<title>НИР</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9D%D0%98%D0%A0&amp;diff=1135"/>
				<updated>2012-03-13T06:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* 9.03.2012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Карта дорог ==&lt;br /&gt;
Руководитель: Лесин&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Иванов Антон&lt;br /&gt;
* Сорокин Артем&lt;br /&gt;
* Кононенко Василий&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 6.03.2012 - Первая встреча.&lt;br /&gt;
** Задачи на неделю:&lt;br /&gt;
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта.&lt;br /&gt;
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.&lt;br /&gt;
&lt;br /&gt;
== MyFit ==&lt;br /&gt;
Руководитель: EMC&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&lt;br /&gt;
* [http://osll.spb.ru/projects/myfit/ трекер]&lt;br /&gt;
* [http://code.google.com/p/myfit/ репозиторий]&lt;br /&gt;
Команда:&lt;br /&gt;
* Опейкин Александр&lt;br /&gt;
* Певзнер Алина&lt;br /&gt;
* Башоров Залим&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 9.03.2012 ==== &lt;br /&gt;
Выполнено 2 тестовых задания на Java и на GWT.&amp;lt;BR&amp;gt;&lt;br /&gt;
Получены следующие задачи:&lt;br /&gt;
* [http://osll.spb.ru/issues/3155 Опейкин] (Готово)&lt;br /&gt;
* [http://osll.spb.ru/issues/3156 Певзнер] (Готово)&lt;br /&gt;
* [http://osll.spb.ru/issues/3157 Башоров] (Готово)&lt;br /&gt;
&lt;br /&gt;
== GPU ==&lt;br /&gt;
Руководитель: Рубен Артурович Гиргидов&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Коровин Алексей&lt;br /&gt;
* Лазарев Сергей&lt;br /&gt;
* Кормишин Сергей&lt;br /&gt;
Отчёт:&amp;lt;br&amp;gt;&lt;br /&gt;
*1я встреча нам были выданы вводные задачи: &lt;br /&gt;
** Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)&lt;br /&gt;
** Вспомнить &amp;quot;всё&amp;quot; о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)&lt;br /&gt;
** Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)&lt;br /&gt;
*2я встреча:&lt;br /&gt;
** Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.&lt;br /&gt;
** Выданы следующие задачи:&lt;br /&gt;
**# Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)&lt;br /&gt;
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)&lt;br /&gt;
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.)&lt;br /&gt;
*3z встреча:&lt;br /&gt;
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS&lt;br /&gt;
** Решили какие паттерны РВ будут в бенчмарках&lt;br /&gt;
&lt;br /&gt;
== Syrop ==&lt;br /&gt;
Руководитель: Смаль Александр Владимирович&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект: [https://github.com/avsmal/Syrop Syrop]&amp;lt;BR/&amp;gt;&lt;br /&gt;
Wiki проекта: [https://github.com/avsmal/Syrop/wiki Github] &amp;lt;BR/&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Кринкин Михаил&lt;br /&gt;
* Мартынов Семён&lt;br /&gt;
* Крашенинникова Ксения&lt;br /&gt;
* Великий Алексей&lt;br /&gt;
Отчёт:&lt;br /&gt;
* 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.&lt;br /&gt;
* 01/mar/2011 - Сode review.&lt;br /&gt;
* 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.&lt;br /&gt;
* 12/mar/2011 -&lt;br /&gt;
&lt;br /&gt;
== Дублирующий код ==&lt;br /&gt;
Руководитель: Иваницкий&amp;lt;BR&amp;gt;&lt;br /&gt;
Ссылка на проект:&amp;lt;BR&amp;gt;&lt;br /&gt;
Команда:&lt;br /&gt;
* Бандурин Дима (Project manager)&lt;br /&gt;
* Лепенькин Ярослав (Поиск дублирующего кода в C++)&lt;br /&gt;
* Фо`фанова Маша (Поиск дублирующего кода в Java)&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
&lt;br /&gt;
'''28.02.2012 - Вводная встреча'''&lt;br /&gt;
* Распределение ролей в команде&lt;br /&gt;
:Бандурин Дима (Project manager)&lt;br /&gt;
:Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода&lt;br /&gt;
:Фо`фанова Маша. Изучение специфики Java для поиск дублирующего кода.&lt;br /&gt;
* Уточнение функционала&lt;br /&gt;
* Организационные вопросы&lt;br /&gt;
&lt;br /&gt;
'''06.03.2012 - Контрольная встреча'''&lt;br /&gt;
* Изучение существующих решений &lt;br /&gt;
** Michael Wise's Greedy String Tiling algorithm&lt;br /&gt;
** Преобразование Барроуза-Уиллера&lt;br /&gt;
** Алгоритм Рабина-Карпа&lt;br /&gt;
** Механизм использующийся в IntelliJ IDEA&lt;br /&gt;
[[Файл:Solutions.pdf|краткое описание]]&lt;br /&gt;
&lt;br /&gt;
'''15.03.2012 - Следующая встреча'''&lt;br /&gt;
&lt;br /&gt;
== Конфигуратор контейнеров AndroidVM ==&lt;br /&gt;
Руководитель: Кринкин К.В.&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Савельев Владислав&lt;br /&gt;
* Шеставин Дмитрий&lt;br /&gt;
* Казенюк Сергей&lt;br /&gt;
&lt;br /&gt;
Отчёт:&lt;br /&gt;
* Всё начнётся 5 марта.&lt;br /&gt;
&lt;br /&gt;
== Поиск дублирующих сообщений об ошибках ==&lt;br /&gt;
&lt;br /&gt;
Команда:&lt;br /&gt;
* Ждан Анна&lt;br /&gt;
* Краско Евгений&lt;br /&gt;
* Кудинкин Алексей&lt;br /&gt;
&lt;br /&gt;
Отчет 03.03 - 11.03&lt;br /&gt;
* Настроено окружение: проект в MPS, проект в IDEA&lt;br /&gt;
* Описана модель данных на языке dnq&lt;br /&gt;
* Написан rest api для админки и для добавления в базу новых сообщений об ошибках&lt;br /&gt;
* Написан парсер сообщений об ошибках&lt;br /&gt;
* Написана первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)&lt;br /&gt;
* Написаны тесты на парсер и алгоритм сравнения&lt;br /&gt;
* Частично написаны тесты на rest api (jmeter)&lt;br /&gt;
&lt;br /&gt;
Отчет 11.03 - 18.03&lt;br /&gt;
* Улучшена первая версия алгоритма сравнения сообщений об ошибках&lt;br /&gt;
* Реализован альтернативный алгоритм сравнения сообщений об ошибках. &lt;br /&gt;
* Написаны тесты на оба алгоритма&lt;br /&gt;
* Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере&lt;br /&gt;
* Написаны тесты на парсер&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=LinuxKernelProgramming&amp;diff=1103</id>
		<title>LinuxKernelProgramming</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=LinuxKernelProgramming&amp;diff=1103"/>
				<updated>2012-03-06T23:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Установка OpenSSH-Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Лектор - Кринкин Кирилл Владимирович&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
== Установка OpenSSH-Server ==&lt;br /&gt;
Для того, чтобы получить возможность пользоваться буфером обмена (вставлять текст в консоль) и не ставить VirtualBox Guest Additions, можно установить в виртуальную машину OpenSSH-Server, и подключаться к нему любым SSH клиентом.&lt;br /&gt;
Для этого необходимо добавить новую сетевую карту в виртуальную машину. Это делается в настройках, ДО ВКЛЮЧЕНИЯ виртуальной машины: в настройках нужно перейти на страницу с настройками сети, перейти на вкладку со вторым адаптером (первый адаптер используется виртуальной машиной для доступа к интернет через NAT) и выбрать подключение &amp;quot;Host-only adapter&amp;quot; (смотри пример на картинке).&lt;br /&gt;
&lt;br /&gt;
[[Файл:HostOnlyAdapter.png|Настройка дополнительной сетевой карты в VirtualBox]]&lt;br /&gt;
&lt;br /&gt;
Если VirtualBox выдает ошибку при выборе &amp;quot;Host-only Adapter&amp;quot;, то вероятнее всего это связано с тем, что не установлен виртуальный адаптер. Добавить его можно в сетевых настройках VirtualBox (File-&amp;gt;Preferences-&amp;gt;Networks).&lt;br /&gt;
&lt;br /&gt;
[[Файл:VBoxSettings-Network-2012.png|Добавление виртуального адаптера]]&lt;br /&gt;
&lt;br /&gt;
Теперь необходимо включить на этой сетевой карте возможность получить IP адрес по DHCP. Для этого нужно выполнить следующие две команды (предполагается, что в системе до этого была только одна сетевая карта):&lt;br /&gt;
 echo 'allow-hotplug eth1' &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
 echo 'iface eth1 inet dhcp' &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
и установить OpenSSH-Server&lt;br /&gt;
 apt-get install openssh-server&lt;br /&gt;
&lt;br /&gt;
Теперь можно из основной системы произвести подключение к виртуальной. Для этого нужно использовать SSH-клиент, такой как [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html  putty] которому нужно сообщить IP адрес виртуальной машины (его можно узнать командой ifconfig, и, скорее всего, это будет 192.168.56.101).&lt;br /&gt;
&lt;br /&gt;
[[Файл:PuttyConnect.png|Использование Putty для SSH соединения]]&lt;br /&gt;
&lt;br /&gt;
Важно помнить, что по умолчанию SSH не позволяет подключаться, используя учётную запись root. Если необходимы права суперпользователя, в начале подключитесь используя свою учётную запись на виртуальной машине (приняв перед этим сертификат безопасности), а потом используйте su.&lt;br /&gt;
&lt;br /&gt;
Так же рекомендуется в подпункте Translation пункта Window указывать UTF-8 в качестве Character set translation on received data - в частности, это необходимо для правильного отображения Midnight Commander.&lt;br /&gt;
&lt;br /&gt;
== Сборка ядра 3.3.0-rc2 ==&lt;br /&gt;
Сборка ядра 3.3.0-rc2 (в соответствии с рекомендациями readme)&lt;br /&gt;
 wget https://www.kernel.org/pub/linux/kernel/v3.x/testing/linux-3.3-rc2.tar.bz2&lt;br /&gt;
 su -c “apt-get install bzip2”&lt;br /&gt;
 tar -xjf linux-3.3-rc2.tar.bz2&lt;br /&gt;
 cd linux-3.3-rc2/&lt;br /&gt;
 mkdir -p ~/build/linux-3.3-rc2&lt;br /&gt;
 su -c “apt-get install libncurses5-dev”&lt;br /&gt;
 make 0=~/build/linux-3.3-rc2 nconfig&lt;br /&gt;
 make 0=~/build/linux-3.3-rc2&lt;br /&gt;
 su -c “make 0=~/build/linux-3.3-rc2 modules_install install”&lt;br /&gt;
 su -c “update-initramfs -c -k 3.3.0-rc2”&lt;br /&gt;
 su -c “update-grub2”&lt;br /&gt;
 shutdown -r now&lt;br /&gt;
&lt;br /&gt;
== Написание модулей ==&lt;br /&gt;
&lt;br /&gt;
=== Введение ===&lt;br /&gt;
&lt;br /&gt;
Некоторые отличия Ядра от программ, выполняемых в пространстве пользователя:&lt;br /&gt;
* Ядро LINUX пишется с расчётом на компилятор GNU C (разработчики ориентируются на стандарт ISO C99). В коде можно использовать ассемблерные вставки (директива ''asm()''), аннотацию ветвления (''likely()'' - более вероятная ветвь, ''unlikely()'' - менее вероятная) и весьма странный [http://www.kernel.org/doc/Documentation/CodingStyle кодстайл].&lt;br /&gt;
* Ядро не имеет доступа к стандартным библиотекам языка программирования C. Это сделано из соображений увеличения скорости выполнения и уменьшения объёма кода.&lt;br /&gt;
* Отсутствует защита памяти. Если обычная программа предпримет попытку некорректного обращения с памятью, то ядро сможет выгрузить такую программу, но если само ядро предпримет такую же попытку, то его будет некому проконтролировать. Так же важно помнить об отсутствии замещения страниц, т.е. каждому байту, используемому ядром, соответствует байт реальной физической памяти.&lt;br /&gt;
* В ядре используются только целочисленные вычисления. Это тоже сделано для ускорения работы, т.к. операции с плавающей точкой значительно более ресурсоёмки (в частности, активнее используются регистры CPU).&lt;br /&gt;
* Объём стека фиксирован, и обычно равен двум страницам памяти (8 Кбайт для x86, и 16 Кбайт для x64). По этой причине не рекомендуется использовать рекурсию.&lt;br /&gt;
* Важным требованием является переносимость - код должен компилироваться на максимально большом количестве систем.&lt;br /&gt;
&lt;br /&gt;
Загружаемый объект ядра называется '''модулем'''.&lt;br /&gt;
Динамическая загрузка и выгрузка модулей по мере необходимости появилась благодаря Питеру Мак-Дональду и впервые была представлена в версии ядра 0.99.&amp;lt;br&amp;gt;&lt;br /&gt;
По своей структуре, модуль похож на обычную прогамму (так же имеется точка входа, и необходима компиляция в бинарный вид) но имеет прямой доступ к структурам и функциям ядра, в то время как обычные программы такой доступ могут получить только через обёртки.&lt;br /&gt;
&lt;br /&gt;
=== Код модуля ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/module.h&amp;gt; // Этот файл подключается в любом модуле по соглашению&lt;br /&gt;
#include &amp;lt;linux/kernel.h&amp;gt; // Содержит макросы для функции printk()&lt;br /&gt;
#include &amp;lt;linux/init.h&amp;gt; // Содержит определения макросов __init и __exit&lt;br /&gt;
void printHW(void) // Функция для вывода приветствия&lt;br /&gt;
{&lt;br /&gt;
    printk(&amp;quot;Hello, world\n&amp;quot;); // выводит сообщение на экран и в лог messages&lt;br /&gt;
}&lt;br /&gt;
EXPORT_SYMBOL(printHW); // Экспорт функций ядра - предоставляет доступ к функции другим модулям ядра&lt;br /&gt;
static int __init start(void) // Точка входа в модуль&lt;br /&gt;
{&lt;br /&gt;
    printHW(); // Вызов функции&lt;br /&gt;
    return 0; // в случае успешной загрузки возвращать нулевое значение&lt;br /&gt;
}&lt;br /&gt;
static void __exit stop(void) // Точка выхода&lt;br /&gt;
{&lt;br /&gt;
    //printk(&amp;quot;Module unloaded\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
module_init(start);&lt;br /&gt;
module_exit(stop);&lt;br /&gt;
MODULE_LICENSE(&amp;quot;GPL&amp;quot;); // Указывает на лицензию, под которой распространяется данный модуль&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Сборка модуля ===&lt;br /&gt;
&lt;br /&gt;
Файл с кодом модуля (myModule.c) должен находиться в одной папке с make-фалом, в котом должно быть написано&lt;br /&gt;
 obj-m += myModule.o&lt;br /&gt;
Тогда сборку модуля можно запустить командой&lt;br /&gt;
 make -C ./linux-3.3-rc2 SUBDIRS=$PWD modules&lt;br /&gt;
Внимание, замените путь к исходным кодам ядра на тот, куда вы извлекли содержимое архива linux-3.3-rc2.tar.bz2&lt;br /&gt;
В итоге должен получиться файл модуля myModule.ko&lt;br /&gt;
&lt;br /&gt;
=== После сборки модуля ===&lt;br /&gt;
&lt;br /&gt;
Теперь полученный модуль можно загрузить (эта команда требует прав суперпользователя). Для этого используется команда&lt;br /&gt;
 insmod &amp;lt;имя модуля&amp;gt;&lt;br /&gt;
Список загруженных модулей хранится в /proc/modules, так что можно просмотреть этот файл&lt;br /&gt;
 cat /proc/modules&lt;br /&gt;
или воспользоваться командой&lt;br /&gt;
 lsmod&lt;br /&gt;
Выгружать модуль можно командой (также требует прав суперпользователя)&lt;br /&gt;
 rmmod &amp;lt;имя модуля&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
* Разработка ядра Linux. Роберт Лав (http://www.ozon.ru/context/detail/id/2918313/)&lt;br /&gt;
* Ядро Linux. Д. Бовет, М. Чезати (http://www.ozon.ru/context/detail/id/3589107/)&lt;br /&gt;
* Linux Device Drivers, Джонатан Корбет, Алесандро Рубини, Грег Кроа-Хартман (http://lwn.net/Kernel/LDD3/) официаль&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:VBoxSettings-Network-2012.png&amp;diff=1102</id>
		<title>Файл:VBoxSettings-Network-2012.png</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:VBoxSettings-Network-2012.png&amp;diff=1102"/>
				<updated>2012-03-06T23:22:34Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1059</id>
		<title>IntroductionToProgrammingLanguages</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1059"/>
				<updated>2012-02-27T22:44:01Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Задание №3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Введение в языки программирования'''&lt;br /&gt;
&lt;br /&gt;
Лектор - Дмитрий Юрьевич [http://www.matmex.spb.ru/photoalbum/person_teachers_BulychevDY_1.html Булычев]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdC00UkVJekxYV0pYYVAxTmFXUkt6SVE Учёт посещаемости занятий]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdE05Q09iWlRqRzJ3d1FwTlJRSEkxbFE Учёт сдачи домашних заданий]&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/aptu-tex/source/browse/formallang/les1/les.tex Лекция №1] 10.02.2012&lt;br /&gt;
* 17.02.2012&lt;br /&gt;
В семантике ошибка: правило для переменной вместо&lt;br /&gt;
 [x](s)=s(x)&lt;br /&gt;
читать как&lt;br /&gt;
 [x](s)=[s(x)](s).&lt;br /&gt;
* 24.02.2012&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
=== Задание №1 ===&lt;br /&gt;
Cрок сдачи '''17 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать генерирующее расширения для программы возведения в степень.&lt;br /&gt;
&lt;br /&gt;
    int exp (int x, int n) {&lt;br /&gt;
       int y = 1;&lt;br /&gt;
       while (n) {&lt;br /&gt;
           if (n % 2) y *= x;&lt;br /&gt;
           n /= 2;&lt;br /&gt;
           x *= x;&lt;br /&gt;
       }&lt;br /&gt;
       return y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Это генерирующее расширение должно для своего единственного параметра n печатать остаточную программу, полученную специализацией функции exp на это значение n. Если это генерирующее расширение сохранит в себе какие-то черты exp, будет совсем хорошо.&lt;br /&gt;
&lt;br /&gt;
=== Задание №2 ===&lt;br /&gt;
Cрок сдачи '''24 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать принтер, который по абстрактному синтаксическому дереву программы печатает её представление в конкретном синтаксисе (который мы обсуждали) и интерпретатор (который вычисляет значение выражения в данном состоянии).&lt;br /&gt;
&lt;br /&gt;
Описание конкретного синтаксиса для представления программ на языке L:&lt;br /&gt;
# Программа представляется в виде последовательности слов. Разделителем служит перевод строки.&lt;br /&gt;
# Пусть E --- выражение, а |E| --- представление этого выражения в данном конкретном синтаксисе. Тогда:&lt;br /&gt;
#* переменная v представляется в виде &amp;quot;x&amp;quot; v (то есть символ x (как терминал), и собственно имя переменной на следующей строчке).&lt;br /&gt;
#* функция {x -&amp;gt; E} представляется в виде &amp;quot;f&amp;quot; x |E|&lt;br /&gt;
#* применение функции F E представляется в виде &amp;quot;a&amp;quot; |E| |F|&lt;br /&gt;
#* условное выражение C ? T : E представляется в виде &amp;quot;?&amp;quot; |C| |T| |E|&lt;br /&gt;
#* бинарная операция X o Y представляется в виде &amp;quot;@&amp;quot; |X| |Y|&lt;br /&gt;
#* константа i представляется в виде &amp;quot;!&amp;quot; i &lt;br /&gt;
# Контекст (список определений name1=expr1, name2=expr2 и т.д.) представляется как последовательность name1 |expr1| name2 |expr2| и т.д.&lt;br /&gt;
# Программа (то есть выражение E в контексте C) представляется как последовательность |C| &amp;quot;;&amp;quot; |E|.&lt;br /&gt;
# Все реализации д.з. №2 должны уметь читать файл, содержащий описание программы в таком синтаксисе (иначе невозможно ничего проверить).&lt;br /&gt;
&lt;br /&gt;
Пример 1. Выражение&lt;br /&gt;
 {x -&amp;gt; {y -&amp;gt; x + y}} 1 2&lt;br /&gt;
в данном конкретном синтаксисе выглядит так:&lt;br /&gt;
 a&lt;br /&gt;
 a&lt;br /&gt;
 f&lt;br /&gt;
 x&lt;br /&gt;
 f&lt;br /&gt;
 y&lt;br /&gt;
 @&lt;br /&gt;
 +&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 y&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
Пример 2. Программа&lt;br /&gt;
 fact = {n -&amp;gt; n ? n * (fact n-1) : 1};&lt;br /&gt;
 fact 4&lt;br /&gt;
будет представлена как&lt;br /&gt;
 fact&lt;br /&gt;
 f&lt;br /&gt;
 $0&lt;br /&gt;
 ?&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 @&lt;br /&gt;
 *&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 @&lt;br /&gt;
 -&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 ;&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 !&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
[http://narod.ru/disk/42015820001.bfed0d23b277fa721f7e86f27dc45e3d/monoMix.opt.html Программа], которая воспринимает программы в языке L в обычном синтаксисе, и печатает их представление в данной упрощенной форме. Бинарник для x86-linux, -h --- помощь. &lt;br /&gt;
&lt;br /&gt;
=== Задание №3 ===&lt;br /&gt;
Желаемый срок сдачи '''26 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b, c}, состоящего из всех слов, в которых количество букв a, b и c одинаково.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1}, состоящего из всех слов, в которых не встречается две единицы подряд.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1, *}, состоящего из всех слов вида sas, где s --- непустая строка нулей и единиц любой длины, а a --- непустая строка из звездочек любой длины.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех вида a^nb^m, где n &amp;lt;&amp;gt; m.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех слов, в которых количество букв a в два раза больше, чем количество букв b.&lt;br /&gt;
# Правда ли, что любой рекурсивный язык контекстно-зависим (обратное, как известно, верно)?&lt;br /&gt;
# Написать реализацию построения НКА по регулярной грамматике; написать интерпретатор этого автомата, который проверяет принадлежность заданного слова языку, и принтер, который печатает граф переходов автомата в формате .dot пакета graphviz.&lt;br /&gt;
# Написать грамматику для порождения выражений в алфавите {x, +, *, (, )},  где x играет роль операндов, * и + --- левоассоциативные операции (то есть E+F+G означает ((E+F)+G)), операция * связывает операнды сильнее, чем + (то есть E+F*G означает E+(F*G)), причем порождаемые выражения НЕ ДОЛЖНЫ содержать ненужных скобок (а именно, например, выражение x+(x*x) не должно порождаться)&lt;br /&gt;
----&lt;br /&gt;
[http://bashor.github.com/GrGen/GrGen.html Генератор] Залима для проверки 1-5 пунктов.&lt;br /&gt;
Коментарии:&lt;br /&gt;
 T -- терминальные символы. Пробелы и запятые игнорируются, т.е. abc == a b c == a b, c&lt;br /&gt;
 Все остальные символы считаются нетерминальными&lt;br /&gt;
 R -- правила преобразования вида: From : to&lt;br /&gt;
 пробелы и пустые строки игнорируются.&lt;br /&gt;
 Кроме того, можно указать свой чекер на JavaScript. Например:&lt;br /&gt;
 1) return countChar(st, 'a') == countChar(st, 'b') &amp;amp;&amp;amp; countChar(st, 'a') == countChar(st, 'c');&lt;br /&gt;
 2) return st.indexOf(&amp;quot;11&amp;quot;) == -1;&lt;br /&gt;
 3) var matches = /^([10]+)[*]+([10]+)$/g.exec(st);&lt;br /&gt;
 return matches[1] == matches[2] &amp;amp;&amp;amp; matches.length == 3;&lt;br /&gt;
 4) var matches = /^(a*)(b*)$/g.exec(st);&lt;br /&gt;
 return matches.length == 3 &amp;amp;&amp;amp; matches[1].length != matches[2].length;&lt;br /&gt;
 5) return countChar(st, 'a') == countChar(st, 'b') * 2;&lt;br /&gt;
 init -- (пере)инициализация&lt;br /&gt;
 step -- выполнение &amp;quot;одного шага&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
# Языки программирования, синтаксис, семантика, прагматика. Когнитивные особенности человеческого мышления и их влияние на развитие языков программирования.&lt;br /&gt;
# Языки программирования в ретроспективе. Процедурное, объектно-ориентированное, логическое и функциональное программирование. Предметно-ориентированные языки. Языки вне классификации. &lt;br /&gt;
# Абстрактный и конкретный синтаксис. Статическая и динамическая семантика. Компиляция и интерпретация. Проекции Футамуры-Ершова.&lt;br /&gt;
# Генеративный и аналитический подходы к описанию синтаксиса. Формальные грамматики, иерархия Хомского. &lt;br /&gt;
# Регулярные языки и конечные автоматы. Применение регулярных выражений в народном хозяйстве (grep/sed/awk) и для лексического анализа (lex/flex). Отсутствие бесконтекстной лексики в реальных языках программирования.&lt;br /&gt;
# Контекстно-свободные грамматики. Нормальные формы Хомского и Грейбах. Алгоритмы Эрли и Кока-Янгера-Касами. Неконтекстосвободность реальных языков программирования.&lt;br /&gt;
# Нисходящий анализ. Возврат и заглядывание вперед. Класс языков LL(k). Рекурсивный спуск, магазинные автоматы, парсер-комбинаторы, PEG, &amp;quot;скаредный&amp;quot; разбор. GLL. Инструменты нисходящего анализа (Parsec, ANTLR и пр.)&lt;br /&gt;
# Восходящий анализ, классы LR(k) и LALR(k). GLR. Инструменты восходящего анализа (yacc/bison).&lt;br /&gt;
# Двухуровневые и атрибутные грамматики, вопросы применения на практике.&lt;br /&gt;
# Идентификация. Область видимости и область действия. Статическое и динамическое, раннее и позднее связывание. &lt;br /&gt;
# Энергичность и ленивость. Call-by-name, call-by-value, call-by-reference.&lt;br /&gt;
# Строгость, чистота, прозрачность по ссылкам.&lt;br /&gt;
# Языки с типами и языки без типов. Статическая и динамическая типизация. &lt;br /&gt;
# Номинальная и структурная эквивалентность типов. Простейшие конструкторы.&lt;br /&gt;
# Типы с кванторами и что они означают. Универсальные и экзистенциальные типы. &lt;br /&gt;
# Subtyping. Структурный и номинальный subtyping. &lt;br /&gt;
# Динамическая семантика языков. Операционная семантика большого и малого шага.&lt;br /&gt;
# Денотационный подход к описанию семантики. &lt;br /&gt;
# Аксиоматическая семантика. Верификация программ. Design by contract.&lt;br /&gt;
# Когерентность языков программирования и машинных архитектур. Языково-специфичные архитектуры, виртуальные машины и JIT-компиляция.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Структура рабочей программы. Код, данные, библиотеки, поддержка времени исполнения.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Задача генерации кода. Генерация кода путем интерпретации.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Восходящее переписывание деревьев и динамическое программирование (BURS).&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Алгоритмы распределения регистров. Распределение регистров и раскраска графов.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Параллелизм на уровне инструкций. Планирование инструкций.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока управления. Глубинное остовное дерево, доминирование, анализ циклической структуры программ. Сводимость. Устранение недостижимого кода, оптимальная линеаризация.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока данных. Полурешеточная модель. RD, LV, AE, UEU. Устраненние мертвого кода, экономия общих подвыражений, понижение силы операций, чистка циклов.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* - вопросы будут рассмотрены при наличии времени.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
# S.Muchnik. Advanced Compiler Design &amp;amp; Implementation. Academic Press, Morgan Kaufmann, 1998.&lt;br /&gt;
# А.Ахо, Р.Сети, С.Ульман. Компиляторы: принципы, технологии, инструменты. Вильямс, 2003.&lt;br /&gt;
# А.Ахо, С.Ульман. Теория синтаксического анализа, перевода и компиляции. Том 1. М., &amp;quot;Мир&amp;quot;, 1978.&lt;br /&gt;
# F.Nielsen. Principles of Program Analysis. Springer, 2005.&lt;br /&gt;
# F.Nielse, H-R.Nielsen. Semantics with Applications. Wiley Professional Computing, 1992.&lt;br /&gt;
# B.Pierce. Types and Programming Languages. MIT Press, 2002.&lt;br /&gt;
# T.Пратт. Языки программирования: разработка и реализация. 1978.&lt;br /&gt;
# Б.К.Мартыненко. Языки и трансляции. Из-во СПбГУ, 2008.&lt;br /&gt;
&lt;br /&gt;
== Список групп для выполнения задач ==&lt;br /&gt;
&lt;br /&gt;
# [Haskell] Мартынов Семён, Башоров Залим, Казенюк Сергей, Витвицкий Александр, Тугарёв Денис.&lt;br /&gt;
# Кринкин Михаил, Лазарев Сергей, Фофанова Мария, Бандурин Дмитрий, Ждан Анна&lt;br /&gt;
# [JAVA] Сорокин Артём, Коровин Алексей, Опейкин Александр, Шеставин Дмитрий, Владислав Савельев&lt;br /&gt;
# [C++] Иванов Антон, Крашенинникова Ксения, Лепенькин Ярослав, Диевский Алексей, Кормишин Сергей&lt;br /&gt;
# Певзнер Алина, Князев Сергей&lt;br /&gt;
# [JAVA] Великий Алексей.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* Не более 5 человек в каждой группе; старайтесь выравнивать группы по уровню, и не повторяться в выборе языков.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://caml.inria.fr/ocaml/release.en.html Latest OCaml release]&lt;br /&gt;
* [http://caml.inria.fr/pub/docs/manual-ocaml/index.html Documentation and user’s manual]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1058</id>
		<title>IntroductionToProgrammingLanguages</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1058"/>
				<updated>2012-02-27T22:21:50Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Задание №3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Введение в языки программирования'''&lt;br /&gt;
&lt;br /&gt;
Лектор - Дмитрий Юрьевич [http://www.matmex.spb.ru/photoalbum/person_teachers_BulychevDY_1.html Булычев]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdC00UkVJekxYV0pYYVAxTmFXUkt6SVE Учёт посещаемости занятий]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdE05Q09iWlRqRzJ3d1FwTlJRSEkxbFE Учёт сдачи домашних заданий]&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/aptu-tex/source/browse/formallang/les1/les.tex Лекция №1] 10.02.2012&lt;br /&gt;
* 17.02.2012&lt;br /&gt;
В семантике ошибка: правило для переменной вместо&lt;br /&gt;
 [x](s)=s(x)&lt;br /&gt;
читать как&lt;br /&gt;
 [x](s)=[s(x)](s).&lt;br /&gt;
* 24.02.2012&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
=== Задание №1 ===&lt;br /&gt;
Cрок сдачи '''17 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать генерирующее расширения для программы возведения в степень.&lt;br /&gt;
&lt;br /&gt;
    int exp (int x, int n) {&lt;br /&gt;
       int y = 1;&lt;br /&gt;
       while (n) {&lt;br /&gt;
           if (n % 2) y *= x;&lt;br /&gt;
           n /= 2;&lt;br /&gt;
           x *= x;&lt;br /&gt;
       }&lt;br /&gt;
       return y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Это генерирующее расширение должно для своего единственного параметра n печатать остаточную программу, полученную специализацией функции exp на это значение n. Если это генерирующее расширение сохранит в себе какие-то черты exp, будет совсем хорошо.&lt;br /&gt;
&lt;br /&gt;
=== Задание №2 ===&lt;br /&gt;
Cрок сдачи '''24 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать принтер, который по абстрактному синтаксическому дереву программы печатает её представление в конкретном синтаксисе (который мы обсуждали) и интерпретатор (который вычисляет значение выражения в данном состоянии).&lt;br /&gt;
&lt;br /&gt;
Описание конкретного синтаксиса для представления программ на языке L:&lt;br /&gt;
# Программа представляется в виде последовательности слов. Разделителем служит перевод строки.&lt;br /&gt;
# Пусть E --- выражение, а |E| --- представление этого выражения в данном конкретном синтаксисе. Тогда:&lt;br /&gt;
#* переменная v представляется в виде &amp;quot;x&amp;quot; v (то есть символ x (как терминал), и собственно имя переменной на следующей строчке).&lt;br /&gt;
#* функция {x -&amp;gt; E} представляется в виде &amp;quot;f&amp;quot; x |E|&lt;br /&gt;
#* применение функции F E представляется в виде &amp;quot;a&amp;quot; |E| |F|&lt;br /&gt;
#* условное выражение C ? T : E представляется в виде &amp;quot;?&amp;quot; |C| |T| |E|&lt;br /&gt;
#* бинарная операция X o Y представляется в виде &amp;quot;@&amp;quot; |X| |Y|&lt;br /&gt;
#* константа i представляется в виде &amp;quot;!&amp;quot; i &lt;br /&gt;
# Контекст (список определений name1=expr1, name2=expr2 и т.д.) представляется как последовательность name1 |expr1| name2 |expr2| и т.д.&lt;br /&gt;
# Программа (то есть выражение E в контексте C) представляется как последовательность |C| &amp;quot;;&amp;quot; |E|.&lt;br /&gt;
# Все реализации д.з. №2 должны уметь читать файл, содержащий описание программы в таком синтаксисе (иначе невозможно ничего проверить).&lt;br /&gt;
&lt;br /&gt;
Пример 1. Выражение&lt;br /&gt;
 {x -&amp;gt; {y -&amp;gt; x + y}} 1 2&lt;br /&gt;
в данном конкретном синтаксисе выглядит так:&lt;br /&gt;
 a&lt;br /&gt;
 a&lt;br /&gt;
 f&lt;br /&gt;
 x&lt;br /&gt;
 f&lt;br /&gt;
 y&lt;br /&gt;
 @&lt;br /&gt;
 +&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 y&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
Пример 2. Программа&lt;br /&gt;
 fact = {n -&amp;gt; n ? n * (fact n-1) : 1};&lt;br /&gt;
 fact 4&lt;br /&gt;
будет представлена как&lt;br /&gt;
 fact&lt;br /&gt;
 f&lt;br /&gt;
 $0&lt;br /&gt;
 ?&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 @&lt;br /&gt;
 *&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 @&lt;br /&gt;
 -&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 ;&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 !&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
[http://narod.ru/disk/42015820001.bfed0d23b277fa721f7e86f27dc45e3d/monoMix.opt.html Программа], которая воспринимает программы в языке L в обычном синтаксисе, и печатает их представление в данной упрощенной форме. Бинарник для x86-linux, -h --- помощь. &lt;br /&gt;
&lt;br /&gt;
=== Задание №3 ===&lt;br /&gt;
Желаемый срок сдачи '''26 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b, c}, состоящего из всех слов, в которых количество букв a, b и c одинаково.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1}, состоящего из всех слов, в которых не встречается две единицы подряд.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1, *}, состоящего из всех слов вида sas, где s --- непустая строка нулей и единиц любой длины, а a --- непустая строка из звездочек любой длины.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех вида a^nb^m, где n &amp;lt;&amp;gt; m.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех слов, в которых количество букв a в два раза больше, чем количество букв b.&lt;br /&gt;
# Правда ли, что любой рекурсивный язык контекстно-зависим (обратное, как известно, верно)?&lt;br /&gt;
# Написать реализацию построения НКА по регулярной грамматике; написать интерпретатор этого автомата, который проверяет принадлежность заданного слова языку, и принтер, который печатает граф переходов автомата в формате .dot пакета graphviz.&lt;br /&gt;
# Написать грамматику для порождения выражений в алфавите {x, +, *, (, )},  где x играет роль операндов, * и + --- левоассоциативные операции (то есть E+F+G означает ((E+F)+G)), операция * связывает операнды сильнее, чем + (то есть E+F*G означает E+(F*G)), причем порождаемые выражения НЕ ДОЛЖНЫ содержать ненужных скобок (а именно, например, выражение x+(x*x) не должно порождаться)&lt;br /&gt;
----&lt;br /&gt;
[http://bashor.github.com/GrGen/GrGen.html Генератор] Залима для проверки 1-5 пунктов.&lt;br /&gt;
Коментарии:&lt;br /&gt;
 T -- терминальные символы. Пробелы и запятые игнорируются, т.е. abc == a b c == a b, c&lt;br /&gt;
 Все остальные символы считаются нетерминальными&lt;br /&gt;
 R -- правила преобразования вида: From : to&lt;br /&gt;
 пробелы и пустые строки игнорируются.&lt;br /&gt;
 Кроме того, можно указать свой чекер на JavaScript. Например:&lt;br /&gt;
 1) return countChar(st, 'a') == countChar(st, 'b') &amp;amp;&amp;amp; countChar(st, 'a') == countChar(st, 'c');&lt;br /&gt;
 2) return st.indexOf(&amp;quot;11&amp;quot;) == -1;&lt;br /&gt;
 3) var matches = /^([10]+)[*]+([10]+)$/g.exec(st);&lt;br /&gt;
 return matches[1] == matches[2] &amp;amp;&amp;amp; matches.length == 3;&lt;br /&gt;
 4) var matches = /^(a*)(b*)$/g.exec(st);&lt;br /&gt;
return matches.length == 3 &amp;amp;&amp;amp; matches[1].length != matches[2].length;&lt;br /&gt;
 5) return countChar(st, 'a') == countChar(st, 'b') * 2;&lt;br /&gt;
 init -- (пере)инициализация&lt;br /&gt;
 step -- выполнение &amp;quot;одного шага&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
# Языки программирования, синтаксис, семантика, прагматика. Когнитивные особенности человеческого мышления и их влияние на развитие языков программирования.&lt;br /&gt;
# Языки программирования в ретроспективе. Процедурное, объектно-ориентированное, логическое и функциональное программирование. Предметно-ориентированные языки. Языки вне классификации. &lt;br /&gt;
# Абстрактный и конкретный синтаксис. Статическая и динамическая семантика. Компиляция и интерпретация. Проекции Футамуры-Ершова.&lt;br /&gt;
# Генеративный и аналитический подходы к описанию синтаксиса. Формальные грамматики, иерархия Хомского. &lt;br /&gt;
# Регулярные языки и конечные автоматы. Применение регулярных выражений в народном хозяйстве (grep/sed/awk) и для лексического анализа (lex/flex). Отсутствие бесконтекстной лексики в реальных языках программирования.&lt;br /&gt;
# Контекстно-свободные грамматики. Нормальные формы Хомского и Грейбах. Алгоритмы Эрли и Кока-Янгера-Касами. Неконтекстосвободность реальных языков программирования.&lt;br /&gt;
# Нисходящий анализ. Возврат и заглядывание вперед. Класс языков LL(k). Рекурсивный спуск, магазинные автоматы, парсер-комбинаторы, PEG, &amp;quot;скаредный&amp;quot; разбор. GLL. Инструменты нисходящего анализа (Parsec, ANTLR и пр.)&lt;br /&gt;
# Восходящий анализ, классы LR(k) и LALR(k). GLR. Инструменты восходящего анализа (yacc/bison).&lt;br /&gt;
# Двухуровневые и атрибутные грамматики, вопросы применения на практике.&lt;br /&gt;
# Идентификация. Область видимости и область действия. Статическое и динамическое, раннее и позднее связывание. &lt;br /&gt;
# Энергичность и ленивость. Call-by-name, call-by-value, call-by-reference.&lt;br /&gt;
# Строгость, чистота, прозрачность по ссылкам.&lt;br /&gt;
# Языки с типами и языки без типов. Статическая и динамическая типизация. &lt;br /&gt;
# Номинальная и структурная эквивалентность типов. Простейшие конструкторы.&lt;br /&gt;
# Типы с кванторами и что они означают. Универсальные и экзистенциальные типы. &lt;br /&gt;
# Subtyping. Структурный и номинальный subtyping. &lt;br /&gt;
# Динамическая семантика языков. Операционная семантика большого и малого шага.&lt;br /&gt;
# Денотационный подход к описанию семантики. &lt;br /&gt;
# Аксиоматическая семантика. Верификация программ. Design by contract.&lt;br /&gt;
# Когерентность языков программирования и машинных архитектур. Языково-специфичные архитектуры, виртуальные машины и JIT-компиляция.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Структура рабочей программы. Код, данные, библиотеки, поддержка времени исполнения.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Задача генерации кода. Генерация кода путем интерпретации.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Восходящее переписывание деревьев и динамическое программирование (BURS).&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Алгоритмы распределения регистров. Распределение регистров и раскраска графов.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Параллелизм на уровне инструкций. Планирование инструкций.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока управления. Глубинное остовное дерево, доминирование, анализ циклической структуры программ. Сводимость. Устранение недостижимого кода, оптимальная линеаризация.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока данных. Полурешеточная модель. RD, LV, AE, UEU. Устраненние мертвого кода, экономия общих подвыражений, понижение силы операций, чистка циклов.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* - вопросы будут рассмотрены при наличии времени.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
# S.Muchnik. Advanced Compiler Design &amp;amp; Implementation. Academic Press, Morgan Kaufmann, 1998.&lt;br /&gt;
# А.Ахо, Р.Сети, С.Ульман. Компиляторы: принципы, технологии, инструменты. Вильямс, 2003.&lt;br /&gt;
# А.Ахо, С.Ульман. Теория синтаксического анализа, перевода и компиляции. Том 1. М., &amp;quot;Мир&amp;quot;, 1978.&lt;br /&gt;
# F.Nielsen. Principles of Program Analysis. Springer, 2005.&lt;br /&gt;
# F.Nielse, H-R.Nielsen. Semantics with Applications. Wiley Professional Computing, 1992.&lt;br /&gt;
# B.Pierce. Types and Programming Languages. MIT Press, 2002.&lt;br /&gt;
# T.Пратт. Языки программирования: разработка и реализация. 1978.&lt;br /&gt;
# Б.К.Мартыненко. Языки и трансляции. Из-во СПбГУ, 2008.&lt;br /&gt;
&lt;br /&gt;
== Список групп для выполнения задач ==&lt;br /&gt;
&lt;br /&gt;
# [Haskell] Мартынов Семён, Башоров Залим, Казенюк Сергей, Витвицкий Александр, Тугарёв Денис.&lt;br /&gt;
# Кринкин Михаил, Лазарев Сергей, Фофанова Мария, Бандурин Дмитрий, Ждан Анна&lt;br /&gt;
# [JAVA] Сорокин Артём, Коровин Алексей, Опейкин Александр, Шеставин Дмитрий, Владислав Савельев&lt;br /&gt;
# [C++] Иванов Антон, Крашенинникова Ксения, Лепенькин Ярослав, Диевский Алексей, Кормишин Сергей&lt;br /&gt;
# Певзнер Алина, Князев Сергей&lt;br /&gt;
# [JAVA] Великий Алексей.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* Не более 5 человек в каждой группе; старайтесь выравнивать группы по уровню, и не повторяться в выборе языков.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://caml.inria.fr/ocaml/release.en.html Latest OCaml release]&lt;br /&gt;
* [http://caml.inria.fr/pub/docs/manual-ocaml/index.html Documentation and user’s manual]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1057</id>
		<title>IntroductionToProgrammingLanguages</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1057"/>
				<updated>2012-02-27T21:30:14Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Задание №3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Введение в языки программирования'''&lt;br /&gt;
&lt;br /&gt;
Лектор - Дмитрий Юрьевич [http://www.matmex.spb.ru/photoalbum/person_teachers_BulychevDY_1.html Булычев]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdC00UkVJekxYV0pYYVAxTmFXUkt6SVE Учёт посещаемости занятий]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdE05Q09iWlRqRzJ3d1FwTlJRSEkxbFE Учёт сдачи домашних заданий]&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/aptu-tex/source/browse/formallang/les1/les.tex Лекция №1] 10.02.2012&lt;br /&gt;
* 17.02.2012&lt;br /&gt;
В семантике ошибка: правило для переменной вместо&lt;br /&gt;
 [x](s)=s(x)&lt;br /&gt;
читать как&lt;br /&gt;
 [x](s)=[s(x)](s).&lt;br /&gt;
* 24.02.2012&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
=== Задание №1 ===&lt;br /&gt;
Cрок сдачи '''17 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать генерирующее расширения для программы возведения в степень.&lt;br /&gt;
&lt;br /&gt;
    int exp (int x, int n) {&lt;br /&gt;
       int y = 1;&lt;br /&gt;
       while (n) {&lt;br /&gt;
           if (n % 2) y *= x;&lt;br /&gt;
           n /= 2;&lt;br /&gt;
           x *= x;&lt;br /&gt;
       }&lt;br /&gt;
       return y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Это генерирующее расширение должно для своего единственного параметра n печатать остаточную программу, полученную специализацией функции exp на это значение n. Если это генерирующее расширение сохранит в себе какие-то черты exp, будет совсем хорошо.&lt;br /&gt;
&lt;br /&gt;
=== Задание №2 ===&lt;br /&gt;
Cрок сдачи '''24 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать принтер, который по абстрактному синтаксическому дереву программы печатает её представление в конкретном синтаксисе (который мы обсуждали) и интерпретатор (который вычисляет значение выражения в данном состоянии).&lt;br /&gt;
&lt;br /&gt;
Описание конкретного синтаксиса для представления программ на языке L:&lt;br /&gt;
# Программа представляется в виде последовательности слов. Разделителем служит перевод строки.&lt;br /&gt;
# Пусть E --- выражение, а |E| --- представление этого выражения в данном конкретном синтаксисе. Тогда:&lt;br /&gt;
#* переменная v представляется в виде &amp;quot;x&amp;quot; v (то есть символ x (как терминал), и собственно имя переменной на следующей строчке).&lt;br /&gt;
#* функция {x -&amp;gt; E} представляется в виде &amp;quot;f&amp;quot; x |E|&lt;br /&gt;
#* применение функции F E представляется в виде &amp;quot;a&amp;quot; |E| |F|&lt;br /&gt;
#* условное выражение C ? T : E представляется в виде &amp;quot;?&amp;quot; |C| |T| |E|&lt;br /&gt;
#* бинарная операция X o Y представляется в виде &amp;quot;@&amp;quot; |X| |Y|&lt;br /&gt;
#* константа i представляется в виде &amp;quot;!&amp;quot; i &lt;br /&gt;
# Контекст (список определений name1=expr1, name2=expr2 и т.д.) представляется как последовательность name1 |expr1| name2 |expr2| и т.д.&lt;br /&gt;
# Программа (то есть выражение E в контексте C) представляется как последовательность |C| &amp;quot;;&amp;quot; |E|.&lt;br /&gt;
# Все реализации д.з. №2 должны уметь читать файл, содержащий описание программы в таком синтаксисе (иначе невозможно ничего проверить).&lt;br /&gt;
&lt;br /&gt;
Пример 1. Выражение&lt;br /&gt;
 {x -&amp;gt; {y -&amp;gt; x + y}} 1 2&lt;br /&gt;
в данном конкретном синтаксисе выглядит так:&lt;br /&gt;
 a&lt;br /&gt;
 a&lt;br /&gt;
 f&lt;br /&gt;
 x&lt;br /&gt;
 f&lt;br /&gt;
 y&lt;br /&gt;
 @&lt;br /&gt;
 +&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 y&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
Пример 2. Программа&lt;br /&gt;
 fact = {n -&amp;gt; n ? n * (fact n-1) : 1};&lt;br /&gt;
 fact 4&lt;br /&gt;
будет представлена как&lt;br /&gt;
 fact&lt;br /&gt;
 f&lt;br /&gt;
 $0&lt;br /&gt;
 ?&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 @&lt;br /&gt;
 *&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 @&lt;br /&gt;
 -&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 ;&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 !&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
[http://narod.ru/disk/42015820001.bfed0d23b277fa721f7e86f27dc45e3d/monoMix.opt.html Программа], которая воспринимает программы в языке L в обычном синтаксисе, и печатает их представление в данной упрощенной форме. Бинарник для x86-linux, -h --- помощь. &lt;br /&gt;
&lt;br /&gt;
=== Задание №3 ===&lt;br /&gt;
Желаемый срок сдачи '''26 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b, c}, состоящего из всех слов, в которых количество букв a, b и c одинаково.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1}, состоящего из всех слов, в которых не встречается две единицы подряд.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1, *}, состоящего из всех слов вида sas, где s --- непустая строка нулей и единиц любой длины, а a --- непустая строка из звездочек любой длины.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех вида a^nb^m, где n &amp;lt;&amp;gt; m.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех слов, в которых количество букв a в два раза больше, чем количество букв b.&lt;br /&gt;
# Правда ли, что любой рекурсивный язык контекстно-зависим (обратное, как известно, верно)?&lt;br /&gt;
# Написать реализацию построения НКА по регулярной грамматике; написать интерпретатор этого автомата, который проверяет принадлежность заданного слова языку, и принтер, который печатает граф переходов автомата в формате .dot пакета graphviz.&lt;br /&gt;
# Написать грамматику для порождения выражений в алфавите {x, +, *, (, )},  где x играет роль операндов, * и + --- левоассоциативные операции (то есть E+F+G означает ((E+F)+G)), операция * связывает операнды сильнее, чем + (то есть E+F*G означает E+(F*G)), причем порождаемые выражения НЕ ДОЛЖНЫ содержать ненужных скобок (а именно, например, выражение x+(x*x) не должно порождаться)&lt;br /&gt;
----&lt;br /&gt;
[http://bashor.github.com/GrGen/GrGen.html Генератор] Залима для проверки 1-5 пунктов.&lt;br /&gt;
Коментарии:&lt;br /&gt;
 T -- терминальные символы. Пробелы и запятые игнорируются, т.е. abc == a b c == a b, c&lt;br /&gt;
 Все остальные символы считаются нетерминальными&lt;br /&gt;
 R -- правила преобразования вида: From : to&lt;br /&gt;
 пробелы и пустые строки игнорируются.&lt;br /&gt;
 Кроме того, можно указать свой чекер на JavaScript. Например:&lt;br /&gt;
 1) return countChar(st, 'a') == countChar(st, 'b') &amp;amp;&amp;amp; countChar(st, 'a') == countChar(st, 'c');&lt;br /&gt;
 2) return st.indexOf(&amp;quot;11&amp;quot;) == -1;&lt;br /&gt;
 3) var matches = /^([10]+)[*]+([10]+)$/g.exec(st);&lt;br /&gt;
 return matches[1] == matches[2] &amp;amp;&amp;amp; matches.length == 3;&lt;br /&gt;
 4) return countChar(st, 'a') != countChar(st, 'b');&lt;br /&gt;
 5) return countChar(st, 'a') == countChar(st, 'b') * 2;&lt;br /&gt;
 init -- (пере)инициализация&lt;br /&gt;
 step -- выполнение &amp;quot;одного шага&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
# Языки программирования, синтаксис, семантика, прагматика. Когнитивные особенности человеческого мышления и их влияние на развитие языков программирования.&lt;br /&gt;
# Языки программирования в ретроспективе. Процедурное, объектно-ориентированное, логическое и функциональное программирование. Предметно-ориентированные языки. Языки вне классификации. &lt;br /&gt;
# Абстрактный и конкретный синтаксис. Статическая и динамическая семантика. Компиляция и интерпретация. Проекции Футамуры-Ершова.&lt;br /&gt;
# Генеративный и аналитический подходы к описанию синтаксиса. Формальные грамматики, иерархия Хомского. &lt;br /&gt;
# Регулярные языки и конечные автоматы. Применение регулярных выражений в народном хозяйстве (grep/sed/awk) и для лексического анализа (lex/flex). Отсутствие бесконтекстной лексики в реальных языках программирования.&lt;br /&gt;
# Контекстно-свободные грамматики. Нормальные формы Хомского и Грейбах. Алгоритмы Эрли и Кока-Янгера-Касами. Неконтекстосвободность реальных языков программирования.&lt;br /&gt;
# Нисходящий анализ. Возврат и заглядывание вперед. Класс языков LL(k). Рекурсивный спуск, магазинные автоматы, парсер-комбинаторы, PEG, &amp;quot;скаредный&amp;quot; разбор. GLL. Инструменты нисходящего анализа (Parsec, ANTLR и пр.)&lt;br /&gt;
# Восходящий анализ, классы LR(k) и LALR(k). GLR. Инструменты восходящего анализа (yacc/bison).&lt;br /&gt;
# Двухуровневые и атрибутные грамматики, вопросы применения на практике.&lt;br /&gt;
# Идентификация. Область видимости и область действия. Статическое и динамическое, раннее и позднее связывание. &lt;br /&gt;
# Энергичность и ленивость. Call-by-name, call-by-value, call-by-reference.&lt;br /&gt;
# Строгость, чистота, прозрачность по ссылкам.&lt;br /&gt;
# Языки с типами и языки без типов. Статическая и динамическая типизация. &lt;br /&gt;
# Номинальная и структурная эквивалентность типов. Простейшие конструкторы.&lt;br /&gt;
# Типы с кванторами и что они означают. Универсальные и экзистенциальные типы. &lt;br /&gt;
# Subtyping. Структурный и номинальный subtyping. &lt;br /&gt;
# Динамическая семантика языков. Операционная семантика большого и малого шага.&lt;br /&gt;
# Денотационный подход к описанию семантики. &lt;br /&gt;
# Аксиоматическая семантика. Верификация программ. Design by contract.&lt;br /&gt;
# Когерентность языков программирования и машинных архитектур. Языково-специфичные архитектуры, виртуальные машины и JIT-компиляция.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Структура рабочей программы. Код, данные, библиотеки, поддержка времени исполнения.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Задача генерации кода. Генерация кода путем интерпретации.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Восходящее переписывание деревьев и динамическое программирование (BURS).&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Алгоритмы распределения регистров. Распределение регистров и раскраска графов.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Параллелизм на уровне инструкций. Планирование инструкций.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока управления. Глубинное остовное дерево, доминирование, анализ циклической структуры программ. Сводимость. Устранение недостижимого кода, оптимальная линеаризация.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока данных. Полурешеточная модель. RD, LV, AE, UEU. Устраненние мертвого кода, экономия общих подвыражений, понижение силы операций, чистка циклов.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* - вопросы будут рассмотрены при наличии времени.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
# S.Muchnik. Advanced Compiler Design &amp;amp; Implementation. Academic Press, Morgan Kaufmann, 1998.&lt;br /&gt;
# А.Ахо, Р.Сети, С.Ульман. Компиляторы: принципы, технологии, инструменты. Вильямс, 2003.&lt;br /&gt;
# А.Ахо, С.Ульман. Теория синтаксического анализа, перевода и компиляции. Том 1. М., &amp;quot;Мир&amp;quot;, 1978.&lt;br /&gt;
# F.Nielsen. Principles of Program Analysis. Springer, 2005.&lt;br /&gt;
# F.Nielse, H-R.Nielsen. Semantics with Applications. Wiley Professional Computing, 1992.&lt;br /&gt;
# B.Pierce. Types and Programming Languages. MIT Press, 2002.&lt;br /&gt;
# T.Пратт. Языки программирования: разработка и реализация. 1978.&lt;br /&gt;
# Б.К.Мартыненко. Языки и трансляции. Из-во СПбГУ, 2008.&lt;br /&gt;
&lt;br /&gt;
== Список групп для выполнения задач ==&lt;br /&gt;
&lt;br /&gt;
# [Haskell] Мартынов Семён, Башоров Залим, Казенюк Сергей, Витвицкий Александр, Тугарёв Денис.&lt;br /&gt;
# Кринкин Михаил, Лазарев Сергей, Фофанова Мария, Бандурин Дмитрий, Ждан Анна&lt;br /&gt;
# [JAVA] Сорокин Артём, Коровин Алексей, Опейкин Александр, Шеставин Дмитрий, Владислав Савельев&lt;br /&gt;
# [C++] Иванов Антон, Крашенинникова Ксения, Лепенькин Ярослав, Диевский Алексей, Кормишин Сергей&lt;br /&gt;
# Певзнер Алина, Князев Сергей&lt;br /&gt;
# [JAVA] Великий Алексей.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* Не более 5 человек в каждой группе; старайтесь выравнивать группы по уровню, и не повторяться в выборе языков.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://caml.inria.fr/ocaml/release.en.html Latest OCaml release]&lt;br /&gt;
* [http://caml.inria.fr/pub/docs/manual-ocaml/index.html Documentation and user’s manual]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1056</id>
		<title>IntroductionToProgrammingLanguages</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1056"/>
				<updated>2012-02-27T21:04:03Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Задание №3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Введение в языки программирования'''&lt;br /&gt;
&lt;br /&gt;
Лектор - Дмитрий Юрьевич [http://www.matmex.spb.ru/photoalbum/person_teachers_BulychevDY_1.html Булычев]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdC00UkVJekxYV0pYYVAxTmFXUkt6SVE Учёт посещаемости занятий]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdE05Q09iWlRqRzJ3d1FwTlJRSEkxbFE Учёт сдачи домашних заданий]&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/aptu-tex/source/browse/formallang/les1/les.tex Лекция №1] 10.02.2012&lt;br /&gt;
* 17.02.2012&lt;br /&gt;
В семантике ошибка: правило для переменной вместо&lt;br /&gt;
 [x](s)=s(x)&lt;br /&gt;
читать как&lt;br /&gt;
 [x](s)=[s(x)](s).&lt;br /&gt;
* 24.02.2012&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
=== Задание №1 ===&lt;br /&gt;
Cрок сдачи '''17 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать генерирующее расширения для программы возведения в степень.&lt;br /&gt;
&lt;br /&gt;
    int exp (int x, int n) {&lt;br /&gt;
       int y = 1;&lt;br /&gt;
       while (n) {&lt;br /&gt;
           if (n % 2) y *= x;&lt;br /&gt;
           n /= 2;&lt;br /&gt;
           x *= x;&lt;br /&gt;
       }&lt;br /&gt;
       return y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Это генерирующее расширение должно для своего единственного параметра n печатать остаточную программу, полученную специализацией функции exp на это значение n. Если это генерирующее расширение сохранит в себе какие-то черты exp, будет совсем хорошо.&lt;br /&gt;
&lt;br /&gt;
=== Задание №2 ===&lt;br /&gt;
Cрок сдачи '''24 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать принтер, который по абстрактному синтаксическому дереву программы печатает её представление в конкретном синтаксисе (который мы обсуждали) и интерпретатор (который вычисляет значение выражения в данном состоянии).&lt;br /&gt;
&lt;br /&gt;
Описание конкретного синтаксиса для представления программ на языке L:&lt;br /&gt;
# Программа представляется в виде последовательности слов. Разделителем служит перевод строки.&lt;br /&gt;
# Пусть E --- выражение, а |E| --- представление этого выражения в данном конкретном синтаксисе. Тогда:&lt;br /&gt;
#* переменная v представляется в виде &amp;quot;x&amp;quot; v (то есть символ x (как терминал), и собственно имя переменной на следующей строчке).&lt;br /&gt;
#* функция {x -&amp;gt; E} представляется в виде &amp;quot;f&amp;quot; x |E|&lt;br /&gt;
#* применение функции F E представляется в виде &amp;quot;a&amp;quot; |E| |F|&lt;br /&gt;
#* условное выражение C ? T : E представляется в виде &amp;quot;?&amp;quot; |C| |T| |E|&lt;br /&gt;
#* бинарная операция X o Y представляется в виде &amp;quot;@&amp;quot; |X| |Y|&lt;br /&gt;
#* константа i представляется в виде &amp;quot;!&amp;quot; i &lt;br /&gt;
# Контекст (список определений name1=expr1, name2=expr2 и т.д.) представляется как последовательность name1 |expr1| name2 |expr2| и т.д.&lt;br /&gt;
# Программа (то есть выражение E в контексте C) представляется как последовательность |C| &amp;quot;;&amp;quot; |E|.&lt;br /&gt;
# Все реализации д.з. №2 должны уметь читать файл, содержащий описание программы в таком синтаксисе (иначе невозможно ничего проверить).&lt;br /&gt;
&lt;br /&gt;
Пример 1. Выражение&lt;br /&gt;
 {x -&amp;gt; {y -&amp;gt; x + y}} 1 2&lt;br /&gt;
в данном конкретном синтаксисе выглядит так:&lt;br /&gt;
 a&lt;br /&gt;
 a&lt;br /&gt;
 f&lt;br /&gt;
 x&lt;br /&gt;
 f&lt;br /&gt;
 y&lt;br /&gt;
 @&lt;br /&gt;
 +&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 y&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
Пример 2. Программа&lt;br /&gt;
 fact = {n -&amp;gt; n ? n * (fact n-1) : 1};&lt;br /&gt;
 fact 4&lt;br /&gt;
будет представлена как&lt;br /&gt;
 fact&lt;br /&gt;
 f&lt;br /&gt;
 $0&lt;br /&gt;
 ?&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 @&lt;br /&gt;
 *&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 @&lt;br /&gt;
 -&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 ;&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 !&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
[http://narod.ru/disk/42015820001.bfed0d23b277fa721f7e86f27dc45e3d/monoMix.opt.html Программа], которая воспринимает программы в языке L в обычном синтаксисе, и печатает их представление в данной упрощенной форме. Бинарник для x86-linux, -h --- помощь. &lt;br /&gt;
&lt;br /&gt;
=== Задание №3 ===&lt;br /&gt;
Желаемый срок сдачи '''26 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b, c}, состоящего из всех слов, в которых количество букв a, b и c одинаково.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1}, состоящего из всех слов, в которых не встречается две единицы подряд.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1, *}, состоящего из всех слов вида sas, где s --- непустая строка нулей и единиц любой длины, а a --- непустая строка из звездочек любой длины.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех вида a^nb^m, где n &amp;lt;&amp;gt; m.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех слов, в которых количество букв a в два раза больше, чем количество букв b.&lt;br /&gt;
# Правда ли, что любой рекурсивный язык контекстно-зависим (обратное, как известно, верно)?&lt;br /&gt;
# Написать реализацию построения НКА по регулярной грамматике; написать интерпретатор этого автомата, который проверяет принадлежность заданного слова языку, и принтер, который печатает граф переходов автомата в формате .dot пакета graphviz.&lt;br /&gt;
# Написать грамматику для порождения выражений в алфавите {x, +, *, (, )},  где x играет роль операндов, * и + --- левоассоциативные операции (то есть E+F+G означает ((E+F)+G)), операция * связывает операнды сильнее, чем + (то есть E+F*G означает E+(F*G)), причем порождаемые выражения НЕ ДОЛЖНЫ содержать ненужных скобок (а именно, например, выражение x+(x*x) не должно порождаться)&lt;br /&gt;
----&lt;br /&gt;
[http://bashor.github.com/GrGen/GrGen.html Генератор] Залима для проверки 1-5 пунктов.&lt;br /&gt;
Коментарии:&lt;br /&gt;
 T -- терминальные символы. Пробелы и запятые игнорируются, т.е. abc == a b c == a b, c&lt;br /&gt;
 Все остальные символы считаются нетерминальными&lt;br /&gt;
 R -- правила преобразования вида: From : to&lt;br /&gt;
 пробелы и пустые строки игнорируются.&lt;br /&gt;
 Кроме того, можно указать свой чекер на JavaScript. Например:&lt;br /&gt;
 1) return countChar(st, 'a') == countChar(st, 'b') &amp;amp;&amp;amp; countChar(st, 'a') == countChar(st, 'c');&lt;br /&gt;
 2) return st.indexOf(&amp;quot;11&amp;quot;) == -1;&lt;br /&gt;
 3) var matches = /^([10]+)[*]+([10]+)$/g.exec(st);&lt;br /&gt;
 return matches[1] == matches[2] &amp;amp;&amp;amp; matches.length == 3;&lt;br /&gt;
 4) return countChar('a') != countChar('b');&lt;br /&gt;
 5) return countChar(st, 'a') == countChar(st, 'b') * 2;&lt;br /&gt;
 init -- (пере)инициализация&lt;br /&gt;
 step -- выполнение &amp;quot;одного шага&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
# Языки программирования, синтаксис, семантика, прагматика. Когнитивные особенности человеческого мышления и их влияние на развитие языков программирования.&lt;br /&gt;
# Языки программирования в ретроспективе. Процедурное, объектно-ориентированное, логическое и функциональное программирование. Предметно-ориентированные языки. Языки вне классификации. &lt;br /&gt;
# Абстрактный и конкретный синтаксис. Статическая и динамическая семантика. Компиляция и интерпретация. Проекции Футамуры-Ершова.&lt;br /&gt;
# Генеративный и аналитический подходы к описанию синтаксиса. Формальные грамматики, иерархия Хомского. &lt;br /&gt;
# Регулярные языки и конечные автоматы. Применение регулярных выражений в народном хозяйстве (grep/sed/awk) и для лексического анализа (lex/flex). Отсутствие бесконтекстной лексики в реальных языках программирования.&lt;br /&gt;
# Контекстно-свободные грамматики. Нормальные формы Хомского и Грейбах. Алгоритмы Эрли и Кока-Янгера-Касами. Неконтекстосвободность реальных языков программирования.&lt;br /&gt;
# Нисходящий анализ. Возврат и заглядывание вперед. Класс языков LL(k). Рекурсивный спуск, магазинные автоматы, парсер-комбинаторы, PEG, &amp;quot;скаредный&amp;quot; разбор. GLL. Инструменты нисходящего анализа (Parsec, ANTLR и пр.)&lt;br /&gt;
# Восходящий анализ, классы LR(k) и LALR(k). GLR. Инструменты восходящего анализа (yacc/bison).&lt;br /&gt;
# Двухуровневые и атрибутные грамматики, вопросы применения на практике.&lt;br /&gt;
# Идентификация. Область видимости и область действия. Статическое и динамическое, раннее и позднее связывание. &lt;br /&gt;
# Энергичность и ленивость. Call-by-name, call-by-value, call-by-reference.&lt;br /&gt;
# Строгость, чистота, прозрачность по ссылкам.&lt;br /&gt;
# Языки с типами и языки без типов. Статическая и динамическая типизация. &lt;br /&gt;
# Номинальная и структурная эквивалентность типов. Простейшие конструкторы.&lt;br /&gt;
# Типы с кванторами и что они означают. Универсальные и экзистенциальные типы. &lt;br /&gt;
# Subtyping. Структурный и номинальный subtyping. &lt;br /&gt;
# Динамическая семантика языков. Операционная семантика большого и малого шага.&lt;br /&gt;
# Денотационный подход к описанию семантики. &lt;br /&gt;
# Аксиоматическая семантика. Верификация программ. Design by contract.&lt;br /&gt;
# Когерентность языков программирования и машинных архитектур. Языково-специфичные архитектуры, виртуальные машины и JIT-компиляция.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Структура рабочей программы. Код, данные, библиотеки, поддержка времени исполнения.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Задача генерации кода. Генерация кода путем интерпретации.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Восходящее переписывание деревьев и динамическое программирование (BURS).&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Алгоритмы распределения регистров. Распределение регистров и раскраска графов.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Параллелизм на уровне инструкций. Планирование инструкций.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока управления. Глубинное остовное дерево, доминирование, анализ циклической структуры программ. Сводимость. Устранение недостижимого кода, оптимальная линеаризация.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока данных. Полурешеточная модель. RD, LV, AE, UEU. Устраненние мертвого кода, экономия общих подвыражений, понижение силы операций, чистка циклов.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* - вопросы будут рассмотрены при наличии времени.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
# S.Muchnik. Advanced Compiler Design &amp;amp; Implementation. Academic Press, Morgan Kaufmann, 1998.&lt;br /&gt;
# А.Ахо, Р.Сети, С.Ульман. Компиляторы: принципы, технологии, инструменты. Вильямс, 2003.&lt;br /&gt;
# А.Ахо, С.Ульман. Теория синтаксического анализа, перевода и компиляции. Том 1. М., &amp;quot;Мир&amp;quot;, 1978.&lt;br /&gt;
# F.Nielsen. Principles of Program Analysis. Springer, 2005.&lt;br /&gt;
# F.Nielse, H-R.Nielsen. Semantics with Applications. Wiley Professional Computing, 1992.&lt;br /&gt;
# B.Pierce. Types and Programming Languages. MIT Press, 2002.&lt;br /&gt;
# T.Пратт. Языки программирования: разработка и реализация. 1978.&lt;br /&gt;
# Б.К.Мартыненко. Языки и трансляции. Из-во СПбГУ, 2008.&lt;br /&gt;
&lt;br /&gt;
== Список групп для выполнения задач ==&lt;br /&gt;
&lt;br /&gt;
# [Haskell] Мартынов Семён, Башоров Залим, Казенюк Сергей, Витвицкий Александр, Тугарёв Денис.&lt;br /&gt;
# Кринкин Михаил, Лазарев Сергей, Фофанова Мария, Бандурин Дмитрий, Ждан Анна&lt;br /&gt;
# [JAVA] Сорокин Артём, Коровин Алексей, Опейкин Александр, Шеставин Дмитрий, Владислав Савельев&lt;br /&gt;
# [C++] Иванов Антон, Крашенинникова Ксения, Лепенькин Ярослав, Диевский Алексей, Кормишин Сергей&lt;br /&gt;
# Певзнер Алина, Князев Сергей&lt;br /&gt;
# [JAVA] Великий Алексей.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* Не более 5 человек в каждой группе; старайтесь выравнивать группы по уровню, и не повторяться в выборе языков.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://caml.inria.fr/ocaml/release.en.html Latest OCaml release]&lt;br /&gt;
* [http://caml.inria.fr/pub/docs/manual-ocaml/index.html Documentation and user’s manual]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1054</id>
		<title>IntroductionToProgrammingLanguages</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=1054"/>
				<updated>2012-02-26T23:44:39Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Задание №3 */ исправление чекера для 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Введение в языки программирования'''&lt;br /&gt;
&lt;br /&gt;
Лектор - Дмитрий Юрьевич [http://www.matmex.spb.ru/photoalbum/person_teachers_BulychevDY_1.html Булычев]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdC00UkVJekxYV0pYYVAxTmFXUkt6SVE Учёт посещаемости занятий]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheet/ccc?key=0ApYxPEC9C_QXdE05Q09iWlRqRzJ3d1FwTlJRSEkxbFE Учёт сдачи домашних заданий]&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/aptu-tex/source/browse/formallang/les1/les.tex Лекция №1] 10.02.2012&lt;br /&gt;
* 17.02.2012&lt;br /&gt;
В семантике ошибка: правило для переменной вместо&lt;br /&gt;
 [x](s)=s(x)&lt;br /&gt;
читать как&lt;br /&gt;
 [x](s)=[s(x)](s).&lt;br /&gt;
* 24.02.2012&lt;br /&gt;
&lt;br /&gt;
== Домашние задания ==&lt;br /&gt;
&lt;br /&gt;
=== Задание №1 ===&lt;br /&gt;
Cрок сдачи '''17 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать генерирующее расширения для программы возведения в степень.&lt;br /&gt;
&lt;br /&gt;
    int exp (int x, int n) {&lt;br /&gt;
       int y = 1;&lt;br /&gt;
       while (n) {&lt;br /&gt;
           if (n % 2) y *= x;&lt;br /&gt;
           n /= 2;&lt;br /&gt;
           x *= x;&lt;br /&gt;
       }&lt;br /&gt;
       return y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Это генерирующее расширение должно для своего единственного параметра n печатать остаточную программу, полученную специализацией функции exp на это значение n. Если это генерирующее расширение сохранит в себе какие-то черты exp, будет совсем хорошо.&lt;br /&gt;
&lt;br /&gt;
=== Задание №2 ===&lt;br /&gt;
Cрок сдачи '''24 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
Написать принтер, который по абстрактному синтаксическому дереву программы печатает её представление в конкретном синтаксисе (который мы обсуждали) и интерпретатор (который вычисляет значение выражения в данном состоянии).&lt;br /&gt;
&lt;br /&gt;
Описание конкретного синтаксиса для представления программ на языке L:&lt;br /&gt;
# Программа представляется в виде последовательности слов. Разделителем служит перевод строки.&lt;br /&gt;
# Пусть E --- выражение, а |E| --- представление этого выражения в данном конкретном синтаксисе. Тогда:&lt;br /&gt;
#* переменная v представляется в виде &amp;quot;x&amp;quot; v (то есть символ x (как терминал), и собственно имя переменной на следующей строчке).&lt;br /&gt;
#* функция {x -&amp;gt; E} представляется в виде &amp;quot;f&amp;quot; x |E|&lt;br /&gt;
#* применение функции F E представляется в виде &amp;quot;a&amp;quot; |E| |F|&lt;br /&gt;
#* условное выражение C ? T : E представляется в виде &amp;quot;?&amp;quot; |C| |T| |E|&lt;br /&gt;
#* бинарная операция X o Y представляется в виде &amp;quot;@&amp;quot; |X| |Y|&lt;br /&gt;
#* константа i представляется в виде &amp;quot;!&amp;quot; i &lt;br /&gt;
# Контекст (список определений name1=expr1, name2=expr2 и т.д.) представляется как последовательность name1 |expr1| name2 |expr2| и т.д.&lt;br /&gt;
# Программа (то есть выражение E в контексте C) представляется как последовательность |C| &amp;quot;;&amp;quot; |E|.&lt;br /&gt;
# Все реализации д.з. №2 должны уметь читать файл, содержащий описание программы в таком синтаксисе (иначе невозможно ничего проверить).&lt;br /&gt;
&lt;br /&gt;
Пример 1. Выражение&lt;br /&gt;
 {x -&amp;gt; {y -&amp;gt; x + y}} 1 2&lt;br /&gt;
в данном конкретном синтаксисе выглядит так:&lt;br /&gt;
 a&lt;br /&gt;
 a&lt;br /&gt;
 f&lt;br /&gt;
 x&lt;br /&gt;
 f&lt;br /&gt;
 y&lt;br /&gt;
 @&lt;br /&gt;
 +&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 x&lt;br /&gt;
 y&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
Пример 2. Программа&lt;br /&gt;
 fact = {n -&amp;gt; n ? n * (fact n-1) : 1};&lt;br /&gt;
 fact 4&lt;br /&gt;
будет представлена как&lt;br /&gt;
 fact&lt;br /&gt;
 f&lt;br /&gt;
 $0&lt;br /&gt;
 ?&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 @&lt;br /&gt;
 *&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 @&lt;br /&gt;
 -&lt;br /&gt;
 x&lt;br /&gt;
 $0&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 !&lt;br /&gt;
 1&lt;br /&gt;
 ;&lt;br /&gt;
 a&lt;br /&gt;
 x&lt;br /&gt;
 fact&lt;br /&gt;
 !&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
[http://narod.ru/disk/42015820001.bfed0d23b277fa721f7e86f27dc45e3d/monoMix.opt.html Программа], которая воспринимает программы в языке L в обычном синтаксисе, и печатает их представление в данной упрощенной форме. Бинарник для x86-linux, -h --- помощь. &lt;br /&gt;
&lt;br /&gt;
=== Задание №3 ===&lt;br /&gt;
Желаемый срок сдачи '''26 февраля 2011'''&lt;br /&gt;
&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b, c}, состоящего из всех слов, в которых количество букв a, b и c одинаково.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1}, состоящего из всех слов, в которых не встречается две единицы подряд.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {0, 1, *}, состоящего из всех слов вида sas, где s --- непустая строка нулей и единиц любой длины, а a --- непустая строка из звездочек любой длины.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех вида a^nb^m, где n &amp;lt;&amp;gt; m.&lt;br /&gt;
# Написать порождающую грамматику для языка над алфавитом {a, b}, состоящего из всех слов, в которых количество букв a в два раза больше, чем количество букв b.&lt;br /&gt;
# Правда ли, что любой рекурсивный язык контекстно-зависим (обратное, как известно, верно)?&lt;br /&gt;
# Написать реализацию построения НКА по регулярной грамматике; написать интерпретатор этого автомата, который проверяет принадлежность заданного слова языку, и принтер, который печатает граф переходов автомата в формате .dot пакета graphviz.&lt;br /&gt;
# Написать грамматику для порождения выражений в алфавите {x, +, *, (, )},  где x играет роль операндов, * и + --- левоассоциативные операции (то есть E+F+G означает ((E+F)+G)), операция * связывает операнды сильнее, чем + (то есть E+F*G означает E+(F*G)), причем порождаемые выражения НЕ ДОЛЖНЫ содержать ненужных скобок (а именно, например, выражение x+(x*x) не должно порождаться)&lt;br /&gt;
----&lt;br /&gt;
[http://bashor.github.com/GrGen/GrGen.html Генератор] Залима для проверки 1-5 пунктов.&lt;br /&gt;
Коментарии:&lt;br /&gt;
 T -- терминальные символы. Пробелы и запятые игнорируются, т.е. abc == a b c == a b, c&lt;br /&gt;
 Все остальные символы считаются нетерминальными&lt;br /&gt;
 R -- правила преобразования вида: From : to&lt;br /&gt;
 пробелы и пустые строки игнорируются.&lt;br /&gt;
 Кроме того, можно указать свой чекер на JavaScript. Например:&lt;br /&gt;
 1) return countChar(st, 'a') != countChar(st, 'b') &amp;amp;&amp;amp; countChar(st, 'a') == countChar(st, 'c');&lt;br /&gt;
 2) return st.indexOf(&amp;quot;11&amp;quot;) == -1;&lt;br /&gt;
 3) var matches = /^([10]+)[*]+([10]+)$/g.exec(st);&lt;br /&gt;
 return matches[1] == matches[2] &amp;amp;&amp;amp; matches.length == 3;&lt;br /&gt;
 4) return countChar('a') != countChar('b');&lt;br /&gt;
 5) return countChar(st, 'a') == countChar(st, 'b') * 2;&lt;br /&gt;
 init -- (пере)инициализация&lt;br /&gt;
 step -- выполнение &amp;quot;одного шага&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
# Языки программирования, синтаксис, семантика, прагматика. Когнитивные особенности человеческого мышления и их влияние на развитие языков программирования.&lt;br /&gt;
# Языки программирования в ретроспективе. Процедурное, объектно-ориентированное, логическое и функциональное программирование. Предметно-ориентированные языки. Языки вне классификации. &lt;br /&gt;
# Абстрактный и конкретный синтаксис. Статическая и динамическая семантика. Компиляция и интерпретация. Проекции Футамуры-Ершова.&lt;br /&gt;
# Генеративный и аналитический подходы к описанию синтаксиса. Формальные грамматики, иерархия Хомского. &lt;br /&gt;
# Регулярные языки и конечные автоматы. Применение регулярных выражений в народном хозяйстве (grep/sed/awk) и для лексического анализа (lex/flex). Отсутствие бесконтекстной лексики в реальных языках программирования.&lt;br /&gt;
# Контекстно-свободные грамматики. Нормальные формы Хомского и Грейбах. Алгоритмы Эрли и Кока-Янгера-Касами. Неконтекстосвободность реальных языков программирования.&lt;br /&gt;
# Нисходящий анализ. Возврат и заглядывание вперед. Класс языков LL(k). Рекурсивный спуск, магазинные автоматы, парсер-комбинаторы, PEG, &amp;quot;скаредный&amp;quot; разбор. GLL. Инструменты нисходящего анализа (Parsec, ANTLR и пр.)&lt;br /&gt;
# Восходящий анализ, классы LR(k) и LALR(k). GLR. Инструменты восходящего анализа (yacc/bison).&lt;br /&gt;
# Двухуровневые и атрибутные грамматики, вопросы применения на практике.&lt;br /&gt;
# Идентификация. Область видимости и область действия. Статическое и динамическое, раннее и позднее связывание. &lt;br /&gt;
# Энергичность и ленивость. Call-by-name, call-by-value, call-by-reference.&lt;br /&gt;
# Строгость, чистота, прозрачность по ссылкам.&lt;br /&gt;
# Языки с типами и языки без типов. Статическая и динамическая типизация. &lt;br /&gt;
# Номинальная и структурная эквивалентность типов. Простейшие конструкторы.&lt;br /&gt;
# Типы с кванторами и что они означают. Универсальные и экзистенциальные типы. &lt;br /&gt;
# Subtyping. Структурный и номинальный subtyping. &lt;br /&gt;
# Динамическая семантика языков. Операционная семантика большого и малого шага.&lt;br /&gt;
# Денотационный подход к описанию семантики. &lt;br /&gt;
# Аксиоматическая семантика. Верификация программ. Design by contract.&lt;br /&gt;
# Когерентность языков программирования и машинных архитектур. Языково-специфичные архитектуры, виртуальные машины и JIT-компиляция.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Структура рабочей программы. Код, данные, библиотеки, поддержка времени исполнения.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Задача генерации кода. Генерация кода путем интерпретации.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Восходящее переписывание деревьев и динамическое программирование (BURS).&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Алгоритмы распределения регистров. Распределение регистров и раскраска графов.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Параллелизм на уровне инструкций. Планирование инструкций.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока управления. Глубинное остовное дерево, доминирование, анализ циклической структуры программ. Сводимость. Устранение недостижимого кода, оптимальная линеаризация.&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Анализ потока данных. Полурешеточная модель. RD, LV, AE, UEU. Устраненние мертвого кода, экономия общих подвыражений, понижение силы операций, чистка циклов.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* - вопросы будут рассмотрены при наличии времени.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
# S.Muchnik. Advanced Compiler Design &amp;amp; Implementation. Academic Press, Morgan Kaufmann, 1998.&lt;br /&gt;
# А.Ахо, Р.Сети, С.Ульман. Компиляторы: принципы, технологии, инструменты. Вильямс, 2003.&lt;br /&gt;
# А.Ахо, С.Ульман. Теория синтаксического анализа, перевода и компиляции. Том 1. М., &amp;quot;Мир&amp;quot;, 1978.&lt;br /&gt;
# F.Nielsen. Principles of Program Analysis. Springer, 2005.&lt;br /&gt;
# F.Nielse, H-R.Nielsen. Semantics with Applications. Wiley Professional Computing, 1992.&lt;br /&gt;
# B.Pierce. Types and Programming Languages. MIT Press, 2002.&lt;br /&gt;
# T.Пратт. Языки программирования: разработка и реализация. 1978.&lt;br /&gt;
# Б.К.Мартыненко. Языки и трансляции. Из-во СПбГУ, 2008.&lt;br /&gt;
&lt;br /&gt;
== Список групп для выполнения задач ==&lt;br /&gt;
&lt;br /&gt;
# [Haskell] Мартынов Семён, Башоров Залим, Казенюк Сергей, Витвицкий Александр, Тугарёв Денис.&lt;br /&gt;
# Кринкин Михаил, Лазарев Сергей, Фофанова Мария, Бандурин Дмитрий, Ждан Анна&lt;br /&gt;
# [JAVA] Сорокин Артём, Коровин Алексей, Опейкин Александр, Шеставин Дмитрий, Владислав Савельев&lt;br /&gt;
# [C++] Иванов Антон, Крашенинникова Ксения, Лепенькин Ярослав, Диевский Алексей, Кормишин Сергей&lt;br /&gt;
# Певзнер Алина, Князев Сергей&lt;br /&gt;
# [JAVA] Великий Алексей.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;nowiki&amp;gt;* Не более 5 человек в каждой группе; старайтесь выравнивать группы по уровню, и не повторяться в выборе языков.&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://caml.inria.fr/ocaml/release.en.html Latest OCaml release]&lt;br /&gt;
* [http://caml.inria.fr/pub/docs/manual-ocaml/index.html Documentation and user’s manual]&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=951</id>
		<title>IntroductionToProgrammingLanguages</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=951"/>
				<updated>2012-02-11T13:33:51Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Список групп для выполнения задач */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Лекции ==&lt;br /&gt;
* [Лекция №1] 10.02.2012&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Практические задания ==&lt;br /&gt;
* [Задание №1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Список групп для выполнения задач ==&lt;br /&gt;
&lt;br /&gt;
1. Мартынов Семён, Башоров Залим, Казенюк Сергей, Витвицкий Александр, Тугарёв Денис.&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
4.&lt;br /&gt;
&lt;br /&gt;
5.&lt;br /&gt;
&lt;br /&gt;
6.&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=950</id>
		<title>IntroductionToProgrammingLanguages</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=IntroductionToProgrammingLanguages&amp;diff=950"/>
				<updated>2012-02-11T13:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Список групп для выполнения задач */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Лекции ==&lt;br /&gt;
* [Лекция №1] 10.02.2012&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Практические задания ==&lt;br /&gt;
* [Задание №1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программа курса ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Список литературы ==&lt;br /&gt;
&lt;br /&gt;
== Список групп для выполнения задач ==&lt;br /&gt;
&lt;br /&gt;
1. Мартынов Семён, Башоров Залим, Казенюк Сергей, Витвитский Александр, Тугарёв Денис.&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
4.&lt;br /&gt;
&lt;br /&gt;
5.&lt;br /&gt;
&lt;br /&gt;
6.&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=862</id>
		<title>Алгоритмы и структуры данных</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=862"/>
				<updated>2012-01-17T02:01:49Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: /* Экзамен */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.lektorium.tv/course/?id=22823&lt;br /&gt;
&lt;br /&gt;
==Экзамен==&lt;br /&gt;
'''17.01.2012'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Начало в '''10.00''' &amp;lt;br/&amp;gt;&lt;br /&gt;
1.5 ч. на подготовку&amp;lt;br/&amp;gt;&lt;br /&gt;
15 минут на ответ.&amp;lt;br/&amp;gt;&lt;br /&gt;
Заходить получать билеты будете, действительно, с интервалом в минут 15, поэтому рекомендую заранее определиться с порядком&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примерно в 14 прервёмся на час на обед, поэтому последний вопрос до обеда будет выдан в 12-15.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Порядок получения билетов:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
10.00 Фофанова М.&amp;lt;br/&amp;gt;&lt;br /&gt;
10.15 Краско Е.&amp;lt;br/&amp;gt;&lt;br /&gt;
10.30 - &amp;lt;br/&amp;gt;&lt;br /&gt;
10.45 Крашенинникова К.&amp;lt;br/&amp;gt;&lt;br /&gt;
11.00 - &amp;lt;br/&amp;gt;&lt;br /&gt;
11.15 Кринкин М.&amp;lt;br/&amp;gt;&lt;br /&gt;
11.30 Кононенко В.&amp;lt;br/&amp;gt;&lt;br /&gt;
11.45 Казенюк С.&amp;lt;br/&amp;gt;&lt;br /&gt;
12.00 Коровин А.&amp;lt;br/&amp;gt;&lt;br /&gt;
12.15 Певзнер А.А.&amp;lt;br/&amp;gt;&lt;br /&gt;
15.00 Шеставин Д.В.&amp;lt;br/&amp;gt;&lt;br /&gt;
15.15 Опейкин А.&amp;lt;br/&amp;gt;&lt;br /&gt;
15.30 Кормишин С. &amp;lt;br/&amp;gt;&lt;br /&gt;
15.45 Кузьмин А.В.&amp;lt;br/&amp;gt;&lt;br /&gt;
16.00 Мартынов С.&amp;lt;br/&amp;gt;&lt;br /&gt;
16.15 Гуменюк С.С.&amp;lt;br/&amp;gt;&lt;br /&gt;
16.30 Бандурин Д.В.&amp;lt;br/&amp;gt;&lt;br /&gt;
16.45 Лепенькин Я.А.&amp;lt;br/&amp;gt;&lt;br /&gt;
17.00 Диевский А.В.&amp;lt;br/&amp;gt;&lt;br /&gt;
17.15 Иванов А.К.&amp;lt;br/&amp;gt;&lt;br /&gt;
17.30 Великий А.В &amp;lt;br/&amp;gt;&lt;br /&gt;
17.45 Ждан А. Д. &amp;lt;br/&amp;gt;&lt;br /&gt;
18.00 Сорокин А. Ю &amp;lt;br/&amp;gt;&lt;br /&gt;
18.15 Кудинкин А.&amp;lt;br/&amp;gt;&lt;br /&gt;
18.30 Башоров З.&amp;lt;br/&amp;gt;&lt;br /&gt;
18.45 &amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=834</id>
		<title>Алгоритмы и структуры данных</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=834"/>
				<updated>2012-01-15T20:21:18Z</updated>
		
		<summary type="html">&lt;p&gt;Zalim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.lektorium.tv/course/?id=22823&lt;br /&gt;
&lt;br /&gt;
==Экзамен==&lt;br /&gt;
'''17.01.2012'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Начало в '''10.00''' &amp;lt;br/&amp;gt;&lt;br /&gt;
1.5 ч. на подготовку&amp;lt;br/&amp;gt;&lt;br /&gt;
15 минут на ответ.&amp;lt;br/&amp;gt;&lt;br /&gt;
Заходить получать билеты будете, действительно, с интервалом в минут 15, поэтому рекомендую заранее определиться с порядком&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примерно в 14 прервёмся на час на обед, поэтому последний вопрос до обеда будет выдан в 12-15.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Порядок получения билетов:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
10.00 &amp;lt;br/&amp;gt;&lt;br /&gt;
10.15 &amp;lt;br/&amp;gt;&lt;br /&gt;
10.30 &amp;lt;br/&amp;gt;&lt;br /&gt;
10.45 &amp;lt;br/&amp;gt;&lt;br /&gt;
11.00 Башоров З.&amp;lt;br/&amp;gt;&lt;br /&gt;
11.15 &amp;lt;br/&amp;gt;&lt;br /&gt;
11.30 &amp;lt;br/&amp;gt;&lt;br /&gt;
11.45 &amp;lt;br/&amp;gt;&lt;br /&gt;
12.00 &amp;lt;br/&amp;gt;&lt;br /&gt;
12.15 &amp;lt;br/&amp;gt;&lt;br /&gt;
15.00 &amp;lt;br/&amp;gt;&lt;br /&gt;
15.15 &amp;lt;br/&amp;gt;&lt;br /&gt;
15.30 &amp;lt;br/&amp;gt;&lt;br /&gt;
15.45 &amp;lt;br/&amp;gt;&lt;br /&gt;
16.00 &amp;lt;br/&amp;gt;&lt;br /&gt;
16.15 &amp;lt;br/&amp;gt;&lt;br /&gt;
16.30 &amp;lt;br/&amp;gt;&lt;br /&gt;
16.45 &amp;lt;br/&amp;gt;&lt;br /&gt;
17.00 &amp;lt;br/&amp;gt;&lt;br /&gt;
17.15 &amp;lt;br/&amp;gt;&lt;br /&gt;
17.30 &amp;lt;br/&amp;gt;&lt;br /&gt;
17.45 &amp;lt;br/&amp;gt;&lt;br /&gt;
18.00 &amp;lt;br/&amp;gt;&lt;br /&gt;
18.15 &amp;lt;br/&amp;gt;&lt;br /&gt;
18.30 &amp;lt;br/&amp;gt;&lt;br /&gt;
18.45 &amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zalim</name></author>	</entry>

	</feed>