ЯРПО: различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к навигации Перейти к поиску
Новая страница: «= Общая информация = Формальное название курса: Языки разработки программного обеспечен…»
 
Уточнение критериев оценки ДЗ-4: на максимальный балл можно сделать, не реализуя PNG формат
 
(не показано 14 промежуточных версий этого же участника)
Строка 15: Строка 15:
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.


Таблица успеваемости: '''TBA'''
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]
 
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]


Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ):  
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ):  
Строка 21: Строка 23:
  - GitHub: victor-yacovlev
  - GitHub: victor-yacovlev


Профиль ассистента в VCS: '''TBA'''
Профиль ассистента в VCS:  
 
- BitBucket: arsalitartificem
- GitHub: ellaroyce


= Итоговая оценка =
= Итоговая оценка =
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.


Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.
Строка 44: Строка 43:
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.


= Домашние задания =
Домашние задания публикуются в '''приватном''' git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.


= Домашние задания =
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].
 
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю '''и ассистенту'''. Профили - см. выше в разделе "Общая информация".
 
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.
 
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.
 
=== Домашнее задание №1 ===
 
Нормативный дедлайн на полный балл - до '''19:00 2 февраля'''.
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.
 
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]
 
Необходимо реализовать Си-библиотеку для создания объектов "Кнопка", "Окно", "Надпись" с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.
 
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).
 
'''Запрещено''' использование как готовых решений (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].
 
Критерии оценивания:
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события "кнопка нажата"; проект использует систему сборки CMake
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события "кнопка нажата"
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур
 
Сигнатура библиотеки:
<pre>
struct Object;
struct Widget /* extends Object */;
struct PushButton /* extends Widget */;
struct Label /* extends Widget */;
struct Application /* extends Object */;
struct Layout /* extends Object */;
struct VBoxLayout /* extends Layout */;
 
typedef void (NoArgumentsCallback)(struct Object *sender);
 
const char* Object_GetClassName(struct Object *object);
void Object_Delete(struct Object *object);
 
struct Application* Application_New();
int Application_Exec(struct Application *app);
 
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);
 
struct Widget* Widget_New(struct Widget *parent);
 
void Widget_SetVisible(struct Widget *widget, bool v);
void Widget_SetWindowTitle(struct Widget *widget, const char *title);
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);
void Widget_SetSize(struct Widget *widget, int w, int h);
 
struct Label* Label_New(struct Widget *parent);
void Label_SetText(struct Label *label, const char *text);
 
struct PushButton* PushButton_New(struct Widget *parent);
void PushButton_SetText(struct PushButton *button, const char *text);
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);
</pre>
 
=== Домашнее задание №2 ===
 
Нормативный дедлайн на полный балл - до '''21:00 16 марта'''.
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).
 
Реализовать браузерную (front-end) часть приложения "Электронные таблицы" с возможностью вычисления выражений.
 
Таблица имеет фиксированный размер 26 столбцов x 20 строк, столбцы нумеруются латинскими буквами от 'A' до 'Z', строки нумеруются от 1 до 20.
Ячейки таблицы могут содержать: числа в десятичной записи, строки (текст) и формулы. Формулы начинаются с символа '=', и их синтаксис эквивалентен Google-Таблицам.
 
В ячейках, содержащих формулы, должны отображаться вычисленные значения формул, которые могут содержать арифметические выражения, ссылки на другие ячейки, и вызовы функций. Достаточно реализовать поддержку трех функций: ABS, SIN, LEN.
 
Приложение не использует никакого взаимодействия с сервером, - он используется только для выдачи статического контента.
 
Критерии оценивания:
* 0.3 балла. Реализована электронная таблица с возможностью редактирования значений.
* 0.4 балла. Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval.
* 0.5 балла. При вычислении формул возможно использование значений других ячеек таблицы и функций.
* 0.8 балла. Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено.
* 0.9 балла. Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции.
* +0.1 балла. Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы.
* +0.2 балла. Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript.
 
=== Домашнее задание №3 ===
 
Нормативный дедлайн на полный балл - до '''21:00 20 марта'''.
Коэффициент 0.9 - до 27 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).
 
Реализовать многопользовательскую браузерную игру "крестики-нолики на бесконечном поле".
 
Правила игры (известной также под названием "пять в ряд"): несколько игроков поочередно ставят свою отметку на свободной ячейке игрового поля. В случае, когда игрок ставит пять отметок в один ряд без пропусков (по вертикали, горизонтали, или одной из диагоналей) - он выиграл.
 
В браузере отображается часть игрового поля размером 10x10 клеток. Само поле - теоретически бесконечное, на практике его размер ограничивается только разрядностью индексов клеток без использования арифметики длинных чисел. Игровое поле хранится на сервере, и отображается по мере необходимости (реализован скроллинг или кнопки навигации).
 
Игра происходит в реальном времени, то есть все отметки, при стабильном и быстром Интернет-подключении, моментально отображаются на игровых полях других игроков.
 
Приложение реализовано целиком на сервере, браузер используется только как "тонкий клиент" и его программная часть содержит минимальный набор функций, необходимых для отрисовки поля, обработки и передачи на сервер событий.
 
'''Запрещена''' реализация серверной части на Python/Django или Flask!
 
Критерии оценивания:
* 0.4 балла. Реализовано создание игрового поля 10x10 с использованием технологии "тонкого клиента".
* 0.6 балла. Игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников.
* 0.8 балла. Реализован игровой процесс игры для поля 10x10.
* 1.0 балл. Реализован игровой процесс для (почти) бесконечного поля.
 
=== Домашнее задание №4 ===
 
Нормативный дедлайн на полный балл - до '''12:10 31 марта'''.
Коэффициент 0.5 - после 31 марта (осенний период пересдач).
 
Реализовать скрытие и извлечение коротких текстов, спрятанных в файлах изображений (это называется "стеганография").
 
Берём исходное изображение, и модифицируем его таким образом, что младшие биты разных цветовых компонент отдельных пикселей используются для хранения некоторых посторонних данных. В результате получаем новое изображение, которое мало отличается от исходного, и визуально трудно определить наличие посторонних данных.
 
Формат изображений: BMP, 24 бит на пиксельных (RGB), сжатие НЕ используется.
 
Формат текста: UTF-8, допускается отсечение строки текста в случае, когда размер изображения не позволяет внедрить строку целиком.
 
Задание решается только на Erlang, использование готовых библиотек для работы с изображениями запрещено.
 
Критерии оценивания:
 
Базовая функциональность (макс. 0.5 балла):
* 0.4 балла. Реализованы функции внедрения и извлечения текстов. Полученное новое изображение должно корректно открываться стандартным графическим редактором, и визуально быть похожим на исходное.
* +0.1 балл. Корректно реализовано отсечение последовательности символов, размер которых больше одного байта.


'''TBA'''
Вариант 1 (+0.5 балла) - реализована программа, которая умеет работать с PNG-файлами:
* +0.1 балл. Функции оформлены в виде консольной программы, упакованной в один файл.
* +0.4 балла. В дополнение к формату BMP, поддерживается формат PNG (24bpp, метод сжатия zlib deflate). Допускается использование только функций стандартной библиотеки.


Вариант 2 (+0.5 балла) - реализован веб-сервис (достаточно поддержки только формата BMP):
* +0.2 балла. Реализован веб-сервер, который обрабатывает GET-запросы на выдачу графического файла, принимая в качестве параметра текст, который нужно внедрить, и выдаёт преобразованное изображение. Допускается использование модуля inets или сервера cowboy.
* +0.2 балла. Реализована возможность добавления и удаления картинок на сервере с помощью PUT и DELETE запросов.
* +0.1 балл. Сервер оформлен в виде стандартной OTP-поставки.


= Материалы лекций и семинарских занятий =
= Материалы лекций и семинарских занятий =


Будут выкладываться по мере их проведения.
Будут выкладываться по мере их проведения.
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]

Текущая версия от 23:19, 16 марта 2017

Общая информация

Формальное название курса: Языки разработки программного обеспечения

Преподаватель: Яковлев Виктор

Учебный ассистент: Тюрюмина Элла

Канал в Телеграм: @cshse-proglangs-2017

Программа учебной дисциплины: на сайте ВШЭ

Календарно-тематический план занятий: https://goo.gl/kg3l1U, обратите внимание, что 10 февраля занятий не будет.

Таблица успеваемости: https://goo.gl/l5OOGn

Форма для указания ссылок на репозиторий с домашними заданиями: https://goo.gl/forms/smhTguTW7dJRMkgk1

Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ):

- BitBucket: victor_yacovlev
- GitHub: victor-yacovlev

Профиль ассистента в VCS:

- BitBucket: arsalitartificem
- GitHub: ellaroyce

Итоговая оценка

Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.

Итоговая оценка:

- 10 баллов, если накопленная оценка > 0.95

- 9 баллов, если накопленная оценка > 0.85 (*)

- 8 баллов, если накопленная оценка >= 0.8 (*)

- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)

(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.

Домашние задания

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

Ссылка на репозиторий указывается один раз в форме https://goo.gl/forms/smhTguTW7dJRMkgk1.

Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю и ассистенту. Профили - см. выше в разделе "Общая информация".

За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.

Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.

Домашнее задание №1

Нормативный дедлайн на полный балл - до 19:00 2 февраля. Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.

Тесты находятся в Яндекс.Диске

Необходимо реализовать Си-библиотеку для создания объектов "Кнопка", "Окно", "Надпись" с использованием объектно-ориентированного GUI-фреймворка Qt. Для этой библиотеки реализовать оболочку для Python3.

Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).

Запрещено использование как готовых решений (PyQt, PySide), так и сторонних инструментов или библиотек для генерации Python-оболочек, например Boost.Python или SIP.

Критерии оценивания:

  • 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта
  • 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события "кнопка нажата"; проект использует систему сборки CMake
  • 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты
  • 0.7 балла - для реализации Python-модуля не используется модуль ctypes
  • 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python
  • 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события "кнопка нажата"
  • 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур

Сигнатура библиотеки:

struct Object;
struct Widget /* extends Object */;
struct PushButton /* extends Widget */;
struct Label /* extends Widget */;
struct Application /* extends Object */;
struct Layout /* extends Object */;
struct VBoxLayout /* extends Layout */;

typedef void (NoArgumentsCallback)(struct Object *sender);

const char* Object_GetClassName(struct Object *object);
void Object_Delete(struct Object *object);

struct Application* Application_New();
int Application_Exec(struct Application *app);

struct VBoxLayout* VBoxLayout_New(struct Widget *parent);
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);

struct Widget* Widget_New(struct Widget *parent);

void Widget_SetVisible(struct Widget *widget, bool v);
void Widget_SetWindowTitle(struct Widget *widget, const char *title);
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);
void Widget_SetSize(struct Widget *widget, int w, int h);

struct Label* Label_New(struct Widget *parent);
void Label_SetText(struct Label *label, const char *text);

struct PushButton* PushButton_New(struct Widget *parent);
void PushButton_SetText(struct PushButton *button, const char *text);
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);

Домашнее задание №2

Нормативный дедлайн на полный балл - до 21:00 16 марта. Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).

Реализовать браузерную (front-end) часть приложения "Электронные таблицы" с возможностью вычисления выражений.

Таблица имеет фиксированный размер 26 столбцов x 20 строк, столбцы нумеруются латинскими буквами от 'A' до 'Z', строки нумеруются от 1 до 20. Ячейки таблицы могут содержать: числа в десятичной записи, строки (текст) и формулы. Формулы начинаются с символа '=', и их синтаксис эквивалентен Google-Таблицам.

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

Приложение не использует никакого взаимодействия с сервером, - он используется только для выдачи статического контента.

Критерии оценивания:

  • 0.3 балла. Реализована электронная таблица с возможностью редактирования значений.
  • 0.4 балла. Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval.
  • 0.5 балла. При вычислении формул возможно использование значений других ячеек таблицы и функций.
  • 0.8 балла. Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено.
  • 0.9 балла. Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции.
  • +0.1 балла. Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы.
  • +0.2 балла. Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript.

Домашнее задание №3

Нормативный дедлайн на полный балл - до 21:00 20 марта. Коэффициент 0.9 - до 27 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).

Реализовать многопользовательскую браузерную игру "крестики-нолики на бесконечном поле".

Правила игры (известной также под названием "пять в ряд"): несколько игроков поочередно ставят свою отметку на свободной ячейке игрового поля. В случае, когда игрок ставит пять отметок в один ряд без пропусков (по вертикали, горизонтали, или одной из диагоналей) - он выиграл.

В браузере отображается часть игрового поля размером 10x10 клеток. Само поле - теоретически бесконечное, на практике его размер ограничивается только разрядностью индексов клеток без использования арифметики длинных чисел. Игровое поле хранится на сервере, и отображается по мере необходимости (реализован скроллинг или кнопки навигации).

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

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

Запрещена реализация серверной части на Python/Django или Flask!

Критерии оценивания:

  • 0.4 балла. Реализовано создание игрового поля 10x10 с использованием технологии "тонкого клиента".
  • 0.6 балла. Игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников.
  • 0.8 балла. Реализован игровой процесс игры для поля 10x10.
  • 1.0 балл. Реализован игровой процесс для (почти) бесконечного поля.

Домашнее задание №4

Нормативный дедлайн на полный балл - до 12:10 31 марта. Коэффициент 0.5 - после 31 марта (осенний период пересдач).

Реализовать скрытие и извлечение коротких текстов, спрятанных в файлах изображений (это называется "стеганография").

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

Формат изображений: BMP, 24 бит на пиксельных (RGB), сжатие НЕ используется.

Формат текста: UTF-8, допускается отсечение строки текста в случае, когда размер изображения не позволяет внедрить строку целиком.

Задание решается только на Erlang, использование готовых библиотек для работы с изображениями запрещено.

Критерии оценивания:

Базовая функциональность (макс. 0.5 балла):

  • 0.4 балла. Реализованы функции внедрения и извлечения текстов. Полученное новое изображение должно корректно открываться стандартным графическим редактором, и визуально быть похожим на исходное.
  • +0.1 балл. Корректно реализовано отсечение последовательности символов, размер которых больше одного байта.

Вариант 1 (+0.5 балла) - реализована программа, которая умеет работать с PNG-файлами:

  • +0.1 балл. Функции оформлены в виде консольной программы, упакованной в один файл.
  • +0.4 балла. В дополнение к формату BMP, поддерживается формат PNG (24bpp, метод сжатия zlib deflate). Допускается использование только функций стандартной библиотеки.

Вариант 2 (+0.5 балла) - реализован веб-сервис (достаточно поддержки только формата BMP):

  • +0.2 балла. Реализован веб-сервер, который обрабатывает GET-запросы на выдачу графического файла, принимая в качестве параметра текст, который нужно внедрить, и выдаёт преобразованное изображение. Допускается использование модуля inets или сервера cowboy.
  • +0.2 балла. Реализована возможность добавления и удаления картинок на сервере с помощью PUT и DELETE запросов.
  • +0.1 балл. Сервер оформлен в виде стандартной OTP-поставки.

Материалы лекций и семинарских занятий

Будут выкладываться по мере их проведения.

Презентации с лекций в формате PDF: На Яндекс.Диске

Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): На Яндекс.Диске