<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.cs.hse.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vyacovlev</id>
	<title>Wiki - Факультет компьютерных наук - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cs.hse.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vyacovlev"/>
	<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/%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/Vyacovlev"/>
	<updated>2026-09-20T23:02:59Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=23337</id>
		<title>Кэширующий веб-сервер (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=23337"/>
		<updated>2017-06-02T12:10:06Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Кэширующий веб-сервер&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=15&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Диклэймер&#039;&#039;&#039;. Впервые ставлю 40% &amp;quot;неудов&amp;quot;, но снижать требования или идти ещё на какие-то послабления - уже просто никак не возможно.&lt;br /&gt;
Просьбы &amp;quot;можно отправить до завтра&amp;quot; не принимаются. На проектную работу было выделено 7 месяцев. Один день никого не спасет.&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&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. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию нитей в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
4. Работать с очередью ядра Linux и FreeBSD&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++ &lt;br /&gt;
&lt;br /&gt;
2. Умение пользоваться виртуальными машинами&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только низкоуровневые API систем Linux и FreeBSD.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы, использую механизм epoll/kqueue&lt;br /&gt;
&lt;br /&gt;
6 баллов. Сервер умеет перенаправлять запрос другому серверу и передавать обратно ответ&lt;br /&gt;
&lt;br /&gt;
8 баллов. Реализована корректная работа с использованием нескольких нитей&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка WebSocket-прокси&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
&lt;br /&gt;
Аудитории: 432 (вторник), 322 (суббота)&lt;br /&gt;
&lt;br /&gt;
1 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
5 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
8 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
19 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
29 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
3 декабря (суббота) - 12:10-13:30&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=23336</id>
		<title>Веб-сервер с функциональностью CGI (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=23336"/>
		<updated>2017-06-02T12:09:46Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Веб-сервер с функциональностью CGI&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=23&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Диклэймер&#039;&#039;&#039;. Впервые ставлю 40% &amp;quot;неудов&amp;quot;, но снижать требования или идти ещё на какие-то послабления - уже просто никак не возможно.&lt;br /&gt;
Просьбы &amp;quot;можно отправить до завтра&amp;quot; не принимаются. На проектную работу было выделено 7 месяцев. Один день никого не спасет.&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Введение&lt;br /&gt;
&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность. &lt;br /&gt;
&lt;br /&gt;
Что требуется&lt;br /&gt;
&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
Требования к серверу: Уметь выдавать как статический, так и динамический контент; уметь обрабатывать ошибки.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию процессов в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только POSIX.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
&lt;br /&gt;
6 баллов. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
&lt;br /&gt;
9 баллов. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка POST-запросов&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
&lt;br /&gt;
Аудитории: 432 (вторник), 322 (суббота)&lt;br /&gt;
&lt;br /&gt;
1 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
5 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
8 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
19 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
29 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
3 декабря (суббота) - 12:10-13:30&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22839</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22839"/>
		<updated>2017-03-16T23:19:49Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Уточнение критериев оценки ДЗ-4: на максимальный балл можно сделать, не реализуя PNG формат&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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №2 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 16 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать браузерную (front-end) часть приложения &amp;quot;Электронные таблицы&amp;quot; с возможностью вычисления выражений.&lt;br /&gt;
&lt;br /&gt;
Таблица имеет фиксированный размер 26 столбцов x 20 строк, столбцы нумеруются латинскими буквами от &#039;A&#039; до &#039;Z&#039;, строки нумеруются от 1 до 20.&lt;br /&gt;
Ячейки таблицы могут содержать: числа в десятичной записи, строки (текст) и формулы. Формулы начинаются с символа &#039;=&#039;, и их синтаксис эквивалентен Google-Таблицам.&lt;br /&gt;
&lt;br /&gt;
В ячейках, содержащих формулы, должны отображаться вычисленные значения формул, которые могут содержать арифметические выражения, ссылки на другие ячейки, и вызовы функций. Достаточно реализовать поддержку трех функций: ABS, SIN, LEN.&lt;br /&gt;
&lt;br /&gt;
Приложение не использует никакого взаимодействия с сервером, - он используется только для выдачи статического контента.&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.3 балла. Реализована электронная таблица с возможностью редактирования значений.&lt;br /&gt;
* 0.4 балла. Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval.&lt;br /&gt;
* 0.5 балла. При вычислении формул возможно использование значений других ячеек таблицы и функций.&lt;br /&gt;
* 0.8 балла. Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено.&lt;br /&gt;
* 0.9 балла. Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции.&lt;br /&gt;
* +0.1 балла. Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы.&lt;br /&gt;
* +0.2 балла. Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №3 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 20 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффициент 0.9 - до 27 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать многопользовательскую браузерную игру &amp;quot;крестики-нолики на бесконечном поле&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Правила игры (известной также под названием &amp;quot;пять в ряд&amp;quot;): несколько игроков поочередно ставят свою отметку на свободной ячейке игрового поля. В случае, когда игрок ставит пять отметок в один ряд без пропусков (по вертикали, горизонтали, или одной из диагоналей) - он выиграл.&lt;br /&gt;
&lt;br /&gt;
В браузере отображается часть игрового поля размером 10x10 клеток. Само поле - теоретически бесконечное, на практике его размер ограничивается только разрядностью индексов клеток без использования арифметики длинных чисел. Игровое поле хранится на сервере, и отображается по мере необходимости (реализован скроллинг или кнопки навигации).&lt;br /&gt;
&lt;br /&gt;
Игра происходит в реальном времени, то есть все отметки, при стабильном и быстром Интернет-подключении, моментально отображаются на игровых полях других игроков.&lt;br /&gt;
&lt;br /&gt;
Приложение реализовано целиком на сервере, браузер используется только как &amp;quot;тонкий клиент&amp;quot; и его программная часть содержит минимальный набор функций, необходимых для отрисовки поля, обработки и передачи на сервер событий.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещена&#039;&#039;&#039; реализация серверной части на Python/Django или Flask!&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализовано создание игрового поля 10x10 с использованием технологии &amp;quot;тонкого клиента&amp;quot;.&lt;br /&gt;
* 0.6 балла. Игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников.&lt;br /&gt;
* 0.8 балла. Реализован игровой процесс игры для поля 10x10.&lt;br /&gt;
* 1.0 балл. Реализован игровой процесс для (почти) бесконечного поля.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №4 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;12:10 31 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффициент 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать скрытие и извлечение коротких текстов, спрятанных в файлах изображений (это называется &amp;quot;стеганография&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Берём исходное изображение, и модифицируем его таким образом, что младшие биты разных цветовых компонент отдельных пикселей используются для хранения некоторых посторонних данных. В результате получаем новое изображение, которое мало отличается от исходного, и визуально трудно определить наличие посторонних данных. &lt;br /&gt;
&lt;br /&gt;
Формат изображений: BMP, 24 бит на пиксельных (RGB), сжатие НЕ используется. &lt;br /&gt;
&lt;br /&gt;
Формат текста: UTF-8, допускается отсечение строки текста в случае, когда размер изображения не позволяет внедрить строку целиком. &lt;br /&gt;
&lt;br /&gt;
Задание решается только на Erlang, использование готовых библиотек для работы с изображениями запрещено. &lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
&lt;br /&gt;
Базовая функциональность (макс. 0.5 балла):&lt;br /&gt;
* 0.4 балла. Реализованы функции внедрения и извлечения текстов. Полученное новое изображение должно корректно открываться стандартным графическим редактором, и визуально быть похожим на исходное. &lt;br /&gt;
* +0.1 балл. Корректно реализовано отсечение последовательности символов, размер которых больше одного байта.&lt;br /&gt;
&lt;br /&gt;
Вариант 1 (+0.5 балла) - реализована программа, которая умеет работать с PNG-файлами:&lt;br /&gt;
* +0.1 балл. Функции оформлены в виде консольной программы, упакованной в один файл. &lt;br /&gt;
* +0.4 балла. В дополнение к формату BMP, поддерживается формат PNG (24bpp, метод сжатия zlib deflate). Допускается использование только функций стандартной библиотеки.&lt;br /&gt;
&lt;br /&gt;
Вариант 2 (+0.5 балла) - реализован веб-сервис (достаточно поддержки только формата BMP):&lt;br /&gt;
* +0.2 балла. Реализован веб-сервер, который обрабатывает GET-запросы на выдачу графического файла, принимая в качестве параметра текст, который нужно внедрить, и выдаёт преобразованное изображение. Допускается использование модуля inets или сервера cowboy. &lt;br /&gt;
* +0.2 балла. Реализована возможность добавления и удаления картинок на сервере с помощью PUT и DELETE запросов.&lt;br /&gt;
* +0.1 балл. Сервер оформлен в виде стандартной OTP-поставки.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22826</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22826"/>
		<updated>2017-03-15T20:21:47Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Продлен дедлайн по ДЗ-4&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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №2 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 16 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать браузерную (front-end) часть приложения &amp;quot;Электронные таблицы&amp;quot; с возможностью вычисления выражений.&lt;br /&gt;
&lt;br /&gt;
Таблица имеет фиксированный размер 26 столбцов x 20 строк, столбцы нумеруются латинскими буквами от &#039;A&#039; до &#039;Z&#039;, строки нумеруются от 1 до 20.&lt;br /&gt;
Ячейки таблицы могут содержать: числа в десятичной записи, строки (текст) и формулы. Формулы начинаются с символа &#039;=&#039;, и их синтаксис эквивалентен Google-Таблицам.&lt;br /&gt;
&lt;br /&gt;
В ячейках, содержащих формулы, должны отображаться вычисленные значения формул, которые могут содержать арифметические выражения, ссылки на другие ячейки, и вызовы функций. Достаточно реализовать поддержку трех функций: ABS, SIN, LEN.&lt;br /&gt;
&lt;br /&gt;
Приложение не использует никакого взаимодействия с сервером, - он используется только для выдачи статического контента.&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.3 балла. Реализована электронная таблица с возможностью редактирования значений.&lt;br /&gt;
* 0.4 балла. Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval.&lt;br /&gt;
* 0.5 балла. При вычислении формул возможно использование значений других ячеек таблицы и функций.&lt;br /&gt;
* 0.8 балла. Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено.&lt;br /&gt;
* 0.9 балла. Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции.&lt;br /&gt;
* +0.1 балла. Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы.&lt;br /&gt;
* +0.2 балла. Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №3 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 20 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффициент 0.9 - до 27 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать многопользовательскую браузерную игру &amp;quot;крестики-нолики на бесконечном поле&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Правила игры (известной также под названием &amp;quot;пять в ряд&amp;quot;): несколько игроков поочередно ставят свою отметку на свободной ячейке игрового поля. В случае, когда игрок ставит пять отметок в один ряд без пропусков (по вертикали, горизонтали, или одной из диагоналей) - он выиграл.&lt;br /&gt;
&lt;br /&gt;
В браузере отображается часть игрового поля размером 10x10 клеток. Само поле - теоретически бесконечное, на практике его размер ограничивается только разрядностью индексов клеток без использования арифметики длинных чисел. Игровое поле хранится на сервере, и отображается по мере необходимости (реализован скроллинг или кнопки навигации).&lt;br /&gt;
&lt;br /&gt;
Игра происходит в реальном времени, то есть все отметки, при стабильном и быстром Интернет-подключении, моментально отображаются на игровых полях других игроков.&lt;br /&gt;
&lt;br /&gt;
Приложение реализовано целиком на сервере, браузер используется только как &amp;quot;тонкий клиент&amp;quot; и его программная часть содержит минимальный набор функций, необходимых для отрисовки поля, обработки и передачи на сервер событий.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещена&#039;&#039;&#039; реализация серверной части на Python/Django или Flask!&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализовано создание игрового поля 10x10 с использованием технологии &amp;quot;тонкого клиента&amp;quot;.&lt;br /&gt;
* 0.6 балла. Игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников.&lt;br /&gt;
* 0.8 балла. Реализован игровой процесс игры для поля 10x10.&lt;br /&gt;
* 1.0 балл. Реализован игровой процесс для (почти) бесконечного поля.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №4 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;12:10 31 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффициент 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать скрытие и извлечение коротких текстов, спрятанных в файлах изображений (это называется &amp;quot;стеганография&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Берём исходное изображение, и модифицируем его таким образом, что младшие биты разных цветовых компонент отдельных пикселей используются для хранения некоторых посторонних данных. В результате получаем новое изображение, которое мало отличается от исходного, и визуально трудно определить наличие посторонних данных. &lt;br /&gt;
&lt;br /&gt;
Формат изображений: BMP, 24 бит на пиксельных (RGB), сжатие НЕ используется. &lt;br /&gt;
&lt;br /&gt;
Формат текста: UTF-8, допускается отсечение строки текста в случае, когда размер изображения не позволяет внедрить строку целиком. &lt;br /&gt;
&lt;br /&gt;
Задание решается только на Erlang, использование готовых библиотек для работы с изображениями запрещено. &lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализованы функции внедрения и извлечения текстов. Полученное новое изображение должно корректно открываться стандартным графическим редактором, и визуально быть похожим на исходное. &lt;br /&gt;
* +0.1 балл. Корректно реализовано отсечение последовательности символов, размер которых больше одного байта. &lt;br /&gt;
* +0.1 балл. Функции оформлены в виде консольной программы, упакованной в один файл. &lt;br /&gt;
* +0.2 балла. Реализован веб-сервер, который обрабатывает GET-запросы на выдачу графического файла, принимая в качестве параметра текст, который нужно внедрить, и выдаёт преобразованное изображение. Допускается использование модуля inets или сервера cowboy. &lt;br /&gt;
* +0.1 балл. Сервер оформлен в виде стандартной OTP-поставки. &lt;br /&gt;
* +0.4 балла. В дополнение к формату BMP, поддерживается формат PNG (24bpp, метод сжатия zlib deflate). Допускается использование только функций стандартной библиотеки.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22825</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22825"/>
		<updated>2017-03-15T20:20:11Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Продлен дедлайн по ДЗ-3 на 4 дня&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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №2 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 16 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать браузерную (front-end) часть приложения &amp;quot;Электронные таблицы&amp;quot; с возможностью вычисления выражений.&lt;br /&gt;
&lt;br /&gt;
Таблица имеет фиксированный размер 26 столбцов x 20 строк, столбцы нумеруются латинскими буквами от &#039;A&#039; до &#039;Z&#039;, строки нумеруются от 1 до 20.&lt;br /&gt;
Ячейки таблицы могут содержать: числа в десятичной записи, строки (текст) и формулы. Формулы начинаются с символа &#039;=&#039;, и их синтаксис эквивалентен Google-Таблицам.&lt;br /&gt;
&lt;br /&gt;
В ячейках, содержащих формулы, должны отображаться вычисленные значения формул, которые могут содержать арифметические выражения, ссылки на другие ячейки, и вызовы функций. Достаточно реализовать поддержку трех функций: ABS, SIN, LEN.&lt;br /&gt;
&lt;br /&gt;
Приложение не использует никакого взаимодействия с сервером, - он используется только для выдачи статического контента.&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.3 балла. Реализована электронная таблица с возможностью редактирования значений.&lt;br /&gt;
* 0.4 балла. Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval.&lt;br /&gt;
* 0.5 балла. При вычислении формул возможно использование значений других ячеек таблицы и функций.&lt;br /&gt;
* 0.8 балла. Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено.&lt;br /&gt;
* 0.9 балла. Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции.&lt;br /&gt;
* +0.1 балла. Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы.&lt;br /&gt;
* +0.2 балла. Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №3 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 20 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффициент 0.9 - до 27 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать многопользовательскую браузерную игру &amp;quot;крестики-нолики на бесконечном поле&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Правила игры (известной также под названием &amp;quot;пять в ряд&amp;quot;): несколько игроков поочередно ставят свою отметку на свободной ячейке игрового поля. В случае, когда игрок ставит пять отметок в один ряд без пропусков (по вертикали, горизонтали, или одной из диагоналей) - он выиграл.&lt;br /&gt;
&lt;br /&gt;
В браузере отображается часть игрового поля размером 10x10 клеток. Само поле - теоретически бесконечное, на практике его размер ограничивается только разрядностью индексов клеток без использования арифметики длинных чисел. Игровое поле хранится на сервере, и отображается по мере необходимости (реализован скроллинг или кнопки навигации).&lt;br /&gt;
&lt;br /&gt;
Игра происходит в реальном времени, то есть все отметки, при стабильном и быстром Интернет-подключении, моментально отображаются на игровых полях других игроков.&lt;br /&gt;
&lt;br /&gt;
Приложение реализовано целиком на сервере, браузер используется только как &amp;quot;тонкий клиент&amp;quot; и его программная часть содержит минимальный набор функций, необходимых для отрисовки поля, обработки и передачи на сервер событий.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещена&#039;&#039;&#039; реализация серверной части на Python/Django или Flask!&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализовано создание игрового поля 10x10 с использованием технологии &amp;quot;тонкого клиента&amp;quot;.&lt;br /&gt;
* 0.6 балла. Игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников.&lt;br /&gt;
* 0.8 балла. Реализован игровой процесс игры для поля 10x10.&lt;br /&gt;
* 1.0 балл. Реализован игровой процесс для (почти) бесконечного поля.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №4 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 23 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать скрытие и извлечение коротких текстов, спрятанных в файлах изображений (это называется &amp;quot;стеганография&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Берём исходное изображение, и модифицируем его таким образом, что младшие биты разных цветовых компонент отдельных пикселей используются для хранения некоторых посторонних данных. В результате получаем новое изображение, которое мало отличается от исходного, и визуально трудно определить наличие посторонних данных. &lt;br /&gt;
&lt;br /&gt;
Формат изображений: BMP, 24 бит на пиксельных (RGB), сжатие НЕ используется. &lt;br /&gt;
&lt;br /&gt;
Формат текста: UTF-8, допускается отсечение строки текста в случае, когда размер изображения не позволяет внедрить строку целиком. &lt;br /&gt;
&lt;br /&gt;
Задание решается только на Erlang, использование готовых библиотек для работы с изображениями запрещено. &lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализованы функции внедрения и извлечения текстов. Полученное новое изображение должно корректно открываться стандартным графическим редактором, и визуально быть похожим на исходное. &lt;br /&gt;
* +0.1 балл. Корректно реализовано отсечение последовательности символов, размер которых больше одного байта. &lt;br /&gt;
* +0.1 балл. Функции оформлены в виде консольной программы, упакованной в один файл. &lt;br /&gt;
* +0.2 балла. Реализован веб-сервер, который обрабатывает GET-запросы на выдачу графического файла, принимая в качестве параметра текст, который нужно внедрить, и выдаёт преобразованное изображение. Допускается использование модуля inets или сервера cowboy. &lt;br /&gt;
* +0.1 балл. Сервер оформлен в виде стандартной OTP-поставки. &lt;br /&gt;
* +0.4 балла. В дополнение к формату BMP, поддерживается формат PNG (24bpp, метод сжатия zlib deflate). Допускается использование только функций стандартной библиотеки.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22753</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22753"/>
		<updated>2017-03-03T09:13:22Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: ДЗ 4&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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №2 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 16 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать браузерную (front-end) часть приложения &amp;quot;Электронные таблицы&amp;quot; с возможностью вычисления выражений.&lt;br /&gt;
&lt;br /&gt;
Таблица имеет фиксированный размер 26 столбцов x 20 строк, столбцы нумеруются латинскими буквами от &#039;A&#039; до &#039;Z&#039;, строки нумеруются от 1 до 20.&lt;br /&gt;
Ячейки таблицы могут содержать: числа в десятичной записи, строки (текст) и формулы. Формулы начинаются с символа &#039;=&#039;, и их синтаксис эквивалентен Google-Таблицам.&lt;br /&gt;
&lt;br /&gt;
В ячейках, содержащих формулы, должны отображаться вычисленные значения формул, которые могут содержать арифметические выражения, ссылки на другие ячейки, и вызовы функций. Достаточно реализовать поддержку трех функций: ABS, SIN, LEN.&lt;br /&gt;
&lt;br /&gt;
Приложение не использует никакого взаимодействия с сервером, - он используется только для выдачи статического контента.&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.3 балла. Реализована электронная таблица с возможностью редактирования значений.&lt;br /&gt;
* 0.4 балла. Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval.&lt;br /&gt;
* 0.5 балла. При вычислении формул возможно использование значений других ячеек таблицы и функций.&lt;br /&gt;
* 0.8 балла. Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено.&lt;br /&gt;
* 0.9 балла. Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции.&lt;br /&gt;
* +0.1 балла. Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы.&lt;br /&gt;
* +0.2 балла. Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №3 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 16 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать многопользовательскую браузерную игру &amp;quot;крестики-нолики на бесконечном поле&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Правила игры (известной также под названием &amp;quot;пять в ряд&amp;quot;): несколько игроков поочередно ставят свою отметку на свободной ячейке игрового поля. В случае, когда игрок ставит пять отметок в один ряд без пропусков (по вертикали, горизонтали, или одной из диагоналей) - он выиграл.&lt;br /&gt;
&lt;br /&gt;
В браузере отображается часть игрового поля размером 10x10 клеток. Само поле - теоретически бесконечное, на практике его размер ограничивается только разрядностью индексов клеток без использования арифметики длинных чисел. Игровое поле хранится на сервере, и отображается по мере необходимости (реализован скроллинг или кнопки навигации).&lt;br /&gt;
&lt;br /&gt;
Игра происходит в реальном времени, то есть все отметки, при стабильном и быстром Интернет-подключении, моментально отображаются на игровых полях других игроков.&lt;br /&gt;
&lt;br /&gt;
Приложение реализовано целиком на сервере, браузер используется только как &amp;quot;тонкий клиент&amp;quot; и его программная часть содержит минимальный набор функций, необходимых для отрисовки поля, обработки и передачи на сервер событий.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещена&#039;&#039;&#039; реализация серверной части на Python/Django или Flask!&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализовано создание игрового поля 10x10 с использованием технологии &amp;quot;тонкого клиента&amp;quot;.&lt;br /&gt;
* 0.6 балла. Игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников.&lt;br /&gt;
* 0.8 балла. Реализован игровой процесс игры для поля 10x10.&lt;br /&gt;
* 1.0 балл. Реализован игровой процесс для (почти) бесконечного поля.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №4 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 23 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать скрытие и извлечение коротких текстов, спрятанных в файлах изображений (это называется &amp;quot;стеганография&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Берём исходное изображение, и модифицируем его таким образом, что младшие биты разных цветовых компонент отдельных пикселей используются для хранения некоторых посторонних данных. В результате получаем новое изображение, которое мало отличается от исходного, и визуально трудно определить наличие посторонних данных. &lt;br /&gt;
&lt;br /&gt;
Формат изображений: BMP, 24 бит на пиксельных (RGB), сжатие НЕ используется. &lt;br /&gt;
&lt;br /&gt;
Формат текста: UTF-8, допускается отсечение строки текста в случае, когда размер изображения не позволяет внедрить строку целиком. &lt;br /&gt;
&lt;br /&gt;
Задание решается только на Erlang, использование готовых библиотек для работы с изображениями запрещено. &lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализованы функции внедрения и извлечения текстов. Полученное новое изображение должно корректно открываться стандартным графическим редактором, и визуально быть похожим на исходное. &lt;br /&gt;
* +0.1 балл. Корректно реализовано отсечение последовательности символов, размер которых больше одного байта. &lt;br /&gt;
* +0.1 балл. Функции оформлены в виде консольной программы, упакованной в один файл. &lt;br /&gt;
* +0.2 балла. Реализован веб-сервер, который обрабатывает GET-запросы на выдачу графического файла, принимая в качестве параметра текст, который нужно внедрить, и выдаёт преобразованное изображение. Допускается использование модуля inets или сервера cowboy. &lt;br /&gt;
* +0.1 балл. Сервер оформлен в виде стандартной OTP-поставки. &lt;br /&gt;
* +0.4 балла. В дополнение к формату BMP, поддерживается формат PNG (24bpp, метод сжатия zlib deflate). Допускается использование только функций стандартной библиотеки.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22639</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22639"/>
		<updated>2017-02-15T03:48:00Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: /* Домашние задания 2 и 3, дедлайн - до 16 марта */&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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №2 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 16 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать браузерную (front-end) часть приложения &amp;quot;Электронные таблицы&amp;quot; с возможностью вычисления выражений.&lt;br /&gt;
&lt;br /&gt;
Таблица имеет фиксированный размер 26 столбцов x 20 строк, столбцы нумеруются латинскими буквами от &#039;A&#039; до &#039;Z&#039;, строки нумеруются от 1 до 20.&lt;br /&gt;
Ячейки таблицы могут содержать: числа в десятичной записи, строки (текст) и формулы. Формулы начинаются с символа &#039;=&#039;, и их синтаксис эквивалентен Google-Таблицам.&lt;br /&gt;
&lt;br /&gt;
В ячейках, содержащих формулы, должны отображаться вычисленные значения формул, которые могут содержать арифметические выражения, ссылки на другие ячейки, и вызовы функций. Достаточно реализовать поддержку трех функций: ABS, SIN, LEN.&lt;br /&gt;
&lt;br /&gt;
Приложение не использует никакого взаимодействия с сервером, - он используется только для выдачи статического контента.&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.3 балла. Реализована электронная таблица с возможностью редактирования значений.&lt;br /&gt;
* 0.4 балла. Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval.&lt;br /&gt;
* 0.5 балла. При вычислении формул возможно использование значений других ячеек таблицы и функций.&lt;br /&gt;
* 0.8 балла. Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено.&lt;br /&gt;
* 0.9 балла. Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции.&lt;br /&gt;
* +0.1 балла. Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы.&lt;br /&gt;
* +0.2 балла. Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №3 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;21:00 16 марта&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать многопользовательскую браузерную игру &amp;quot;крестики-нолики на бесконечном поле&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Правила игры (известной также под названием &amp;quot;пять в ряд&amp;quot;): несколько игроков поочередно ставят свою отметку на свободной ячейке игрового поля. В случае, когда игрок ставит пять отметок в один ряд без пропусков (по вертикали, горизонтали, или одной из диагоналей) - он выиграл.&lt;br /&gt;
&lt;br /&gt;
В браузере отображается часть игрового поля размером 10x10 клеток. Само поле - теоретически бесконечное, на практике его размер ограничивается только разрядностью индексов клеток без использования арифметики длинных чисел. Игровое поле хранится на сервере, и отображается по мере необходимости (реализован скроллинг или кнопки навигации).&lt;br /&gt;
&lt;br /&gt;
Игра происходит в реальном времени, то есть все отметки, при стабильном и быстром Интернет-подключении, моментально отображаются на игровых полях других игроков.&lt;br /&gt;
&lt;br /&gt;
Приложение реализовано целиком на сервере, браузер используется только как &amp;quot;тонкий клиент&amp;quot; и его программная часть содержит минимальный набор функций, необходимых для отрисовки поля, обработки и передачи на сервер событий.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещена&#039;&#039;&#039; реализация серверной части на Python/Django или Flask!&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализовано создание игрового поля 10x10 с использованием технологии &amp;quot;тонкого клиента&amp;quot;.&lt;br /&gt;
* 0.6 балла. Игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников.&lt;br /&gt;
* 0.8 балла. Реализован игровой процесс игры для поля 10x10.&lt;br /&gt;
* 1.0 балл. Реализован игровой процесс для (почти) бесконечного поля.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22393</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22393"/>
		<updated>2017-01-21T12:15:29Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22391</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22391"/>
		<updated>2017-01-21T08:22:28Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
void Object_SetAllowDeleteChildren(bool v);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22390</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22390"/>
		<updated>2017-01-21T08:20:22Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: /* Домашнее задание №1 */&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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для языка Си используется стандарт ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
void Object_SetAllowDeleteChildren(bool v);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22389</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22389"/>
		<updated>2017-01-21T08:14:28Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для языка Си используется стандарт ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22347</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22347"/>
		<updated>2017-01-17T19:20:53Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: ДЗ-1&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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &#039;&#039;&#039;19:00 2 февраля&#039;&#039;&#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для языка Си используется стандарт ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запрещено&#039;&#039;&#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22325</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22325"/>
		<updated>2017-01-14T09:33:34Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22287</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22287"/>
		<updated>2017-01-11T16:25:29Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22286</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22286"/>
		<updated>2017-01-11T13:00:53Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &#039;&#039;&#039;TBA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &#039;&#039;&#039;приватном&#039;&#039;&#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &#039;&#039;&#039;и ассистенту&#039;&#039;&#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22285</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22285"/>
		<updated>2017-01-11T12:55:10Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &#039;&#039;&#039;TBA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TBA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22284</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22284"/>
		<updated>2017-01-11T12:27:11Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &#039;&#039;&#039;TBA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TBA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22283</id>
		<title>ЯРПО</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=22283"/>
		<updated>2017-01-11T12:11:45Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Новая страница: «= Общая информация =  Формальное название курса: Языки разработки программного обеспечен…»&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;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: &#039;&#039;&#039;TBA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &#039;&#039;&#039;TBA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TBA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9E_%D1%84%D0%B0%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D0%B5%D1%82%D0%B5&amp;diff=22282</id>
		<title>О факультете</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9E_%D1%84%D0%B0%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D0%B5%D1%82%D0%B5&amp;diff=22282"/>
		<updated>2017-01-11T11:32:33Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
== Учебные курсы факультета компьютерных наук==&lt;br /&gt;
&lt;br /&gt;
=== Курсы за 2016/17 учебный год ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1 курс !! 2 курс !! 3-4 курс !! майноры&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
[[Математический анализ на ПМИ_2016/2017 | Математический анализ на ПМИ (пилотный поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Линейная алгебра и геометрия_2016/2017 | Линейная алгебра и геометрия на ПМИ]]&lt;br /&gt;
&lt;br /&gt;
[[Дискретная_математика_1_2016/2017 | Дискретная математика-1 на ПМИ]]&lt;br /&gt;
&lt;br /&gt;
[[Основы и методология программирования_2016/2017_пилотный_поток | Основы и методология программирования на ПМИ (пилотный поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Основы и методология программирования_2016/2017 | Основы и методология программирования на ПМИ (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы_и_структуры_данных_на_ПМИ_(пилотный_поток) | Алгоритмы и структуры данных на ПМИ (пилотный поток)]]&lt;br /&gt;
&lt;br /&gt;
[http://hsealgebra17.wikidot.com/ Алгебра на ПИ]&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
[[Математический анализ_2016/2017 | Математический анализ-3 на ПМИ (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Математически_анализ_3_на_ПМИ_(пилотный_поток) | Математический анализ-3 на ПМИ (пилотный поток)]]&lt;br /&gt;
&lt;br /&gt;
[[DM_2_2016_2017 | Дискретная математика-2 на ПМИ (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Дискретная математика_2_2016/2017 | Дискретная математика-2 на ПМИ (пилотный поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Алгоритмы и структуры данных_2_2016/2017 | Алгоритмы и структуры данных – 2 на ПМИ (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Теория вероятностей_2016/2017 | Теория вероятностей на ПМИ (основной поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Теория_вероятностей_2016/2017_(пилотный_поток) | Теория вероятностей на ПМИ (пилотный поток)]]&lt;br /&gt;
&lt;br /&gt;
[[Архитектура_компьютеров_и_операционные_системы_2016/2017 | Архитектура компьютеров и операционные системы]]&lt;br /&gt;
&lt;br /&gt;
[[Факультатив_теория_вычислений_2016/2017 | Факультатив теория вычислений на ПМИ]]&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_теории_вероятностей_(факультатив,_2017) | Дополнительные главы теории вероятностей (факультатив)]]&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
[[НИС_Машинное_обучение_и_приложения_2016/2017 | НИС Машинное обучение и приложения на ПМИ]]&lt;br /&gt;
&lt;br /&gt;
[[Машинное_обучение_1 | Машинное обучение 1 на ПМИ]]&lt;br /&gt;
&lt;br /&gt;
[[Машинное_обучение_2 | Машинное обучение 2 на ПМИ]]&lt;br /&gt;
&lt;br /&gt;
[[Прикладной_статистический_анализ_данных | Прикладной статистический анализ данных на ПМИ]]&lt;br /&gt;
&lt;br /&gt;
[[Численные_методы_в_анализе_данных | Численные методы в анализе данных на ПМИ]]&lt;br /&gt;
&lt;br /&gt;
[[НИС_Распределенные_системы_(осень_2016) | НИС Распределенные системы]]&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;
&lt;br /&gt;
[[Майнор_Интеллектуальный_анализ_данных/Введение_в_программирование_2016/2017 | Введение в программирование (курс майнора)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|width=100%&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Первая колонка --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Курсы за 2015/16 учебный год ===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| [[Технологии программирования|Технологии программирования на ПМИ]]&lt;br /&gt;
|-&lt;br /&gt;
|[[ОиМП-2015|Основы и методология программирования на ПМИ]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Алгоритмы и структуры данных]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Линейная алгебра и геометрия_2015/2016 | Линейная алгебра и геометрия на ПМИ]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Алгебра_2015/2016 | Алгебра на ПМИ]]&lt;br /&gt;
|-&lt;br /&gt;
|[http://hsealgebra.wikidot.com/ Алгебра на ПИ]&lt;br /&gt;
|-&lt;br /&gt;
|[[Компьютерные системы]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Математический анализ на ПМИ_2015/2016 | Математический анализ на ПМИ]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Факультатив_Матпрактикум | Матпрактикум (факультатив) на ПМИ]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Data analysis (Software Engineering)]]&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;
|-&lt;br /&gt;
|[[Архитектура компьютеров и системное программирование (ПМИ_4, 2015/2016)|Архитектура компьютеров и системное программирование (4 курс)]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Дифференциальные уравнения (2 курс, 2015/2016)| Дифференциальные уравнения]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Введение в VBA|Введение в VBA]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Вторая колонка --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Курсы за 2014/15 учебный год ===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Основы и методологии программирования]]&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Алгоритмы и структуры данных 2015 | Алгоритмы и структуры данных]]&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Анализ данных (Программная инженерия)]]&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Алгебра_2014/2015 | Алгебра]]&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Magolego_sna_2015| MAGoLEGO Social Network Analysis]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Проектная работа ====&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Проектная работа]] &amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Учебная практика 1 курс (2016)]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Проектная работа 2 курс (2016)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Завершение двухколоночной таблицы --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Мероприятия факультета компьютерных наук ==&lt;br /&gt;
=== Summer School 2015 ===&lt;br /&gt;
[[Introduction to Natural Language Processing|Introduction to Natural Language Processing]]&lt;br /&gt;
#[[Lecture 1. Introduction|Introduction]]&lt;br /&gt;
#[[Lecture 2. Tokenization and word counts|Tokenization and word counts]]&lt;br /&gt;
#[[Lecture 3. POS tagging. Key word and phrase extraction|POS tagging. Key word and phrase extraction]]&lt;br /&gt;
#[[Lecture 4. Parsing|Parsing]]&lt;br /&gt;
#[[Lecture 5. Language sources|Language sources]]&lt;br /&gt;
#[[Lecture 6. Synonyms and near-synonyms detection|Synonyms and near-synonyms detection]]&lt;br /&gt;
#[[Lecture 8. Suffix trees for NLP|Suffix trees for NLP]]&lt;br /&gt;
#[[NLP References|References]]&lt;br /&gt;
&lt;br /&gt;
== Архив ==&lt;br /&gt;
* [[Учебная практика 1 курс (2015)]]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21633</id>
		<title>Сервис коллективной работы (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21633"/>
		<updated>2016-11-08T11:41:32Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Сервис коллективной работы&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&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;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5&lt;br /&gt;
&lt;br /&gt;
2. Понимание основ работы с нереляционными базами данных&lt;br /&gt;
&lt;br /&gt;
3. Понимание принципов работы одной из систем контроля версий, например git&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. NoSQL система управления базами данных, на выбор студента&lt;br /&gt;
&lt;br /&gt;
2. Любой веб-фреймворк, на усмотрение студента, ориентированный на одновременную обработку большого количества соединений.&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
&lt;br /&gt;
2. Внутреннее устройство систем контроля версий&lt;br /&gt;
&lt;br /&gt;
3. Введение в проблему “10K одновременных соединений”&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Documents или Google Spreadsheets.&lt;br /&gt;
&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;
9 баллов - гарантируется фиксированное максимальное время уведомления всех пользователей о внесении изменения в редактируемый документ одним из пользователей. Подготовлена система тестов для определения этого времени t при N одновременных подключениях к сервису и k одновременных попытках редактирования одного и того же документа.&lt;br /&gt;
&lt;br /&gt;
10 баллов - выполнение сервиса на современном ноутбуке под управлением ОС Linux гарантирует время ответа не более 500 мс при одновременном подключении не менее 1000 пользователей.&lt;br /&gt;
&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
По договоренности.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21632</id>
		<title>Электронные таблицы в браузере (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21632"/>
		<updated>2016-11-08T11:41:20Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Электронные таблицы в браузере&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Реализовать онлайн вариант программы для работы с электронными таблицами (упрощенный аналог Google Spreadsheets или Microsoft Excel Online).&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Проектированию и разработке клиентской части веб-приложений&lt;br /&gt;
&lt;br /&gt;
2. Основам синтаксического анализа&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5 (WebSocket, Canvas и т.д.)&lt;br /&gt;
&lt;br /&gt;
2. Уверенное знание языка JavaScript&lt;br /&gt;
&lt;br /&gt;
3. Опыт работы с одним из клиентских веб-фреймворков (Polymer, Angular, React и др.)&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. Преимущественно JavaScript и любой frontend-фреймворк на усмотрение студента&lt;br /&gt;
&lt;br /&gt;
2. Django для реализации серверной части&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
&lt;br /&gt;
2. Практические аспекты формальных грамматик&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Spreadsheets.&lt;br /&gt;
&lt;br /&gt;
=== Критерии оценки ===&lt;br /&gt;
4 балла - реализовано отображение и редактирование электронной таблицы размер которой не превышает 26x255 ячеек. Данные электронной таблицы сохраняются на сервере и могут быть с него восстановлены.&lt;br /&gt;
&lt;br /&gt;
5 баллов - реализованы базовые операции форматирования ячеек (шрифт, цвет).&lt;br /&gt;
&lt;br /&gt;
6 баллов - возможность работы с таблицами больших размеров (до 36#ZZ столбцов, не менее 1000 строк) без заметного замедления работы на обычном ноутбуке.&lt;br /&gt;
&lt;br /&gt;
7 баллов - возможность закрепления пользователем определенного количества столбцов или строк для постоянного отображения на экране вне зависимости от положения прокрутки.&lt;br /&gt;
&lt;br /&gt;
8 баллов - вычисление выражений в ячейках.&lt;br /&gt;
&lt;br /&gt;
9 баллов - вычисляемые выражения в ячейках могут содержать ссылки на другие ячейки.&lt;br /&gt;
&lt;br /&gt;
10 баллов - при вычислении выражений в ячейках, пользователь в принципе не может выполнить произвольный JavaScript код, то есть вычисление выражений реализовано самостоятельно, без использования функции eval.&lt;br /&gt;
&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
По договоренности.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21630</id>
		<title>Кэширующий веб-сервер (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21630"/>
		<updated>2016-11-08T11:21:49Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Кэширующий веб-сервер&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=15&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&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. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию нитей в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
4. Работать с очередью ядра Linux и FreeBSD&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++ &lt;br /&gt;
&lt;br /&gt;
2. Умение пользоваться виртуальными машинами&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только низкоуровневые API систем Linux и FreeBSD.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы, использую механизм epoll/kqueue&lt;br /&gt;
&lt;br /&gt;
6 баллов. Сервер умеет перенаправлять запрос другому серверу и передавать обратно ответ&lt;br /&gt;
&lt;br /&gt;
8 баллов. Реализована корректная работа с использованием нескольких нитей&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка WebSocket-прокси&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
&lt;br /&gt;
Аудитории: 432 (вторник), 322 (суббота)&lt;br /&gt;
&lt;br /&gt;
1 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
5 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
8 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
19 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
29 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
3 декабря (суббота) - 12:10-13:30&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21629</id>
		<title>Веб-сервер с функциональностью CGI (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21629"/>
		<updated>2016-11-08T11:21:13Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Веб-сервер с функциональностью CGI&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=23&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Введение&lt;br /&gt;
&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность. &lt;br /&gt;
&lt;br /&gt;
Что требуется&lt;br /&gt;
&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
Требования к серверу: Уметь выдавать как статический, так и динамический контент; уметь обрабатывать ошибки.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию процессов в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только POSIX.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
&lt;br /&gt;
6 баллов. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
&lt;br /&gt;
9 баллов. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка POST-запросов&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
&lt;br /&gt;
Аудитории: 432 (вторник), 322 (суббота)&lt;br /&gt;
&lt;br /&gt;
1 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
5 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
8 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
19 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
29 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
3 декабря (суббота) - 12:10-13:30&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21593</id>
		<title>Кэширующий веб-сервер (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21593"/>
		<updated>2016-11-05T10:44:05Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Кэширующий веб-сервер&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=15&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&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. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию нитей в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
4. Работать с очередью ядра Linux и FreeBSD&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++ &lt;br /&gt;
&lt;br /&gt;
2. Умение пользоваться виртуальными машинами&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только низкоуровневые API систем Linux и FreeBSD.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы, использую механизм epoll/kqueue&lt;br /&gt;
&lt;br /&gt;
6 баллов. Сервер умеет перенаправлять запрос другому серверу и передавать обратно ответ&lt;br /&gt;
&lt;br /&gt;
8 баллов. Реализована корректная работа с использованием нескольких нитей&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка WebSocket-прокси&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
&lt;br /&gt;
Аудитории: 432 (вторник), 322 (суббота)&lt;br /&gt;
&lt;br /&gt;
1 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
5 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
8 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
19 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
22 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
3 декабря (суббота) - 12:10-13:30&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21592</id>
		<title>Веб-сервер с функциональностью CGI (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21592"/>
		<updated>2016-11-05T10:43:40Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Веб-сервер с функциональностью CGI&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=23&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Введение&lt;br /&gt;
&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность. &lt;br /&gt;
&lt;br /&gt;
Что требуется&lt;br /&gt;
&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
Требования к серверу: Уметь выдавать как статический, так и динамический контент; уметь обрабатывать ошибки.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию процессов в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только POSIX.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
&lt;br /&gt;
6 баллов. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
&lt;br /&gt;
9 баллов. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка POST-запросов&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
&lt;br /&gt;
Аудитории: 432 (вторник), 322 (суббота)&lt;br /&gt;
&lt;br /&gt;
1 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
5 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
8 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
19 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
22 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
3 декабря (суббота) - 12:10-13:30&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21551</id>
		<title>Кэширующий веб-сервер (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21551"/>
		<updated>2016-11-02T11:16:20Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Кэширующий веб-сервер&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=15&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&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. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию нитей в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
4. Работать с очередью ядра Linux и FreeBSD&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++ &lt;br /&gt;
&lt;br /&gt;
2. Умение пользоваться виртуальными машинами&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только низкоуровневые API систем Linux и FreeBSD.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы, использую механизм epoll/kqueue&lt;br /&gt;
&lt;br /&gt;
6 баллов. Сервер умеет перенаправлять запрос другому серверу и передавать обратно ответ&lt;br /&gt;
&lt;br /&gt;
8 баллов. Реализована корректная работа с использованием нескольких нитей&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка WebSocket-прокси&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
&lt;br /&gt;
1 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
5 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
8 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
19 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
22 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
3 декабря (суббота) - 12:10-13:30&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21550</id>
		<title>Веб-сервер с функциональностью CGI (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21550"/>
		<updated>2016-11-02T11:15:56Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Веб-сервер с функциональностью CGI&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=23&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Введение&lt;br /&gt;
&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность. &lt;br /&gt;
&lt;br /&gt;
Что требуется&lt;br /&gt;
&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
Требования к серверу: Уметь выдавать как статический, так и динамический контент; уметь обрабатывать ошибки.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию процессов в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только POSIX.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
&lt;br /&gt;
6 баллов. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
&lt;br /&gt;
9 баллов. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка POST-запросов&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
&lt;br /&gt;
1 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
5 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
8 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
19 ноября (суббота) - 12:10-13:30&lt;br /&gt;
&lt;br /&gt;
22 ноября (вторник) - две пары: 15:10-16:30, 16:40-18:00&lt;br /&gt;
&lt;br /&gt;
3 декабря (суббота) - 12:10-13:30&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21548</id>
		<title>Сервис коллективной работы (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21548"/>
		<updated>2016-11-02T11:08:28Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Сервис коллективной работы&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&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;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5&lt;br /&gt;
&lt;br /&gt;
2. Понимание основ работы с нереляционными базами данных&lt;br /&gt;
&lt;br /&gt;
3. Понимание принципов работы одной из систем контроля версий, например git&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. NoSQL система управления базами данных, на выбор студента&lt;br /&gt;
&lt;br /&gt;
2. Любой веб-фреймворк, на усмотрение студента, ориентированный на одновременную обработку большого количества соединений.&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
&lt;br /&gt;
2. Внутреннее устройство систем контроля версий&lt;br /&gt;
&lt;br /&gt;
3. Введение в проблему “10K одновременных соединений”&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Documents или Google Spreadsheets.&lt;br /&gt;
&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;
9 баллов - гарантируется фиксированное максимальное время уведомления всех пользователей о внесении изменения в редактируемый документ одним из пользователей. Подготовлена система тестов для определения этого времени t при N одновременных подключениях к сервису и k одновременных попытках редактирования одного и того же документа.&lt;br /&gt;
&lt;br /&gt;
10 баллов - выполнение сервиса на современном ноутбуке под управлением ОС Linux гарантирует время ответа не более 500 мс при одновременном подключении не менее 1000 пользователей.&lt;br /&gt;
&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21547</id>
		<title>Электронные таблицы в браузере (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21547"/>
		<updated>2016-11-02T11:08:18Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Электронные таблицы в браузере&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Реализовать онлайн вариант программы для работы с электронными таблицами (упрощенный аналог Google Spreadsheets или Microsoft Excel Online).&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Проектированию и разработке клиентской части веб-приложений&lt;br /&gt;
&lt;br /&gt;
2. Основам синтаксического анализа&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5 (WebSocket, Canvas и т.д.)&lt;br /&gt;
&lt;br /&gt;
2. Уверенное знание языка JavaScript&lt;br /&gt;
&lt;br /&gt;
3. Опыт работы с одним из клиентских веб-фреймворков (Polymer, Angular, React и др.)&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. Преимущественно JavaScript и любой frontend-фреймворк на усмотрение студента&lt;br /&gt;
&lt;br /&gt;
2. Django для реализации серверной части&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
&lt;br /&gt;
2. Практические аспекты формальных грамматик&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Spreadsheets.&lt;br /&gt;
&lt;br /&gt;
=== Критерии оценки ===&lt;br /&gt;
4 балла - реализовано отображение и редактирование электронной таблицы размер которой не превышает 26x255 ячеек. Данные электронной таблицы сохраняются на сервере и могут быть с него восстановлены.&lt;br /&gt;
&lt;br /&gt;
5 баллов - реализованы базовые операции форматирования ячеек (шрифт, цвет).&lt;br /&gt;
&lt;br /&gt;
6 баллов - возможность работы с таблицами больших размеров (до 36#ZZ столбцов, не менее 1000 строк) без заметного замедления работы на обычном ноутбуке.&lt;br /&gt;
&lt;br /&gt;
7 баллов - возможность закрепления пользователем определенного количества столбцов или строк для постоянного отображения на экране вне зависимости от положения прокрутки.&lt;br /&gt;
&lt;br /&gt;
8 баллов - вычисление выражений в ячейках.&lt;br /&gt;
&lt;br /&gt;
9 баллов - вычисляемые выражения в ячейках могут содержать ссылки на другие ячейки.&lt;br /&gt;
&lt;br /&gt;
10 баллов - при вычислении выражений в ячейках, пользователь в принципе не может выполнить произвольный JavaScript код, то есть вычисление выражений реализовано самостоятельно, без использования функции eval.&lt;br /&gt;
&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21546</id>
		<title>Кэширующий веб-сервер (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21546"/>
		<updated>2016-11-02T11:07:50Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Кэширующий веб-сервер&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=15&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&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. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию нитей в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
4. Работать с очередью ядра Linux и FreeBSD&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++ &lt;br /&gt;
&lt;br /&gt;
2. Умение пользоваться виртуальными машинами&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только низкоуровневые API систем Linux и FreeBSD.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы, использую механизм epoll/kqueue&lt;br /&gt;
&lt;br /&gt;
6 баллов. Сервер умеет перенаправлять запрос другому серверу и передавать обратно ответ&lt;br /&gt;
&lt;br /&gt;
8 баллов. Реализована корректная работа с использованием нескольких нитей&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка WebSocket-прокси&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21545</id>
		<title>Веб-сервер с функциональностью CGI (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21545"/>
		<updated>2016-11-02T11:07:27Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Веб-сервер с функциональностью CGI&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=23&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
Нужно создать &#039;&#039;&#039;приватный&#039;&#039;&#039; репозиторий в BitBucket или GitHub, и добавить в collaborators ментора:&lt;br /&gt;
&lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
После этого - заполнить форму [https://goo.gl/forms/lzoRPbyyWJskFc2j2 https://goo.gl/forms/lzoRPbyyWJskFc2j2], в которой нужно указать ссылку на страницу с репозиторием.&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Введение&lt;br /&gt;
&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность. &lt;br /&gt;
&lt;br /&gt;
Что требуется&lt;br /&gt;
&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
Требования к серверу: Уметь выдавать как статический, так и динамический контент; уметь обрабатывать ошибки.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию процессов в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только POSIX.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
&lt;br /&gt;
6 баллов. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
&lt;br /&gt;
9 баллов. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка POST-запросов&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21469</id>
		<title>Сервис коллективной работы (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21469"/>
		<updated>2016-10-28T12:33:12Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Telegram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Сервис коллективной работы&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&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;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5&lt;br /&gt;
&lt;br /&gt;
2. Понимание основ работы с нереляционными базами данных&lt;br /&gt;
&lt;br /&gt;
3. Понимание принципов работы одной из систем контроля версий, например git&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. NoSQL система управления базами данных, на выбор студента&lt;br /&gt;
&lt;br /&gt;
2. Любой веб-фреймворк, на усмотрение студента, ориентированный на одновременную обработку большого количества соединений.&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
&lt;br /&gt;
2. Внутреннее устройство систем контроля версий&lt;br /&gt;
&lt;br /&gt;
3. Введение в проблему “10K одновременных соединений”&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Documents или Google Spreadsheets.&lt;br /&gt;
&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;
9 баллов - гарантируется фиксированное максимальное время уведомления всех пользователей о внесении изменения в редактируемый документ одним из пользователей. Подготовлена система тестов для определения этого времени t при N одновременных подключениях к сервису и k одновременных попытках редактирования одного и того же документа.&lt;br /&gt;
&lt;br /&gt;
10 баллов - выполнение сервиса на современном ноутбуке под управлением ОС Linux гарантирует время ответа не более 500 мс при одновременном подключении не менее 1000 пользователей.&lt;br /&gt;
&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21468</id>
		<title>Электронные таблицы в браузере (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21468"/>
		<updated>2016-10-28T12:32:08Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Telegram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Электронные таблицы в браузере&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Реализовать онлайн вариант программы для работы с электронными таблицами (упрощенный аналог Google Spreadsheets или Microsoft Excel Online).&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Проектированию и разработке клиентской части веб-приложений&lt;br /&gt;
&lt;br /&gt;
2. Основам синтаксического анализа&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5 (WebSocket, Canvas и т.д.)&lt;br /&gt;
&lt;br /&gt;
2. Уверенное знание языка JavaScript&lt;br /&gt;
&lt;br /&gt;
3. Опыт работы с одним из клиентских веб-фреймворков (Polymer, Angular, React и др.)&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. Преимущественно JavaScript и любой frontend-фреймворк на усмотрение студента&lt;br /&gt;
&lt;br /&gt;
2. Django для реализации серверной части&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
&lt;br /&gt;
2. Практические аспекты формальных грамматик&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Spreadsheets.&lt;br /&gt;
&lt;br /&gt;
=== Критерии оценки ===&lt;br /&gt;
4 балла - реализовано отображение и редактирование электронной таблицы размер которой не превышает 26x255 ячеек. Данные электронной таблицы сохраняются на сервере и могут быть с него восстановлены.&lt;br /&gt;
&lt;br /&gt;
5 баллов - реализованы базовые операции форматирования ячеек (шрифт, цвет).&lt;br /&gt;
&lt;br /&gt;
6 баллов - возможность работы с таблицами больших размеров (до 36#ZZ столбцов, не менее 1000 строк) без заметного замедления работы на обычном ноутбуке.&lt;br /&gt;
&lt;br /&gt;
7 баллов - возможность закрепления пользователем определенного количества столбцов или строк для постоянного отображения на экране вне зависимости от положения прокрутки.&lt;br /&gt;
&lt;br /&gt;
8 баллов - вычисление выражений в ячейках.&lt;br /&gt;
&lt;br /&gt;
9 баллов - вычисляемые выражения в ячейках могут содержать ссылки на другие ячейки.&lt;br /&gt;
&lt;br /&gt;
10 баллов - при вычислении выражений в ячейках, пользователь в принципе не может выполнить произвольный JavaScript код, то есть вычисление выражений реализовано самостоятельно, без использования функции eval.&lt;br /&gt;
&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21467</id>
		<title>Кэширующий веб-сервер (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21467"/>
		<updated>2016-10-28T12:31:40Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Telegram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Кэшироющий веб-сервер&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=15&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&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. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию нитей в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
4. Работать с очередью ядра Linux и FreeBSD&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++ &lt;br /&gt;
&lt;br /&gt;
2. Умение пользоваться виртуальными машинами&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только низкоуровневые API систем Linux и FreeBSD.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы, использую механизм epoll/kqueue&lt;br /&gt;
&lt;br /&gt;
6 баллов. Сервер умеет перенаправлять запрос другому серверу и передавать обратно ответ&lt;br /&gt;
&lt;br /&gt;
8 баллов. Реализована корректная работа с использованием нескольких нитей&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка WebSocket-прокси&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21466</id>
		<title>Веб-сервер с функциональностью CGI (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21466"/>
		<updated>2016-10-28T12:31:00Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Добавлена ссылка на канал в Telegram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Веб-сервер с функциональностью CGI&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=23&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Контактная информация ===&lt;br /&gt;
&lt;br /&gt;
Канал в Telegram для объявлений: [https://telegram.me/hse_cs_projects_15x_yacovlev @hse_cs_projects_15x_yacovlev]&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Введение&lt;br /&gt;
&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность. &lt;br /&gt;
&lt;br /&gt;
Что требуется&lt;br /&gt;
&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
Требования к серверу: Уметь выдавать как статический, так и динамический контент; уметь обрабатывать ошибки.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию процессов в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только POSIX.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
&lt;br /&gt;
6 баллов. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
&lt;br /&gt;
9 баллов. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка POST-запросов&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21036</id>
		<title>Кэширующий веб-сервер (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=21036"/>
		<updated>2016-10-07T08:00:06Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Исправлена содержательная ошибка в критерии оценивания&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Кэшироющий веб-сервер&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=15&lt;br /&gt;
|categorize=yes&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;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Взаимодействию нитей в Unix&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
4. Работать с очередью ядра Linux и FreeBSD&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++ &lt;br /&gt;
&lt;br /&gt;
2. Умение пользоваться виртуальными машинами&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только низкоуровневые API систем Linux и FreeBSD.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы, использую механизм epoll/kqueue&lt;br /&gt;
&lt;br /&gt;
6 баллов. Сервер умеет перенаправлять запрос другому серверу и передавать обратно ответ&lt;br /&gt;
&lt;br /&gt;
8 баллов. Реализована корректная работа с использованием нескольких нитей&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована поддержка WebSocket-прокси&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=20845</id>
		<title>Сервис коллективной работы (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=20845"/>
		<updated>2016-09-30T12:39:25Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Новая страница, с помощью формы Новый_проект&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Сервис коллективной работы&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&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;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5&lt;br /&gt;
&lt;br /&gt;
2. Понимание основ работы с нереляционными базами данных&lt;br /&gt;
&lt;br /&gt;
3. Понимание принципов работы одной из систем контроля версий, например git&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. NoSQL система управления базами данных, на выбор студента&lt;br /&gt;
&lt;br /&gt;
2. Любой веб-фреймворк, на усмотрение студента, ориентированный на одновременную обработку большого количества соединений.&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
&lt;br /&gt;
2. Внутреннее устройство систем контроля версий&lt;br /&gt;
&lt;br /&gt;
3. Введение в проблему “10K одновременных соединений”&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Documents или Google Spreadsheets.&lt;br /&gt;
&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;
9 баллов - гарантируется фиксированное максимальное время уведомления всех пользователей о внесении изменения в редактируемый документ одним из пользователей. Подготовлена система тестов для определения этого времени t при N одновременных подключениях к сервису и k одновременных попытках редактирования одного и того же документа.&lt;br /&gt;
&lt;br /&gt;
10 баллов - выполнение сервиса на современном ноутбуке под управлением ОС Linux гарантирует время ответа не более 500 мс при одновременном подключении не менее 1000 пользователей.&lt;br /&gt;
&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=20844</id>
		<title>Электронные таблицы в браузере (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=20844"/>
		<updated>2016-09-30T12:36:22Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Электронные таблицы в браузере&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Реализовать онлайн вариант программы для работы с электронными таблицами (упрощенный аналог Google Spreadsheets или Microsoft Excel Online).&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Проектированию и разработке клиентской части веб-приложений&lt;br /&gt;
&lt;br /&gt;
2. Основам синтаксического анализа&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5 (WebSocket, Canvas и т.д.)&lt;br /&gt;
&lt;br /&gt;
2. Уверенное знание языка JavaScript&lt;br /&gt;
&lt;br /&gt;
3. Опыт работы с одним из клиентских веб-фреймворков (Polymer, Angular, React и др.)&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. Преимущественно JavaScript и любой frontend-фреймворк на усмотрение студента&lt;br /&gt;
&lt;br /&gt;
2. Django для реализации серверной части&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
&lt;br /&gt;
2. Практические аспекты формальных грамматик&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Spreadsheets.&lt;br /&gt;
&lt;br /&gt;
=== Критерии оценки ===&lt;br /&gt;
4 балла - реализовано отображение и редактирование электронной таблицы размер которой не превышает 26x255 ячеек. Данные электронной таблицы сохраняются на сервере и могут быть с него восстановлены.&lt;br /&gt;
&lt;br /&gt;
5 баллов - реализованы базовые операции форматирования ячеек (шрифт, цвет).&lt;br /&gt;
&lt;br /&gt;
6 баллов - возможность работы с таблицами больших размеров (до 36#ZZ столбцов, не менее 1000 строк) без заметного замедления работы на обычном ноутбуке.&lt;br /&gt;
&lt;br /&gt;
7 баллов - возможность закрепления пользователем определенного количества столбцов или строк для постоянного отображения на экране вне зависимости от положения прокрутки.&lt;br /&gt;
&lt;br /&gt;
8 баллов - вычисление выражений в ячейках.&lt;br /&gt;
&lt;br /&gt;
9 баллов - вычисляемые выражения в ячейках могут содержать ссылки на другие ячейки.&lt;br /&gt;
&lt;br /&gt;
10 баллов - при вычислении выражений в ячейках, пользователь в принципе не может выполнить произвольный JavaScript код, то есть вычисление выражений реализовано самостоятельно, без использования функции eval.&lt;br /&gt;
&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=20843</id>
		<title>Электронные таблицы в браузере (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=20843"/>
		<updated>2016-09-30T12:35:50Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: /* Чему вы научитесь? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Электронные таблицы в браузере&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Реализовать онлайн вариант программы для работы с электронными таблицами (упрощенный аналог Google Spreadsheets или Microsoft Excel Online).&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Проектированию и разработке клиентской части веб-приложений&lt;br /&gt;
&lt;br /&gt;
2. Основам синтаксического анализа&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5 (WebSocket, Canvas и т.д.)&lt;br /&gt;
2. Уверенное знание языка JavaScript&lt;br /&gt;
3. Опыт работы с одним из клиентских веб-фреймворков (Polymer, Angular, React и др.)&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. Преимущественно JavaScript и любой frontend-фреймворк на усмотрение студента&lt;br /&gt;
2. Django для реализации серверной части&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
2. Практические аспекты формальных грамматик&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Spreadsheets.&lt;br /&gt;
&lt;br /&gt;
=== Критерии оценки ===&lt;br /&gt;
4 балла - реализовано отображение и редактирование электронной таблицы размер которой не превышает 26x255 ячеек. Данные электронной таблицы сохраняются на сервере и могут быть с него восстановлены.&lt;br /&gt;
5 баллов - реализованы базовые операции форматирования ячеек (шрифт, цвет).&lt;br /&gt;
6 баллов - возможность работы с таблицами больших размеров (до 36#ZZ столбцов, не менее 1000 строк) без заметного замедления работы на обычном ноутбуке.&lt;br /&gt;
7 баллов - возможность закрепления пользователем определенного количества столбцов или строк для постоянного отображения на экране вне зависимости от положения прокрутки.&lt;br /&gt;
8 баллов - вычисление выражений в ячейках.&lt;br /&gt;
9 баллов - вычисляемые выражения в ячейках могут содержать ссылки на другие ячейки.&lt;br /&gt;
10 баллов - при вычислении выражений в ячейках, пользователь в принципе не может выполнить произвольный JavaScript код, то есть вычисление выражений реализовано самостоятельно, без использования функции eval.&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=20842</id>
		<title>Электронные таблицы в браузере (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B2_%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=20842"/>
		<updated>2016-09-30T12:35:23Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Новая страница, с помощью формы Новый_проект&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Электронные таблицы в браузере&lt;br /&gt;
|mentor=Яковлев Виктор&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=1&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Реализовать онлайн вариант программы для работы с электронными таблицами (упрощенный аналог Google Spreadsheets или Microsoft Excel Online).&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Проектированию и разработке клиентской части веб-приложений&lt;br /&gt;
2. Основам синтаксического анализа&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Знание современных технологий HTML5 (WebSocket, Canvas и т.д.)&lt;br /&gt;
2. Уверенное знание языка JavaScript&lt;br /&gt;
3. Опыт работы с одним из клиентских веб-фреймворков (Polymer, Angular, React и др.)&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
1. Преимущественно JavaScript и любой frontend-фреймворк на усмотрение студента&lt;br /&gt;
2. Django для реализации серверной части&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
1. Введение в задачу&lt;br /&gt;
2. Практические аспекты формальных грамматик&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Возможна реализация веб-приложения, функционально эквивалентного Google Spreadsheets.&lt;br /&gt;
&lt;br /&gt;
=== Критерии оценки ===&lt;br /&gt;
4 балла - реализовано отображение и редактирование электронной таблицы размер которой не превышает 26x255 ячеек. Данные электронной таблицы сохраняются на сервере и могут быть с него восстановлены.&lt;br /&gt;
5 баллов - реализованы базовые операции форматирования ячеек (шрифт, цвет).&lt;br /&gt;
6 баллов - возможность работы с таблицами больших размеров (до 36#ZZ столбцов, не менее 1000 строк) без заметного замедления работы на обычном ноутбуке.&lt;br /&gt;
7 баллов - возможность закрепления пользователем определенного количества столбцов или строк для постоянного отображения на экране вне зависимости от положения прокрутки.&lt;br /&gt;
8 баллов - вычисление выражений в ячейках.&lt;br /&gt;
9 баллов - вычисляемые выражения в ячейках могут содержать ссылки на другие ячейки.&lt;br /&gt;
10 баллов - при вычислении выражений в ячейках, пользователь в принципе не может выполнить произвольный JavaScript код, то есть вычисление выражений реализовано самостоятельно, без использования функции eval.&lt;br /&gt;
Внимание: критерий на больший балл подразумевает выполнение всех предшествующих ему критериев с меньшим баллом.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано.&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=19925</id>
		<title>Кэширующий веб-сервер (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=19925"/>
		<updated>2016-08-19T18:26:44Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Новая страница, с помощью формы Новый_проект&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Кэшироющий веб-сервер&lt;br /&gt;
|mentor=Виктор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=15&lt;br /&gt;
|categorize=yes&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;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
2. Взаимодействию нитей в Unix&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
4. Работать с очередью ядра Linux и FreeBSD&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++ &lt;br /&gt;
2. Умение пользоваться виртуальными машинами&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только низкоуровневые API систем Linux и FreeBSD.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы, использую механизм epoll/kqueue&lt;br /&gt;
6 баллов. Сервер умеет перенаправлять запрос другому серверу и передавать обратно ответ&lt;br /&gt;
8 баллов. Реализована корректная работа с использованием нескольких нитей&lt;br /&gt;
+1 балл. Реализована поддержка POST-запросов&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=19924</id>
		<title>Веб-сервер с функциональностью CGI (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=19924"/>
		<updated>2016-08-19T18:25:20Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Новая страница, с помощью формы Новый_проект&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Веб-сервер с функциональностью CGI&lt;br /&gt;
|mentor=Витор Яковлев&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Осень 2016&lt;br /&gt;
|course=2&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=23&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Введение&lt;br /&gt;
&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность. &lt;br /&gt;
&lt;br /&gt;
Что требуется&lt;br /&gt;
&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
Требования к серверу: Уметь выдавать как статический, так и динамический контент; уметь обрабатывать ошибки.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
2. Взаимодействию процессов в Unix&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
Только POSIX.&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;
4 балла. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
6 баллов. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
9 баллов. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
+1 балл. Реализована поддержка POST-запросов&lt;br /&gt;
+1 балл. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
+1 балл. Сервер корректно обрабатывает ошибочные запросы&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания других занятий, которое еще не опубликовано&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5:_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=18758</id>
		<title>Веб-приложение: (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5:_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=18758"/>
		<updated>2016-02-07T17:35:47Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Справочник из MAN-страниц (веб-приложение)&lt;br /&gt;
|mentor=Яковлев Виктор Вадимович&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Весна 2016&lt;br /&gt;
|course=1&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=5&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Аккаунты ментора ===&lt;br /&gt;
Необходимо дать ментору права администратора на свой приватный репозиторий!&lt;br /&gt;
&lt;br /&gt;
BitBucket.org: &#039;&#039;&#039;victor_yacovlev&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
GitLab.com: &#039;&#039;&#039;v-yacovlev&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
GitHub.com: &#039;&#039;&#039;victor-yacovlev&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Страницы UNIX‑руководства (Man Pages) – это набор текстов документации по системе команд (группы 1, 6, 8), системным вызовам ядра (группа 2), стандартной библиотеке Си и POSIX (группы 3 и 3p), форматам файлов (группа 5). В UNIX-подобных системах отображение страницы выполняется с помощью команды &lt;br /&gt;
                man [номер_группы] имя_руководства; &lt;br /&gt;
результат отображается в терминале, из которого запущена команда. Физически man-страницы реализованы в виде обычного текста (как правило, сжатого с помощью gzip), который содержит специальные теги, которые описывают его структуру (заголовок, разделы, выделения цветом и шрифтом и т. д.).&lt;br /&gt;
Веб приложение – это программа, пользовательский интерфейс которой реализуется использованием веб-браузера. В отличии от набора обычных веб-страниц, приложения, как правило, реализуются с использованием одной страницы (Single Page Application).&lt;br /&gt;
&lt;br /&gt;
Требуется реализовать веб-приложение, реализующее каталогизированный справочник, состоящий из статей Man Pages. Приложение должно быть полностью реализовано средствами HTML, CSS и JavaScript (либо одним из других языков программирования, транслируемым в JavaScript), и для его работы не должны использоваться возможности веб-сервера, отличные от выдачи статического контента или генерации индекса каталога.&lt;br /&gt;
В качестве файлов данных необходимо использовать файлы из поставки Unix-подобной системы (формат groff, сжатый gzip) без предварительной модификации.&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;
* Знание основ языка разметки HTML.&lt;br /&gt;
&lt;br /&gt;
* Знание концепций процедурного и объектно-ориентированного программирования.&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
* Веб-фреймворк Polymer [https://www.polymer-project.org/1.0/]&lt;br /&gt;
&lt;br /&gt;
* Язык JavaScript, TypeScript [http://www.typescriptlang.org/] или Dart [https://www.dartlang.org/] на усмотрение исполнителя&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
* Введение в HTML/CSS/JavaScript, настройка рабочего окружения на базе WebStorm.&lt;br /&gt;
&lt;br /&gt;
* Компоненты в Polymer, создание с их помощью пользовательского интерфейса.&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Реализация поддержки других форматов справочной документации.&lt;br /&gt;
&lt;br /&gt;
=== Критерии оценки ===&lt;br /&gt;
4: Реализовано веб-приложение, отображающее каталог с содержимым, и содержание man-страниц в виде их исходного текста.&lt;br /&gt;
&lt;br /&gt;
6: Реализовано преобразование текста из groff в HTML.&lt;br /&gt;
&lt;br /&gt;
8: Реализована поддержка сжатых gzip страниц.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Интерфейс реализован в соответствии с требованиями концепции Google Material Design [https://www.google.com/design/spec/material-design/introduction.html]&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализован поиск по содержимому справочника.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Реализована корректная работа навигации средствами браузера (кнопка “Назад” работает правильно).&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=Jabber-Bot_%D0%B4%D0%BB%D1%8F_%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0_%D0%BA_UNIX-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=18757</id>
		<title>Jabber-Bot для организации терминального доступа к UNIX-системе (проект)</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=Jabber-Bot_%D0%B4%D0%BB%D1%8F_%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0_%D0%BA_UNIX-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=18757"/>
		<updated>2016-02-07T17:34:59Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Jabber-Bot для организации терминального доступа к UNIX-системе&lt;br /&gt;
|mentor=Яковлев Виктор Вадимович&lt;br /&gt;
|mentor_login={{URLENCODE:Vyacovlev|WIKI}}&lt;br /&gt;
|semester=Весна 2016&lt;br /&gt;
|course=1&lt;br /&gt;
|summer=&lt;br /&gt;
|number_of_students=8&lt;br /&gt;
|categorize=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Аккаунты ментора ===&lt;br /&gt;
Необходимо дать ментору права администратора на свой приватный репозиторий!&lt;br /&gt;
&lt;br /&gt;
BitBucket.org: &#039;&#039;&#039;victor_yacovlev&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
GitLab.com: &#039;&#039;&#039;v-yacovlev&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
GitHub.com: &#039;&#039;&#039;victor-yacovlev&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Протокол Jabber предназначен для мгновенной передачи сообщений (как ICQ, Skype), используется в Google Talk (Hangouts), и Facebook Chat. &lt;br /&gt;
Jabber-роботом (ботом) является специальный аккаунт в этой сети, сообщения в котором «читает» и «пишет» не человек, а программа. Боты могут быть реализованы как на стороне Jabber-сервера в виде plugin&#039;а, так и в виде обычной клиентской программы, которая, с точки зрения сервера, не отличается от обычного чат-клиента.&lt;br /&gt;
&lt;br /&gt;
Во время формирования ответа, боты могут выполнять какие‑либо побочные действия. Например, бот системы Youtrack (https://www.jetbrains.com/youtrack/) позволяет открывать новые задачи и выполнять действия над существующими задачами с помощью команд, отправляемых в виде сообщений.&lt;br /&gt;
&lt;br /&gt;
Для терминального доступа к UNIX‑подобным системам используется протокол SSH; для доступа к ним из Windows, как правило, используется программа PuTTY. Недостатком такого подхода является, во первых, необходимость в специальной программе для Windows, а во‑вторых, прекращение выполнения команд при обрыве соединения. Последняя проблема обычно решается с помощью программ screen или tmux на стороне сервера, но требует дополнительных действий от пользователя.&lt;br /&gt;
&lt;br /&gt;
Требуется реализовать Jabber-робот (в виде клиентской программы), который принимает команды от пользователя и выполняет их на том компьютере, где этот бот запущен. В качестве ответа робот передает текст с потоков вывода и ошибок выполненных команд. В случае разрыва соединения, удаленное выполнение программы не должно прерываться, а результат работы пользователь сможет увидеть после появления подключения к сети.&lt;br /&gt;
&lt;br /&gt;
При реализации необходимо обратить внимание на то, что команды должны запускаться с определенными правами от имени соответствующих пользователей. Реализация той части программы, которая выполняется с привилегированными правами, должна быть сведена к минимуму.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
* Реализация сетевого взаимодействия на верхних уровнях модели OSI&lt;br /&gt;
&lt;br /&gt;
* Особенности администрирование UNIX-подобных систем&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
* Знание технического английского языка для чтения документации&lt;br /&gt;
&lt;br /&gt;
* Знание языка программирования Python&lt;br /&gt;
&lt;br /&gt;
* Знание или желание изучить систему Linux на уровне системного администратора&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
* Python-библиотеки для работы с протоколом XMPP (SleekXMPP или pyxmpp2)&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;
4: Реализован сервер, который принимает запросы через протокол Jabber и выполняет команды от имени того пользователя, из под которого запущен сам сервер.&lt;br /&gt;
&lt;br /&gt;
6: Сервер Поддерживает запуск команд от имени произвольного пользователя в соответствии с указанным в конфигурации соответствием JabberID-&amp;gt;login.&lt;br /&gt;
&lt;br /&gt;
8: Сервер поддерживает авторизацию по имени пользователя и паролю.&lt;br /&gt;
&lt;br /&gt;
+1 балл.  Поддержка управления запущенными командами (остановка процесса, скрытие/отображение ввода).&lt;br /&gt;
&lt;br /&gt;
+1 балл. Интеграция сервера в системное окружение systemd.&lt;br /&gt;
&lt;br /&gt;
+1 балл. Результат работы оформлен в виде пакета rpm или deb.&lt;br /&gt;
&lt;br /&gt;
=== Ориентировочное расписание занятий ===&lt;br /&gt;
В зависимости от расписания&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI&amp;diff=18042</id>
		<title>Веб-сервер с функциональностью CGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI&amp;diff=18042"/>
		<updated>2015-12-19T12:18:31Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Метаданные ==&lt;br /&gt;
ID проекта: &#039;&#039;&#039;cgi&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Презентация проекта: http://1drv.ms/1VmeBQ0&lt;br /&gt;
&lt;br /&gt;
Ментор проекта: Виктор Яковлев&lt;br /&gt;
&lt;br /&gt;
Аккаунты ментора в git-сервисах:&lt;br /&gt;
&lt;br /&gt;
* [http://GitHub.com GitHub.com]: victor-yacovlev&lt;br /&gt;
* [http://GitLab.com GitLab.com]: v-yacovlev&lt;br /&gt;
* [http://BitBucket.org BitBucket.org]: victor_yacovlev&lt;br /&gt;
&lt;br /&gt;
== Что это за проект ==&lt;br /&gt;
&lt;br /&gt;
=== Введение ===&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими&lt;br /&gt;
динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Что требуется ===&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
&lt;br /&gt;
Требования к серверу:&lt;br /&gt;
&lt;br /&gt;
1. Обслуживать много клиентов&lt;br /&gt;
&lt;br /&gt;
2. Уметь выполнять CGI-программы и выдавать динамический контент&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Чему вы научитесь (помимо разработки очередного велосипеда) ==&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Основам параллельного программирования&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
== Начальные требования ==&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Критерии оценивания ==&lt;br /&gt;
&lt;br /&gt;
=== Первая контрольная точка (24 октября 2015 г.) ===&lt;br /&gt;
Необходимо иметь git-репозиторий с проектом, в который приглашен ментор. В репозитории должно быть:&lt;br /&gt;
* Файл README.md, который содержит описание проекта, написанный в расчета на &amp;quot;конечного пользователя&amp;quot;. Это описание должно быть написано &#039;&#039;&#039;самостоятельно&#039;&#039;&#039;, а не скопировано из Wiki, и отражать Ваше понимание того, что нужно сделать.&lt;br /&gt;
* Реализацию TCP-сервера, который при запуске создает сокет, принимает хотя бы по одному соединению одновременно, и выводит в качестве отладочной информации (на стандартный поток вывода или стандартный поток ошибок) данные, который ему передает клиент (для тестирования можно использовать программу telnet).&lt;br /&gt;
* Для тех, кто реализует проект на Си/C++, - проектный файл CMakeLists.txt.&lt;br /&gt;
&lt;br /&gt;
=== Вторая контрольная точка (14 ноября 2015 г.) ===&lt;br /&gt;
Необходимо иметь режиме веб-сервер, который умеет выдавать статические страницы и запускать сторонные CGI-программы с помощью fork().&lt;br /&gt;
&lt;br /&gt;
=== Итоговая оценка ===&lt;br /&gt;
* &#039;&#039;&#039;4 балла&#039;&#039;&#039;. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
* &#039;&#039;&#039;6 баллов&#039;&#039;&#039;. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
* &#039;&#039;&#039;9 баллов&#039;&#039;&#039;. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
* &#039;&#039;&#039;+1 балл&#039;&#039;&#039;. Реализована поддержка POST-запросов&lt;br /&gt;
* &#039;&#039;&#039;+1 балл&#039;&#039;&#039;. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Использование как многопроцессной, так и многопоточной работы для обеспечения оптимального использования системных ресурсов&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Реализация обработки запросов с помощью очереди ядра.&lt;br /&gt;
&lt;br /&gt;
== Дополнительные материалы и методические указания ==&lt;br /&gt;
&lt;br /&gt;
* Описание протокола HTTP на русском языке [https://ru.wikipedia.org/wiki/HTTP]&lt;br /&gt;
&lt;br /&gt;
* Описание работы с CGI: [http://www.cgi101.com/book/ch3/text.html]&lt;br /&gt;
&lt;br /&gt;
=== Материалы с семинаров 07 и 28 ноября 2015 ===&lt;br /&gt;
Материалы выложены на [https://yadi.sk/d/Xt1TOvAkkoMcf Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%B0_ATtiny13A&amp;diff=18041</id>
		<title>Эмулятор микроконтроллера ATtiny13A</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%B0_ATtiny13A&amp;diff=18041"/>
		<updated>2015-12-19T10:26:53Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Метаданные ==&lt;br /&gt;
ID проекта: &#039;&#039;&#039;attiny&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Презентация проекта: http://1drv.ms/1VmeBQ0&lt;br /&gt;
&lt;br /&gt;
Ментор проекта: Виктор Яковлев&lt;br /&gt;
&lt;br /&gt;
Аккаунты ментора в git-сервисах:&lt;br /&gt;
&lt;br /&gt;
* [http://GitHub.com GitHub.com]: victor-yacovlev&lt;br /&gt;
* [http://GitLab.com GitLab.com]: v-yacovlev&lt;br /&gt;
* [http://BitBucket.org BitBucket.org]: victor_yacovlev&lt;br /&gt;
&lt;br /&gt;
== Что это за проект ==&lt;br /&gt;
&lt;br /&gt;
=== Введение ===&lt;br /&gt;
Микроконтроллеры - это системы на кристалле, которые содержат центральный процессор,&lt;br /&gt;
оперативную память, Flash-память и набор перифирейных интерфейсов. &lt;br /&gt;
Микроконтроллеры используются в различных бытовых и промышленных устройствах, - там,&lt;br /&gt;
где не требуется высокая производительность процессора, но при этом нужно обеспечить&lt;br /&gt;
низкую стоимость устройства и/или низкое энергопотребление.&lt;br /&gt;
&lt;br /&gt;
Микроконтроллеры семейства AVR - одни из наиболее популярных (во многом, благодаря проекту&lt;br /&gt;
Arduino). Они обладают восьмибитной&lt;br /&gt;
архитектурой, работают на частоте от 1 до 16Мгц, а характерный объем оперативной памяти &lt;br /&gt;
- от 64 байт до нескольких килобайт, в зависимости от серии и модели.&lt;br /&gt;
&lt;br /&gt;
=== Что требуется ===&lt;br /&gt;
Реализовать эмулятор микроконтроллера [http://www.atmel.com/ru/ru/Images/doc8126.pdf ATtiny13A] (это один из самых простых AVR-микроконтроллеров). &lt;br /&gt;
&lt;br /&gt;
Подробное описание набора инструкций [http://www.atmel.com/images/Atmel-0856-AVR-Instruction-Set-Manual.pdf здесь].&lt;br /&gt;
&lt;br /&gt;
Эмулятор должен уметь выполнять программы, подготовленные ассемблером avra, или компилятором GCC.&lt;br /&gt;
&lt;br /&gt;
== Чему вы научитесь (помимо разработки эмуляторов) ==&lt;br /&gt;
1. Уметь программировать на ассемблере и понимать его&lt;br /&gt;
&lt;br /&gt;
2. Навыки кросс-компиляции&lt;br /&gt;
&lt;br /&gt;
3. Понимание архитектуры &amp;quot;железа&amp;quot; вычислительных систем&lt;br /&gt;
&lt;br /&gt;
== Начальные требования ==&lt;br /&gt;
1. Владение техническим английским языком. Все спецификации доступны &#039;&#039;&#039;только&#039;&#039;&#039; на английском языке&lt;br /&gt;
&lt;br /&gt;
2. Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
== Критерии оценивания ==&lt;br /&gt;
&lt;br /&gt;
=== Первая контрольная точка (24 октября 2015 г.) ===&lt;br /&gt;
Необходимо иметь git-репозиторий с проектом, в который приглашен ментор. В репозитории должно быть:&lt;br /&gt;
* Файл README.md, который содержит описание проекта, написанный в расчета на &amp;quot;конечного пользователя&amp;quot;. Это описание должно быть написано &#039;&#039;&#039;самостоятельно&#039;&#039;&#039;, а не скопировано из Wiki, и отражать Ваше понимание того, что нужно сделать.&lt;br /&gt;
* Скелет реализации, то есть заготовки необходимых модулей и классов. Можно реализовать выполнение одной-двух команд, тогда станет понятна примерная структура проекта.&lt;br /&gt;
* Для тех, кто реализует проект на C++, - проектный файл CMakeLists.txt.&lt;br /&gt;
&lt;br /&gt;
=== Вторая контрольная точка (14 ноября 2015 г.) ===&lt;br /&gt;
Необходимо иметь работающий эмулятор, выполняющий простейшие команды, а также иметь возможность наблюдать (например, в виде отладочной информации) за значениями регистров. Должна быть реализована загрузка содержимого flash-памяти из файла.&lt;br /&gt;
&lt;br /&gt;
=== Итоговая оценка ===&lt;br /&gt;
* &#039;&#039;&#039;4 балла&#039;&#039;&#039;. Эмулятор позволяет выполнять арифметические и управляющие команды, модифицирующие значения регистров. &lt;br /&gt;
* &#039;&#039;&#039;6 баллов&#039;&#039;&#039;. Реализована возможность выполнения программ, полученных с помощью компилятора AVRA.&lt;br /&gt;
* &#039;&#039;&#039;8 баллов&#039;&#039;&#039;. Эмулятор позволяет выполнять набор команд, позволяющий написать на ассемблере программы,  которые читают содержимое EEPROM-памяти&lt;br /&gt;
* &#039;&#039;&#039;10 баллов&#039;&#039;&#039;. Эмулятор позволяет выполнять набор команд, позволяющий написать на ассемблере программы,  которые который модифируют содержимое EEPROM-памяти&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Эмулятор поддерживает полный набор команд, позволяющий выполнять программы, полученные с помощью компилятора GCC&lt;br /&gt;
* &#039;&#039;&#039;+1 балл&#039;&#039;&#039;. Реализована функциональность ввода-вывода с использованием портов общего назначения. Формат ввода-вывода для тестирования эмулятора: CSV-таблицы из двух столбцов, содержащие время наступления события, и значение сигнала&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Реализована функциональность порта SPI. Взаимодействие с виртуальным портом осуществляется с использованием любого механизма межпроцессного взаимодействия Linux.&lt;br /&gt;
&lt;br /&gt;
== Методические указания и полезные ссылки ==&lt;br /&gt;
Для создания простых тестовых программ лучше использовать ассемблер, а не Си-компилятор. &lt;br /&gt;
&lt;br /&gt;
Руководство по ассемблеру AVR на русском языке: [http://radio-vtc.inf.ua/mps/Labs/comands_AVR.pdf здесь]&lt;br /&gt;
&lt;br /&gt;
Компилятор AVRA доступен [http://avra.sourceforge.net здесь], либо пакет avra в некоторых дистрибутивах Linux.&lt;br /&gt;
&lt;br /&gt;
Результат работы компилятора AVRA -- это &#039;&#039;&#039;текстовый&#039;&#039;&#039; файл, который содержит HEX-коды для записи &lt;br /&gt;
в Flash-память программатором. Формат этого файла описан [https://en.wikipedia.org/wiki/Intel_HEX здесь].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Материалы с семинара 07 ноября 2015 ===&lt;br /&gt;
Материалы выложены на [https://yadi.sk/d/xN7FJuLDkKmas Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI&amp;diff=17983</id>
		<title>Веб-сервер с функциональностью CGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI&amp;diff=17983"/>
		<updated>2015-12-15T13:01:11Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Метаданные ==&lt;br /&gt;
ID проекта: &#039;&#039;&#039;cgi&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Презентация проекта: http://1drv.ms/1VmeBQ0&lt;br /&gt;
&lt;br /&gt;
Ментор проекта: Виктор Яковлев&lt;br /&gt;
&lt;br /&gt;
Аккаунты ментора в git-сервисах:&lt;br /&gt;
&lt;br /&gt;
* [http://GitHub.com GitHub.com]: victor-yacovlev&lt;br /&gt;
* [http://GitLab.com GitLab.com]: v-yacovlev&lt;br /&gt;
* [http://BitBucket.org BitBucket.org]: victor_yacovlev&lt;br /&gt;
&lt;br /&gt;
== Что это за проект ==&lt;br /&gt;
&lt;br /&gt;
=== Введение ===&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими&lt;br /&gt;
динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Что требуется ===&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
&lt;br /&gt;
Требования к серверу:&lt;br /&gt;
&lt;br /&gt;
1. Обслуживать много клиентов&lt;br /&gt;
&lt;br /&gt;
2. Уметь выполнять CGI-программы и выдавать динамический контент&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Чему вы научитесь (помимо разработки очередного велосипеда) ==&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Основам параллельного программирования&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
== Начальные требования ==&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Критерии оценивания ==&lt;br /&gt;
&lt;br /&gt;
=== Первая контрольная точка (24 октября 2015 г.) ===&lt;br /&gt;
Необходимо иметь git-репозиторий с проектом, в который приглашен ментор. В репозитории должно быть:&lt;br /&gt;
* Файл README.md, который содержит описание проекта, написанный в расчета на &amp;quot;конечного пользователя&amp;quot;. Это описание должно быть написано &#039;&#039;&#039;самостоятельно&#039;&#039;&#039;, а не скопировано из Wiki, и отражать Ваше понимание того, что нужно сделать.&lt;br /&gt;
* Реализацию TCP-сервера, который при запуске создает сокет, принимает хотя бы по одному соединению одновременно, и выводит в качестве отладочной информации (на стандартный поток вывода или стандартный поток ошибок) данные, который ему передает клиент (для тестирования можно использовать программу telnet).&lt;br /&gt;
* Для тех, кто реализует проект на Си/C++, - проектный файл CMakeLists.txt.&lt;br /&gt;
&lt;br /&gt;
=== Вторая контрольная точка (14 ноября 2015 г.) ===&lt;br /&gt;
Необходимо иметь режиме веб-сервер, который умеет выдавать статические страницы и запускать сторонные CGI-программы с помощью fork().&lt;br /&gt;
&lt;br /&gt;
=== Итоговая оценка ===&lt;br /&gt;
* &#039;&#039;&#039;4 балла&#039;&#039;&#039;. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
* &#039;&#039;&#039;6 баллов&#039;&#039;&#039;. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
* &#039;&#039;&#039;9 баллов&#039;&#039;&#039;. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
* &#039;&#039;&#039;+1 балл&#039;&#039;&#039;. Реализована поддержка POST-запросов&lt;br /&gt;
* &#039;&#039;&#039;+1 балл&#039;&#039;&#039;. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Использование как многопроцессной, так и многопоточной работы для обеспечения оптимального использования системных ресурсов&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Реализация обработки запросов с помощью очереди ядра.&lt;br /&gt;
&lt;br /&gt;
== Дополнительные материалы и методические указания ==&lt;br /&gt;
&lt;br /&gt;
* Описание работы с CGI: [http://www.cgi101.com/book/ch3/text.html]&lt;br /&gt;
&lt;br /&gt;
=== Материалы с семинаров 07 и 28 ноября 2015 ===&lt;br /&gt;
Материалы выложены на [https://yadi.sk/d/Xt1TOvAkkoMcf Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI&amp;diff=17827</id>
		<title>Веб-сервер с функциональностью CGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI&amp;diff=17827"/>
		<updated>2015-11-30T14:43:33Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Метаданные ==&lt;br /&gt;
ID проекта: &#039;&#039;&#039;cgi&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Презентация проекта: http://1drv.ms/1VmeBQ0&lt;br /&gt;
&lt;br /&gt;
Ментор проекта: Виктор Яковлев&lt;br /&gt;
&lt;br /&gt;
Аккаунты ментора в git-сервисах:&lt;br /&gt;
&lt;br /&gt;
* [http://GitHub.com GitHub.com]: victor-yacovlev&lt;br /&gt;
* [http://GitLab.com GitLab.com]: v-yacovlev&lt;br /&gt;
* [http://BitBucket.org BitBucket.org]: victor_yacovlev&lt;br /&gt;
&lt;br /&gt;
== Что это за проект ==&lt;br /&gt;
&lt;br /&gt;
=== Введение ===&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими&lt;br /&gt;
динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Что требуется ===&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
&lt;br /&gt;
Требования к серверу:&lt;br /&gt;
&lt;br /&gt;
1. Обслуживать много клиентов&lt;br /&gt;
&lt;br /&gt;
2. Уметь выполнять CGI-программы и выдавать динамический контент&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Чему вы научитесь (помимо разработки очередного велосипеда) ==&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Основам параллельного программирования&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
== Начальные требования ==&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Критерии оценивания ==&lt;br /&gt;
&lt;br /&gt;
=== Первая контрольная точка (24 октября 2015 г.) ===&lt;br /&gt;
Необходимо иметь git-репозиторий с проектом, в который приглашен ментор. В репозитории должно быть:&lt;br /&gt;
* Файл README.md, который содержит описание проекта, написанный в расчета на &amp;quot;конечного пользователя&amp;quot;. Это описание должно быть написано &#039;&#039;&#039;самостоятельно&#039;&#039;&#039;, а не скопировано из Wiki, и отражать Ваше понимание того, что нужно сделать.&lt;br /&gt;
* Реализацию TCP-сервера, который при запуске создает сокет, принимает хотя бы по одному соединению одновременно, и выводит в качестве отладочной информации (на стандартный поток вывода или стандартный поток ошибок) данные, который ему передает клиент (для тестирования можно использовать программу telnet).&lt;br /&gt;
* Для тех, кто реализует проект на Си/C++, - проектный файл CMakeLists.txt.&lt;br /&gt;
&lt;br /&gt;
=== Вторая контрольная точка (14 ноября 2015 г.) ===&lt;br /&gt;
Необходимо иметь режиме веб-сервер, который умеет выдавать статические страницы и запускать сторонные CGI-программы с помощью fork().&lt;br /&gt;
&lt;br /&gt;
=== Итоговая оценка ===&lt;br /&gt;
* &#039;&#039;&#039;4 балла&#039;&#039;&#039;. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
* &#039;&#039;&#039;6 баллов&#039;&#039;&#039;. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
* &#039;&#039;&#039;9 баллов&#039;&#039;&#039;. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
* &#039;&#039;&#039;+1 балл&#039;&#039;&#039;. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Использование как многопроцессной, так и многопоточной работы для обеспечения оптимального использования системных ресурсов&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Реализация обработки запросов с помощью очереди ядра.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Дополнительные материалы и методические указания ==&lt;br /&gt;
&lt;br /&gt;
* Описание работы с CGI: [http://www.cgi101.com/book/ch3/text.html]&lt;br /&gt;
&lt;br /&gt;
=== Материалы с семинаров 07 и 28 ноября 2015 ===&lt;br /&gt;
Материалы выложены на [https://yadi.sk/d/Xt1TOvAkkoMcf Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%B0_ATtiny13A&amp;diff=17806</id>
		<title>Эмулятор микроконтроллера ATtiny13A</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%B0_ATtiny13A&amp;diff=17806"/>
		<updated>2015-11-28T06:03:41Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: Изменены требования&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Метаданные ==&lt;br /&gt;
ID проекта: &#039;&#039;&#039;attiny&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Презентация проекта: http://1drv.ms/1VmeBQ0&lt;br /&gt;
&lt;br /&gt;
Ментор проекта: Виктор Яковлев&lt;br /&gt;
&lt;br /&gt;
Аккаунты ментора в git-сервисах:&lt;br /&gt;
&lt;br /&gt;
* [http://GitHub.com GitHub.com]: victor-yacovlev&lt;br /&gt;
* [http://GitLab.com GitLab.com]: v-yacovlev&lt;br /&gt;
* [http://BitBucket.org BitBucket.org]: victor_yacovlev&lt;br /&gt;
&lt;br /&gt;
== Что это за проект ==&lt;br /&gt;
&lt;br /&gt;
=== Введение ===&lt;br /&gt;
Микроконтроллеры - это системы на кристалле, которые содержат центральный процессор,&lt;br /&gt;
оперативную память, Flash-память и набор перифирейных интерфейсов. &lt;br /&gt;
Микроконтроллеры используются в различных бытовых и промышленных устройствах, - там,&lt;br /&gt;
где не требуется высокая производительность процессора, но при этом нужно обеспечить&lt;br /&gt;
низкую стоимость устройства и/или низкое энергопотребление.&lt;br /&gt;
&lt;br /&gt;
Микроконтроллеры семейства AVR - одни из наиболее популярных (во многом, благодаря проекту&lt;br /&gt;
Arduino). Они обладают восьмибитной&lt;br /&gt;
архитектурой, работают на частоте от 1 до 16Мгц, а характерный объем оперативной памяти &lt;br /&gt;
- от 64 байт до нескольких килобайт, в зависимости от серии и модели.&lt;br /&gt;
&lt;br /&gt;
=== Что требуется ===&lt;br /&gt;
Реализовать эмулятор микроконтроллера [http://www.atmel.com/ru/ru/Images/doc8126.pdf ATtiny13A] (это один из самых простых AVR-микроконтроллеров). &lt;br /&gt;
&lt;br /&gt;
Подробное описание набора инструкций [http://www.atmel.com/images/Atmel-0856-AVR-Instruction-Set-Manual.pdf здесь].&lt;br /&gt;
&lt;br /&gt;
Эмулятор должен уметь выполнять программы, подготовленные ассемблером avra, или компилятором GCC.&lt;br /&gt;
&lt;br /&gt;
== Чему вы научитесь (помимо разработки эмуляторов) ==&lt;br /&gt;
1. Уметь программировать на ассемблере и понимать его&lt;br /&gt;
&lt;br /&gt;
2. Навыки кросс-компиляции&lt;br /&gt;
&lt;br /&gt;
3. Понимание архитектуры &amp;quot;железа&amp;quot; вычислительных систем&lt;br /&gt;
&lt;br /&gt;
== Начальные требования ==&lt;br /&gt;
1. Владение техническим английским языком. Все спецификации доступны &#039;&#039;&#039;только&#039;&#039;&#039; на английском языке&lt;br /&gt;
&lt;br /&gt;
2. Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
== Критерии оценивания ==&lt;br /&gt;
&lt;br /&gt;
=== Первая контрольная точка (24 октября 2015 г.) ===&lt;br /&gt;
Необходимо иметь git-репозиторий с проектом, в который приглашен ментор. В репозитории должно быть:&lt;br /&gt;
* Файл README.md, который содержит описание проекта, написанный в расчета на &amp;quot;конечного пользователя&amp;quot;. Это описание должно быть написано &#039;&#039;&#039;самостоятельно&#039;&#039;&#039;, а не скопировано из Wiki, и отражать Ваше понимание того, что нужно сделать.&lt;br /&gt;
* Скелет реализации, то есть заготовки необходимых модулей и классов. Можно реализовать выполнение одной-двух команд, тогда станет понятна примерная структура проекта.&lt;br /&gt;
* Для тех, кто реализует проект на C++, - проектный файл CMakeLists.txt.&lt;br /&gt;
&lt;br /&gt;
=== Вторая контрольная точка (14 ноября 2015 г.) ===&lt;br /&gt;
Необходимо иметь работающий эмулятор, выполняющий простейшие команды, а также иметь возможность наблюдать (например, в виде отладочной информации) за значениями регистров. Должна быть реализована загрузка содержимого flash-памяти из файла.&lt;br /&gt;
&lt;br /&gt;
=== Итоговая оценка ===&lt;br /&gt;
* &#039;&#039;&#039;4 балла&#039;&#039;&#039;. Эмулятор позволяет выполнять арифметические и управляющие команды, модифицирующие значения регистров. &lt;br /&gt;
* &#039;&#039;&#039;6 баллов&#039;&#039;&#039;. Реализована возможность выполнения программ, полученных с помощью компилятора AVRA.&lt;br /&gt;
* &#039;&#039;&#039;8 баллов&#039;&#039;&#039;. Эмулятор позволяет выполнять набор команд, позволяющий написать на ассемблере программы,  которые который модифируют содержимое EEPROM-памяти&lt;br /&gt;
* &#039;&#039;&#039;10 баллов&#039;&#039;&#039;. Эмулятор поддерживает полный набор команд, позволяющий выполнять программы, полученные с помощью компилятора GCC&lt;br /&gt;
* &#039;&#039;&#039;+1 балл&#039;&#039;&#039;. Реализована функциональность ввода-вывода с использованием портов общего назначения. Формат ввода-вывода для тестирования эмулятора: CSV-таблицы из двух столбцов, содержащие время наступления события, и значение сигнала&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Реализована функциональность порта SPI. Взаимодействие с виртуальным портом осуществляется с использованием любого механизма межпроцессного взаимодействия Linux.&lt;br /&gt;
&lt;br /&gt;
== Методические указания и полезные ссылки ==&lt;br /&gt;
Для создания простых тестовых программ лучше использовать ассемблер, а не Си-компилятор. &lt;br /&gt;
&lt;br /&gt;
Руководство по ассемблеру AVR на русском языке: [http://radio-vtc.inf.ua/mps/Labs/comands_AVR.pdf здесь]&lt;br /&gt;
&lt;br /&gt;
Компилятор AVRA доступен [http://avra.sourceforge.net здесь], либо пакет avra в некоторых дистрибутивах Linux.&lt;br /&gt;
&lt;br /&gt;
Результат работы компилятора AVRA -- это &#039;&#039;&#039;текстовый&#039;&#039;&#039; файл, который содержит HEX-коды для записи &lt;br /&gt;
в Flash-память программатором. Формат этого файла описан [https://en.wikipedia.org/wiki/Intel_HEX здесь].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Материалы с семинара 07 ноября 2015 ===&lt;br /&gt;
Материалы выложены на [https://yadi.sk/d/xN7FJuLDkKmas Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI&amp;diff=17805</id>
		<title>Веб-сервер с функциональностью CGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D1%81_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E_CGI&amp;diff=17805"/>
		<updated>2015-11-28T05:56:08Z</updated>

		<summary type="html">&lt;p&gt;Vyacovlev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Метаданные ==&lt;br /&gt;
ID проекта: &#039;&#039;&#039;cgi&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Презентация проекта: http://1drv.ms/1VmeBQ0&lt;br /&gt;
&lt;br /&gt;
Ментор проекта: Виктор Яковлев&lt;br /&gt;
&lt;br /&gt;
Аккаунты ментора в git-сервисах:&lt;br /&gt;
&lt;br /&gt;
* [http://GitHub.com GitHub.com]: victor-yacovlev&lt;br /&gt;
* [http://GitLab.com GitLab.com]: v-yacovlev&lt;br /&gt;
* [http://BitBucket.org BitBucket.org]: victor_yacovlev&lt;br /&gt;
&lt;br /&gt;
== Что это за проект ==&lt;br /&gt;
&lt;br /&gt;
=== Введение ===&lt;br /&gt;
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.&lt;br /&gt;
&lt;br /&gt;
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими&lt;br /&gt;
динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Что требуется ===&lt;br /&gt;
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.&lt;br /&gt;
&lt;br /&gt;
Требования к серверу:&lt;br /&gt;
&lt;br /&gt;
1. Обслуживать много клиентов&lt;br /&gt;
&lt;br /&gt;
2. Уметь выполнять CGI-программы и выдавать динамический контент&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Чему вы научитесь (помимо разработки очередного велосипеда) ==&lt;br /&gt;
1. Устройство протокола HTTP, работа с заголовками и запросами&lt;br /&gt;
&lt;br /&gt;
2. Основам параллельного программирования&lt;br /&gt;
&lt;br /&gt;
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API&lt;br /&gt;
&lt;br /&gt;
== Начальные требования ==&lt;br /&gt;
1. Умение разрабатывать программы на Cи или C++&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Критерии оценивания ==&lt;br /&gt;
&lt;br /&gt;
=== Первая контрольная точка (24 октября 2015 г.) ===&lt;br /&gt;
Необходимо иметь git-репозиторий с проектом, в который приглашен ментор. В репозитории должно быть:&lt;br /&gt;
* Файл README.md, который содержит описание проекта, написанный в расчета на &amp;quot;конечного пользователя&amp;quot;. Это описание должно быть написано &#039;&#039;&#039;самостоятельно&#039;&#039;&#039;, а не скопировано из Wiki, и отражать Ваше понимание того, что нужно сделать.&lt;br /&gt;
* Реализацию TCP-сервера, который при запуске создает сокет, принимает хотя бы по одному соединению одновременно, и выводит в качестве отладочной информации (на стандартный поток вывода или стандартный поток ошибок) данные, который ему передает клиент (для тестирования можно использовать программу telnet).&lt;br /&gt;
* Для тех, кто реализует проект на Си/C++, - проектный файл CMakeLists.txt.&lt;br /&gt;
&lt;br /&gt;
=== Вторая контрольная точка (14 ноября 2015 г.) ===&lt;br /&gt;
Необходимо иметь режиме веб-сервер, который умеет выдавать статические страницы и запускать сторонные CGI-программы с помощью fork().&lt;br /&gt;
&lt;br /&gt;
=== Итоговая оценка ===&lt;br /&gt;
* &#039;&#039;&#039;4 балла&#039;&#039;&#039;. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений&lt;br /&gt;
* &#039;&#039;&#039;6 баллов&#039;&#039;&#039;. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы&lt;br /&gt;
* &#039;&#039;&#039;9 баллов&#039;&#039;&#039;. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.&lt;br /&gt;
* &#039;&#039;&#039;+1 балл&#039;&#039;&#039;. Сервер оформлен в виде системной службы для systemd&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Использование как многопроцессной, так и многопоточной работы для обеспечения оптимального использования системных ресурсов&lt;br /&gt;
* &#039;&#039;&#039;+2 балла&#039;&#039;&#039;. Реализация обработки запросов с помощью очереди ядра.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Дополнительные материалы и методические указания ==&lt;br /&gt;
&lt;br /&gt;
* Описание работы с CGI: [http://www.cgi101.com/book/ch3/text.html]&lt;br /&gt;
&lt;br /&gt;
=== Материалы с семинара 07 ноября 2015 ===&lt;br /&gt;
Материалы выложены на [https://yadi.sk/d/o0m46zkfkKmaN Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Материалы с семинара 28 ноября 2015 ====&lt;br /&gt;
&lt;br /&gt;
Материалы выложены на [https://yadi.sk/d/Xt1TOvAkkoMcf Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>Vyacovlev</name></author>
	</entry>
</feed>