GSoC proposal

A few days ago I made a short proposal for a GSoC project: trac

I hope to explain a little bit better why a 3d user interface for hackage is desirable und how to do it. Chrome, Firefox and Webkit (Apple) now support WebGL meaning that the following pictures should roughly be possible inside a browser:

A picture from a motorola campaign

A picture produced by the company gamr7: (with modifications)

The second picture was modified to illustrate the potential of visualization. The yellow lines show code and dependencies. Similar things have been done by others (I had this idea on my own): codecity . I want to do this in a very general way. I was able to convince the advisor of my diploma thesis to let me do half of it about visualization of flow networks. This was hard but he finally agreed (maybe because Haskell programmers are rare and he had a plan to translate flow networks into Haskell). In the visualization part I layed foundations to make a visualization like the above. I use symmetry classes (based on the book “the symmetries of things” ) and a way to produce smallest deviations of symmetry.

In what ways will this project benefit the wider Haskell community?  

At the end of the 3 month period:

  • The visualization will let programmers quicker find a library they need (see changes, etc. ), because the visualization algorithm is like reversed pattern recognition to produce most recognizable shapes.
  • The code size, popularity, dependencies, whatever the community demands can be integrated or left away
  • A general way to extend or change the visualization

=> Haskell could have an impressive package repository.

The people who implement WebGL in Browsers (like Google) could have a poster child application

After GSoC:

  • A framework could emerge that lets you show visualizations near to the library, the code, the code-line. This allows more freedom than opening a separate graphics window. I.e. it could be helpful sometimes to see how example data is transformed by a function
  • A visualization of data structures could be on the channels of flow networks as a first step and help debugging programs. I personally would enjoy it if I could find the bug in the triangulation algorithm of one of my libraries. That is very hard with a command line
  • Having an alternative to bindings to UI-libraries

What deliverables do you think are reasonable targets? Can you outline an approximate schedule of milestones?

Milestone 1

  • Change Sourcegraph to parse all libraries (not only one), the result should be a big graph of all code
  • Experiment with a spring layout for the placement of libraries. The springs could be dependencies
  • Maybe somewhere in the hierarchy Graphviz could be used for the layout: Convert the graph with Graphviz and parse the annotated dot files with language-dot
  • A data structure is generated from various data sources and then transformed into a collada file with my library collada-output

Milestone 2

  • Use a WebGL engine to display the collada file. The problems here are most likely the picking, zooming and following of a link
  • Integration into Hackage2 as an optinal link
  • Helping to finish Hackage2
  • Documentation, everything I have forgot

Why do you think you would be the best person to tackle this project?

I did the relevant libraries to prepare this, among it a library that is a complete reprogramming of Freetype2 (as mentioned above it is hard to find algorithmic errors). Other people who did shape generation (also here in the Haskell community) haven’t considered symmetry as thorougly as me. Maybe Cabal and GHC are more important but this visualization project could in the long term help to understand Cabal and GHC and there is also a lot to do.