René Cano
All projects

No. 83rd place · Expo Ingenierías 2025

Fork/Join DAG Visualizer

Precedence graphs and parallel programming

My role
Repository author
Period
Aug – Dec 2025

The problem

In parallel programming, a precedence graph says which tasks can run at the same time and which have to wait for others. Turning that graph into FORK/JOIN instructions by hand is mechanical and easy to get wrong, and on paper it's hard to see how the branches progress.

What I built

A JavaFX visualizer, 1,080 lines of Java across 4 classes, that won 3rd place in the Digital Prototype Development category at the August–December 2025 Expo Ingenierías.

  • It loads graphs written as adjacency matrices. The repository ships 4 examples, from 3 to 11 nodes.
  • It lays out the graph by level: each node sits at the level of its longest path from a root, so tasks that can run together end up on the same row.
  • It generates FORK/JOIN pseudocode: a node with more than 1 successor opens a FORK, a node with more than 1 predecessor is a JOIN with its counter (CONTn := branches), and branches are linked with GOTO. It's pseudocode, not Java ForkJoinPool code.
  • It animates the execution, highlighting nodes and pseudocode lines as each branch advances.

Architecture

Flow diagram: a text file with an adjacency matrix is loaded as a graph; the graph goes through a level layout based on the longest path and through a pseudocode generator with FORK, JOIN, GOTO and counters; both results are shown in a JavaFX view that animates the execution by highlighting nodes and pseudocode lines per branch.

Results

The Expo award is the only external result; there are no usage metrics. I published the code on GitHub on December 10, 2025, in 6 commits.

Known limits

  • It doesn't check for cycles: if the graph has one, the generator never finishes or crashes (ForkJoinGenerator.java:69-75).
  • The paths to the graph files are absolute Windows paths, so it won't run on another machine without editing the code.
  • The README promises graph validation and Java Fork/Join code generation, and the code does neither. It needs fixing.
  • There are no tests.

Links