Проверяемые знания учащихся

  • Знание концепции текущего рабочего каталога.
  • Умение формировать абсолютные и относительные пути в GNU/Linux.
  • Умение изменять текущий рабочий каталог.
  • Знание о типах команд в интерпретаторе Bash.
  • Умение получать информацию о работе встроенных команд в Bash.
  • Умение получать и читать руководства о приложениях.
  • Умение использовать справочную систему man.
  • Знание о поиске исполняемых файлов в Bash.
  • Знание о стандартной структуре файловой системы GNU/Linux и о структуре файловой системы Debian GNU/Linux.
  • Умение формировать физические и логические ссылки.
  • Умение просматривать, формировать и изменять структуру файловой системы.
  • Знание о структуре потоков ввода-вывода приложений.
  • Умение перенаправлять потоки вывода в файл, потоки ввода из файлов, формировать конвейеры по обработке потоков данных.
  • Знание о предназначении приложений-фильтров sort, uniq, grep, tail, head, awk.
  • Умение использовать консольные текстовые редакторы vim или emacs.
  • Знание о структуре скриптовых файлов на языке Bash.
  • Умение написания скриптовых файлов на языке Bash для автоматизации действий.
  • Умение использования расширения команд в языке Bash: пути, скобок, арифметическое, переменных, команд.
  • Знание о способах установки новых приложений в GNU/Debian: система dpkg и apt.
  • Умение находить пакеты, устанавливать и удалять пакеты из системы.

Задача

Реализуйте систему обработки запросов в фотоателье.

Запрос поступает в формате каталога с набором изображений в формате JPEG. Система должна решать следующий набор задач:

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

Система также должна содержать в себе скрипт, который будет устанавливать все необходимые зависимости для работы системы.

Необходимо предоставить руководство, поясняющее предназначение системы. Файл должен называться readme.md. В данном файле:

  • Надо рассказать о предназначении каждого из скриптов системы.
  • Привести примеры вызова скриптов для решения каждой из поставленных задач.

Если файл с руководством будет отсутствовать, то задача будет считаться нерешённой.

Формирование информации

Для каждого изображения необходимо вывести следующую информацию:

  • Название файла.
  • Время создания файла.
  • Ширину и высоту изображения.
  • Наиболее близкое соотношение сторон: 1:1 (1,0), 4:3 (1,3), 3:2 (1,5), 16:10 (1,6), 16:9 (1,7), 2:1.

Помимо информации по каждому файлу необходимо также предоставить статистическую информацию:

  • Общее количество файлов.
  • Количество изображений, сделанных в этом году.

Сортировка изображений

Для работы данного режима система должна получить от пользователя путь к каталогу, в котором будет размещены результаты. Запрещено использовать каталог с исходными данными как каталог с результирующими данными. Если целевого каталога не существует необходимо либо его создать, либо завершить работу системы.

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

Разрешение Mpx 9x13 10x15 13x18 15x20 20x30 30x40
640х480 0.3 Очень плохо Очень плохо Очень плохо Очень плохо Очень плохо Очень плохо
1280х1024 1.3 Хорошо Нормально Плохо Плохо Очень плохо Очень плохо
2048x1536 3.1 Отлично Отлично Хорошо Хорошо Плохо Очень плохо
2304x1729 4.0 Отлично Отлично Отлично Хорошо Нормально Очень плохо
2592x1944 5.0 Отлично Отлично Отлично Отлично Нормально Плохо
3000x2000 6.0 Отлично Отлично Отлично Отлично Хорошо Плохо
3200x2200 7.0 Отлично Отлично Отлично Отлично Хорошо Нормально
3600x2300 8.3 Отлично Отлично Отлично Отлично Хорошо Хорошо

Система должна формировать следующую структуру каталогов в целевом каталоге:

result
├── 10x15/
│   ├── 0001.jpeg
│   ├── 0002.jpeg
│   └── 0003.jpeg
└── 15x20/
    ├── 0001.jpeg
    ├── 0002.jpeg
    ├── 0003.jpeg
    ├── 0004.jpeg
    └── 0005.jpeg

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

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

Подготовка изображений к публикации

Для работы данного режима система должна получить от пользователя путь к каталогу, в котором будет размещены результаты. Запрещено использовать каталог с исходными данными как каталог с результирующими данными. Если целевого каталога не существует необходимо либо его создать, либо завершить работу системы.

Для публикации изображений их необходимо подготовить:

  • Уменьшить их размер в мегабайтах. Максимальный размер должен составить 100 килобайт.
  • Заменить все непечатные символы (пробелы, табуляции) в названии файла знаками подчёркивания.

Для уменьшения размера в мегабайтах можно применить следующие подходы:

  • Уменьшить размер в пикселях. Минимальный размер изображения (ширина или высота) должны быть не меньше 300 пикселей. Соотношение сторон изображения после изменения размера должно совпадать с оригинальным файлом.
  • Уменьшить параметр качества. Качество не должно быть ниже 70.

Комментарии к технической реализации

  • Все скрипты, входящие в систему, должны быть написаны на языке Bash.
  • Скрипты должны работать в режиме остановки при возникновении ошибочного вызова (set -e).
  • Скрипты должны соответствовать требованиям статического анализатора ShellCheck, поставляемого в рамках дистрибутива Debian Buster.
  • В скрипте, который устанавливает зависимости, должны ставится все зависимости, даже если они входят в «поставку по умолчанию».
  • Для выяснения информации об изображении рекомендуется использовать приложение identify из пакета инструментов ImageMagic.
  • Для изменения размеров изображения рекомендуется использовать приложение convert из пакета инструментов ImageMagic.
  • Система может быть реализована в виде набора скриптов.
  • Скрипты должны корректно обрабатывать краевые ситуации: отсутствие необходимых аргументов, отсутствие файлов для обработки и так далее.