
подгон 2018 (легендарный) / 3 курс -20241122T221211Z-001 / Java / Методические указания / ИЗ_2020_I
.docИндивидуальные задания по «Основам Java»
Программирование
Конструктор молекулы
Интерфейс просмотра иерархического HashMap
Многопоточная закачка
Тест Мандельброта
Исследования. Аналитика
Иголка в стоге сена NASA
Аналитика приоритетных направлений развития NASA на основании публичного ПО NASA
3D библиотеки Java для визуализации 3D-объекта
Использование опыта
Для всех решений допускается использовать библиотеки с условием, что решение может быть полностью локализовано, а библиотеки не требуют лицензионных отчислений. Локализация означает, что решение не зависит от какого-либо сетевого сервиса, отключение которого может привести к неработоспособности решения.
Конструктор молекулы
Разработать компонент конструирования молекулы аминокислоты. Молекула конструируется из набора графических примитивов (см. рис.1) путем захвата и перетаскивания примитва на рабочее поле. Должен быть предусмотрен способ удаления примитива из молекулы. Готовая молекула сохраняется на диск (и загружается с диска) через меню File или комбинациями: Gtrl+S, Gtrl+O.
Рис 1. Интерфейс компонента (фрейма) конструирования молекулы.
Интерфейс просмотра иерархического HashMap
Требуется разработать компонет (фрейм) для просмотра многоуровневого HashMap.Максимальное число уровней — 8. Внешний вид интерфейса показан на рис. 2. После выбора (нажатии) элемента из списка элементов в колонке n – в колонку n+1 загружается список содержащихся в нем элементов. Для быстрого поиска вверху колонки имеется поле поиска, при вводе в которое символов, список в колонке n+1 сокращается только для слов которые начинаются с символов, введенных в поле поиска. Если при заполненных m уровнях на каком-то уровне (n <m) выбирается новый элемент, на следующем уровне (n+1) выводится список элементов, подчиненных выбраному, а все колонки до m – очищаются. Меню File или комбинация Gtrl+S позволяет сохранить выбранную цепочку, а также загрузив ее по Ctrl+O построить выделение в колонках.
Рис 2. Интерфейс компонента (фрейма) просмотра многоуровневого HashMap.
Многопоточная закачка
Требуется разработать компонет (фрейм) клиента для многопоточной (6 потоков) получения по сети от сервера некоего большого файла. Большой файл (>100Mб) лежит на сервере. Сервер(ы) может отдавать данный с нескольких (6-ти) портов. Адрес сервера и номера портов известны и описаны в конфигурационном файле клиента. В поле URL (см. рис.3.) вводится адрес файла на сервере (или строка/команда по которой сервер понимает, какой файл запрашивают). Затем в поле SavePath указывается адрес на диске, куда файл должен быть скачан. После этого начинается многопоточная (по 6-ти портам) закачка частей файла с визуализацией, как показано на рис. 3.. По завершении закачки всех частей файл «собирается» в заданной в Save Path папке и проверяется контрольная сумма, а поверх фрейма компонента выводится модальное окно с сообщением об успешности загрузки. Меню File служит для загрузки конфигурационного файла. Способ разделения файла на части при передаче — определяется студентом.
Р
ис.
3. Многопоточная загрузка.
Тест Мандельброта
Необходимо визуализировать время (ось t на рис. 4.) построения теста Мандельброта на языке Java (см. http://institut-spintex.ru/science/list/postroenie-mnozhestva-mandelbrota-na-raznykh-yazykakh-programmirovaniya.html ), как показано на рис. 4. Параметр MAX_ITERATION задает точность определения границ множества. Параметр Presize задает длину стороны квадрата в основании гистограммы. По кнопке Build выполняется построение при заданных параметрах. С помощью меню File или комбинациями: Gtrl+S, Gtrl+O рассчитанные данные записываются на диск или читаются с диска.
Рис. 4. Вид фрема со визуализацией времени расчета теста.
Иголка в стоге сена NASA
NASA выложило в условно свободное использование 705 программ (на 24.11.2019) по адресу https://software.nasa.gov/. Среди них есть как Open Source программы (как со ссылкой на GitHub, так и предоставлением после регистрации), так и программы, которые можно использовать только в США. Основная задача заключается в том, чтобы найти и, в первом приближении, исследовать из этого списка программы полезные:
Сами по себе. Например, https://software.nasa.gov/software/ARC-16457-1A ( https://sourceforge.net/projects/irg-verve/ )
Для изучения технологий NASA в программировании. Например, https://software.nasa.gov/software/ARC-15256-1D ( https://nasa.github.io/openmct/ ).
Предлагается следующий алгоритм выполнения задания. Сначала делается список Open Source программ. Затем в них выбираются программы, исходники которых доступны без регистрации. Затем из них выбираются те, что на Java. Затем из последних уже выбирается ОДНА программа, которая будет исследоваться. При выборе Open Source программ следует обращать внимание на актуальность программы по дате последних обновлений, чтобы не потратить время на «мертвое ПО», которое за 2-3 года ни разу не обновлялось. Т.е. рассматриваем программы, обновления по которым проходили не старее 2017-го года. При равных показателях срока актуальности студент волен выбрать программу, которая ему интереснее исследовать.
Исследование проводится путем установки программы и состоит из:
Проверки работоспособности. (Запускается, не падает, не виснет, не ведет себя странно. Какое окружение на компьютере/устройстве требуется для запуска: ОС, библиотеки, какие-то пакеты и т.д.?)
Проверки зависимостей. (Может работать автономно или требуется подключения к внешним не локализумемым ресурсам (т.е. таким, которые нельзя поставить локально, например облачным)? Если последнее, то к каким и по каким протоколам обмена? Наличие каких пакетов/программ требуется на компьютере для полноценной работы. Т.е. не только запускается, но и доступен весь функционал? Какие из них платные, какие бесплатные в том числе Open Source? Есть ли среди них сильно устаревшие т.е. не обновляющиеся 3-5 лет. Какие лицензионные и прочие ограничение имеются. Например, максимальное число пользователей on-line и т.д.?)
Возможности взаимодействия данного ПО с другим ПО. (Имеет ли интерфейс удаленного управления? Если да — то какой? Имеет ли интерфейс для обмена результатами работы по сети. Если да, то по каким протоколам? В какие форматы файлов может сохраняться результат? Может ли быть встроена как модуль/библиотека в другое ПО на Java? Может ли быть встроено, как модуль/библиотека в другое ПО, не Java? )
Если говорить о приоритетных тематиках программ то интересуют программы:
Медицинские
Инструменты для обработки и преобразования данных, прежде всего с ИИ и элементами аналитики
Инструменты/интерфейсы управления/мониторинга удаленными устройствами, системами, аппаратами
Инструменты построения/проектирования систем: программных, социальных, аппаратных и т. д.
Аналитика приоритетных направлений развития NASA на основании публичного ПО NASA
На основании анализа доступных описаний программ, выложенных на https://software.nasa.gov/ попытаться дать характеристику развития деятельности NASA. Например, понятно, что если продукт
Open Source, то скорее всего это может быть следствием того, что:
Уже не жалко т.к. не актуально (устарело или это направление больше не развивается) Предлагается так считать, если за последние год-два у программы не было обновлений
Желание «подсадить» на свое решение, видение, технологию Предлагается так считать, если открытое решение критично опирается на не контролируемые пользователем программы внешние ресурсы, например базы данных или вычислительные сервисы.
Желание использовать коллективный разум для решения каких-то узких мест в продукте Предлагается так считать, если программа активно дописывается не сотрудниками NASA
Желание осчастливить мир Предлагается так считать, если ничего из пунктов 1-3 не наблюдается
Если продукт имеет другую лицензию, например General Public Release, то для него пункт 3 из предыдущего списка отпадает. Если программа имеет другие лицензии, например, U.S. Government Purpose Release, то можно предположить что вопросы, решаемые данной программой имеют особый приоритет для США, вследствие чего к ним затруднен доступ организаций не уполномоченных работать с правительством США.
3D библиотека Java для визуализации 3D-объекта
Необходимо рассмотреть несколько библиотек Java для 3D визуализации и выбрать лучшую при выполнении следующих условий:
3D-объект можно вращать
3D-объект можно увеличивать/уменьшать
3D-объект можно выбрать из визуализированного списка (см. рис. 5.)
Файл с описанием 3D-объекта имеет текстовый формат, т.е. при необходимости может быть исправлен без специализированного редактора.
Простота встраивания в приложение (минимум зависимостей). Т.е. не приходится выполнять множество условий для запуска: скачивание, установка и настройка зависимых ресурсов и библиотек.
Визуализированный список можно загрузить (меню File) из источника. Например, папки на диске.
Отсутствие зависимостей от сетевых ресурсов: облаков и т. д.
Открытый код (Open Source), актуализация (есть обновления за последние пол-года, год), популярность (использование в значимых проектах)
Желательно (но не обязательно) наличие встроенного редактора для создания 3D-объектов.
Для выбранной библиотеку нужно провести демонстрацию визуализации в соответствии с рис. 5.
Р
ис.
5. Демонстрация визуализации 3D-объекта