Языки программирования и трансляторы

  • Общие сведения


    Курс по выбору для учащихся магистратуры
    Читается на 2-м году обучения в осеннем семестре

    Руководитель курса: Яковлев Виктор Вадимович

    Язык: русский
    Программа учебной дисциплины: на сайте ВШЭ [TODO: оформить по шаблону МФТИ]

    Канал в Telegram для объявлений: @mipt-atp-proglangs-2017

    Ссылка на таблицу успеваемости: TBA

    Аннотация


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

    Материалы курса

    Лекции

    TBA

    Семинары

    TBA

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


    Форма итоговой оценки — дифференцированный зачет.
    Итоговая оценка определяется по линейной формуле: Oитог = 0,6·Oнакопл. + 0,4·Oзачет, где Oнакопл. — накопленная оценка, получаемая как среднее арифметическое за выполненные домашние задания, Oзачет — оценка, полученная на устном зачете.

    Накопленные оценки от 8 до 10 могут быть выставлены автоматом с согласия студента.

    Оценки за домашние задания

    Оценки выставляются по 10-балльной шкале, в соответствии с объявленными формальными критериями оценивания.

    В случае сдачи домашних заданий после дедлайна, применяются штрафные коэффициенты, в зависимости от просрочки:

    • 1 неделя — коэффициент 0,9
    • 2 недели — коэффициент 0,7
    • более 2-х недель — коэффициент 0,5

    Календарно-тематический план занятий

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

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


    Дедлайн: 19 октября в 21:00

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

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

    Наборы тестов и интерфейс: [TODO:ссылка].

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

    • 4 балла [test1.c] — реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта
    • 5 баллов [test2.c] — предусмотрена возможность задания Си-функций в качестве обработчика события «кнопка нажата»; проект использует систему сборки CMake
    • 6 баллов [test3.py] — реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты
    • 7 баллов — для реализации Python-модуля не используется модуль ctypes
    • 8 баллов [test4.py] — реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python
    • 9 баллов [test5.py] — реализована возможность использования Python-функций в качестве обработчика события «кнопка нажата»
    • 10 баллов [две предпоследние строки в test5.py] — удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур

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


    Дедлайн: 9 ноября в 21:00

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

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

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

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

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

    • 3 балла — Реализована электронная таблица с возможностью редактирования значений
    • 4 балла — Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval
    • 5 баллов — При вычислении формул возможно использование значений других ячеек таблицы и функций
    • 8 баллов — Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено
    • 9 баллов — Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции
    • Плюс 1 балл — Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы
    • Плюс 1 балл — Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript

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


    Дедлайн: 30 ноября в 21:00

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

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

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

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

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

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

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

    • 4 балла — реализовано создание игрового поля 10×10 с использованием технологии «тонкого клиента»
    • 6 баллов — игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников
    • 8 баллов — реализован игровой процесс игры для поля 10×10
    • 10 баллов — Реализован игровой процесс для (почти) бесконечного поля

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


    Дедлайн: 14 декабря в 21:00

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

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

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

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

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

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

    • Базовая функциональность (макс. 5 баллов):
      • 4 балла — реализованы функции внедрения и извлечения текстов. Полученное новое изображение должно корректно открываться стандартным графическим редактором, и визуально быть похожим на исходное
      • +1 балл — корректно реализовано отсечение последовательности символов, размер которых больше одного байта
    • Вариант 1 (+5 баллов) — реализована программа, которая умеет работать с PNG-файлами:
      • +1 балл — функции оформлены в виде консольной программы, упакованной в один файл
      • +4 балла — в дополнение к формату BMP, поддерживается формат PNG (24bpp, метод сжатия zlib deflate). Допускается использование только функций стандартной библиотеки
    • Вариант 2 (+5 баллов) — реализован веб-сервис (достаточно поддержки только формата BMP):
      • +2 балла — реализован веб-сервер, который обрабатывает GET-запросы на выдачу графического файла, принимая в качестве параметра текст, который нужно внедрить, и выдаёт преобразованное изображение. Допускается использование модуля inets или сервера cowboy
      • +2 балла — реализована возможность добавления и удаления картинок на сервере с помощью PUT и DELETE запросов
      • +1 балл — сервер оформлен в виде стандартной OTP-поставки

    Зачет


    На зачете выдается билет из 2-х теоретических вопросов + 1 задача.

    Прогррамма зачета доступна здесь.