Простая визуализация структур данных в Java (OSEDUCONF-2021) — различия между версиями

Материал из 0x1.tv

(Новая страница: «;{{SpeakerInfo}}: * {{Speaker|Иван Пономарёв}} * {{Speaker|Олег Ивченко}} * {{Speaker|Нурас Ногаев}} <blockquote> </blockquote>…»)
 
 
(не показано 7 промежуточных версий этого же участника)
;{{SpeakerInfo}}:
* {{Speaker|Иван Пономарёв}}
* {{Speaker|Олег Ивченко}}
* {{Speaker|Нурас Ногаев}}
<blockquote>
LJV (Lightweight Java Visualizer)  инструмент визуализации структур данных Java с использованием Reflection API для
прохода по объекту и GraphViz для отрисовки. Проект изначально был разработан Джоном Хамером (John Hamer) в 2004 году
на Java 1.4 под лицензией GPL, но с тех пор не обновлялся. Нами проект был переписан на современную версию языка Java,
выложен на GitHub, а также добавлены новые фичи в виде дополнительных настроек отрисовки графов и более удобным
интерфейсом для пользователя. LJV можно использовать для реверс-инжиниринга, а также он будет удобен преподавателям и
студентам, чтобы изучать алгоритмы и структуры данных
</blockquote>

{{VideoSection}}

{{vimeoembed|541382248|800|450}}
{{youtubelink|}}

{{SlidesSection}}
[[File:Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf|left|page=-|300px]]

{{----}}

== Thesis ==
===  История проекта  ===
В 2004 году Джон Хаммер, который работал в Новой Зеландии, разработал инструмент для обучения студентов, чтобы они лучше освоили структуры данных. Долгое время, инструмент был написан на Java 1.4 и запускал заранее предустановленный на компьютере GraphViz. Но в осенью 2020 года мы решили возобновить проект. В первую очередь перед нами стоит цель исправить такие недостатки как: морально устаревший программный интерфейс (API), привязка к локально установленному GraphViz и отсутствие использования возможностей GraphViz новых версий.

===  Применение в преподавании и использование в Java Community  ===

Изначальная идея возрождения проекта возникла в рамках подготовки курса Core Java Ивана Пономарёва для МФТИ. Диаграммы полученные с помощью LJV применялись на соответствующих лекциях о стандартных структурах данных в Java. Кроме того, была сделана интернет-публикация<ref>John Hamer, Visualizing Data Structures as Graphs, ACE 2004 conference, https://www.cs.auckland.ac.nz/~j-hamer/ACE04-paper.pdf</ref> и сделано выступление на профессиональной Java конференции SnowOne 2021<ref>Ivan Ponomarev, LJV: What We Can Learn From Java Data Structures Visualization, https://dzone.com/articles/what-can-we-learn-from-java-data-structures-visual</ref><ref>Иван Пономарёв. LJV: Чему нас может научить визуализация структур данных в Java -- доклад на Java-конференции SnowOne, 2021 г., https://snowone.ru/speakers/ivan_ponomarev</ref><ref>Иван Пономарёв. LJV: Чему нас может научить визуализация структур данных в Java -- слайды к докладу на Java-конференции SnowOne, 2021 г., https://inponomarev.github.io/ljvtalk/</ref>, которые вызвали определённый интерес в сообществе Java-разработчиков.

===  Принцип работы  ===

В режиме runtime инструмент строит внутреннее представление графа объектов памяти, используя Reflection API. Мы рекурсивно начинаем от передаваемого объекта и заходим в каждый связанный объект и собираем необходимую информацию. По ходу работы мы также формируем GraphViz представление с собранной информацией и сохраняем в текст на языке DOT, чтобы затем на его основе пользователь мог самостоятельно нарисовать граф в установленном локально приложении или с помощью онлайн-сервисов.

===  Изменения  ===

Нами проделаны следующие задачи:

Мы обновили проект до Java 11, использовав практики построения API, которые выработались за 16 лет, а также новые возможности языка. Мы не стали писать на Java 14, так как данная версия ещё не стала популярнее Java 11, а мы ставим цель охватить больше людей, в частности преподавателей и студентов.

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

Изменён API инструмента на удобный method chaining, чтобы добавлять новые параметры к одному объекту.

А также код и документация выложены на Github, а сам проект доступен для скачивания в Maven Central.

===  Как использовать  ===

У объекта LJV есть метод drawGraph куда мы передаём объект, который мы хотим визуализировать. Метод возвращает строку, которую мы загрузили в онлайн-сервис http://dreampuf.github.io и получили изображение:

<source lang="java">
   String graph = new LJV().drawGraph("Hello");
</source>

[[File:ivchenko-img001-oseduconf-2021.png|640px|center]]

Также перед вызовом drawGraph можно передать различные параметры:

<source lang="java">
String graph = new LJV()
  .setTreatAsPrimitive(Integer.class)
  .addFieldAttribute({"next", "color=red,fontcolor=red")
  .addFieldAttribute("prev", "color=blue,fontcolor=blue")
  .addFieldAttribute("first", "color=red,fontcolor=red")
  .addFieldAttribute("last", "color=red,fontcolor=red")
  .drawGraph(linkedList);
</source>

[[File:ivchenko-img002-oseduconf-2021.png|640px|center]]

{{----}}
[[File:{{#setmainimage:Простая визуализация структур данных в Java (OSEDUCONF-2021)!.jpg}}|center|640px]]
{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->

{{fblink|2966220660297602}}                                          
{{vklink|1865}}                                          
<references/>

* Текущая версия проекта, https://github.com/atp-mipt/ljv 
* Изначальная версия проекта, https://www.cs.auckland.ac.nz/~j-hamer/LJV.html 

{{stats|disqus_comments=0|refresh_time=2021-08-31T18:08:07.260848|vimeo_plays=0|youtube_plays=0}}

[[Категория:OSEDUCONF-2021]]
[[Категория:Draft]]
[[Категория:СПО в образовании]]
[[Категория:Java]]
[[Категория:Статический анализ кода]]

Текущая версия на 08:01, 1 ноября 2021

Докладчик

LJV (Lightweight Java Visualizer) — инструмент визуализации структур данных Java с использованием Reflection API для прохода по объекту и GraphViz для отрисовки. Проект изначально был разработан Джоном Хамером (John Hamer) в 2004 году на Java 1.4 под лицензией GPL, но с тех пор не обновлялся. Нами проект был переписан на современную версию языка Java, выложен на GitHub, а также добавлены новые фичи в виде дополнительных настроек отрисовки графов и более удобным интерфейсом для пользователя. LJV можно использовать для реверс-инжиниринга, а также он будет удобен преподавателям и студентам, чтобы изучать алгоритмы и структуры данных

Видео

Презентация

Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf Простая визуализация структур данных в Java (OSEDUCONF-2021).pdf

Thesis

История проекта

В 2004 году Джон Хаммер, который работал в Новой Зеландии, разработал инструмент для обучения студентов, чтобы они лучше освоили структуры данных. Долгое время, инструмент был написан на Java 1.4 и запускал заранее предустановленный на компьютере GraphViz. Но в осенью 2020 года мы решили возобновить проект. В первую очередь перед нами стоит цель исправить такие недостатки как: морально устаревший программный интерфейс (API), привязка к локально установленному GraphViz и отсутствие использования возможностей GraphViz новых версий.

Применение в преподавании и использование в Java Community

Изначальная идея возрождения проекта возникла в рамках подготовки курса Core Java Ивана Пономарёва для МФТИ. Диаграммы полученные с помощью LJV применялись на соответствующих лекциях о стандартных структурах данных в Java. Кроме того, была сделана интернет-публикация[1] и сделано выступление на профессиональной Java конференции SnowOne 2021[2][3][4], которые вызвали определённый интерес в сообществе Java-разработчиков.

Принцип работы

В режиме runtime инструмент строит внутреннее представление графа объектов памяти, используя Reflection API. Мы рекурсивно начинаем от передаваемого объекта и заходим в каждый связанный объект и собираем необходимую информацию. По ходу работы мы также формируем GraphViz представление с собранной информацией и сохраняем в текст на языке DOT, чтобы затем на его основе пользователь мог самостоятельно нарисовать граф в установленном локально приложении или с помощью онлайн-сервисов.

Изменения

Нами проделаны следующие задачи:

Мы обновили проект до Java 11, использовав практики построения API, которые выработались за 16 лет, а также новые возможности языка. Мы не стали писать на Java 14, так как данная версия ещё не стала популярнее Java 11, а мы ставим цель охватить больше людей, в частности преподавателей и студентов.

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

Изменён API инструмента на удобный method chaining, чтобы добавлять новые параметры к одному объекту.

А также код и документация выложены на Github, а сам проект доступен для скачивания в Maven Central.

Как использовать

У объекта LJV есть метод drawGraph куда мы передаём объект, который мы хотим визуализировать. Метод возвращает строку, которую мы загрузили в онлайн-сервис http://dreampuf.github.io и получили изображение:

<source lang="java">

  String graph = new LJV().drawGraph("Hello");

</source>

Ivchenko-img001-oseduconf-2021.png

Также перед вызовом drawGraph можно передать различные параметры:

<source lang="java"> String graph = new LJV()

 .setTreatAsPrimitive(Integer.class)
 .addFieldAttribute({"next", "color=red,fontcolor=red")
 .addFieldAttribute("prev", "color=blue,fontcolor=blue")
 .addFieldAttribute("first", "color=red,fontcolor=red")
 .addFieldAttribute("last", "color=red,fontcolor=red")
 .drawGraph(linkedList);

</source>

Ivchenko-img002-oseduconf-2021.png
Простая визуализация структур данных в Java (OSEDUCONF-2021)!.jpg

Примечания и ссылки

  1. John Hamer, Visualizing Data Structures as Graphs, ACE 2004 conference, https://www.cs.auckland.ac.nz/~j-hamer/ACE04-paper.pdf
  2. Ivan Ponomarev, LJV: What We Can Learn From Java Data Structures Visualization, https://dzone.com/articles/what-can-we-learn-from-java-data-structures-visual
  3. Иван Пономарёв. LJV: Чему нас может научить визуализация структур данных в Java -- доклад на Java-конференции SnowOne, 2021 г., https://snowone.ru/speakers/ivan_ponomarev
  4. Иван Пономарёв. LJV: Чему нас может научить визуализация структур данных в Java -- слайды к докладу на Java-конференции SnowOne, 2021 г., https://inponomarev.github.io/ljvtalk/

Plays:0   Comments:0