HACKER Q&A
📣 thesurlydev

What are some great examples of bi-directional diagram/code projects?


I've always been interested in this space and there seem to be few examples. Specifically, I'm looking for an example that shows how to use something like codemirror and a drag and drop interface. A change in one would be reflected in the other.


  👤 apexedison Accepted Answer ✓
I've built a number of bidirectional editors, often with CodeMirror.

You could check out my bidirectional circuit design tool:

https://github.com/leomcelroy/svg-pcb

Paper on it here:

https://dl.acm.org/doi/abs/10.1145/3559400.3562004

Feel free to reach out if you have questions.


👤 sargstuff
If start out in the middle with BNF grammar, can get drag/drop diagram/grammar highlighter for use in codemirror[0] or mess around with BNF linting [1][2][3][4].

[0] https://bnfc.digitalgrammars.com/

[1] : https://dl.acm.org/doi/10.1145/3278186.3278193

[2] : https://www.researchgate.net/figure/Overview-of-Grammarinato...

[3] bullwinkle : https://github.com/sylvainhalle/Bullwinkle

[4] : https://news.ycombinator.com/item?id=30822544


👤 jamessb
See Ravi Chugh's Sketch-n-Sketch work: http://ravichugh.github.io/sketch-n-sketch/

You might find it useful to look at the papers that cite the paper: https://scholar.google.com/scholar?cites=2233351225886461130...


👤 sargstuff
dbdesigner : https://dbdiagram.io/home

puredata : Pure Data is an open source visual programming environment ( https://puredata.info/ / https://sourceforge.net/projects/pure-data/ ) projects build using puredata : https://puredata.info/exhibition

ofelia : graphics via openframeworks : https://github.com/cuinjune/Ofelia

list of other examples : https://en.wikipedia.org/wiki/Visual_programming_language


👤 thesurlydev
I should have mentioned it in my OP but another great example I've seen is KittyCAD[1]

[1] https://github.com/KittyCAD/modeling-app/blob/main/README.md


👤 alhirzel
I am interested in tools of this type as well. One I know of is OPM: https://en.wikipedia.org/wiki/Object_Process_Methodology

👤 sargstuff
constructive bidirectional programming[a]: treesitter[0] used with emacs[1] neovim[2] python[2.2]

programming language boomerang, "A bidirectional programming language for ad-hoc, textual data"[b];

more traditional use in neural networks[c]

xsugar for dual syntax xml language[d]

piet-q exotic language interpretation (vs. program/application)[e] and/or q-code usage/application[f][g]

can have fun with coding in c in way that 2nd program can be extrapolated from gcc ast syntax tree[3]

scratch[4] bit simpler, but gis-piet[5] bit bigger.

Hitchhicker's guide to the galaxy keeps it pretty small/simple with '42'; which means really have to fully expand/uncompress/unwind everything to get anything done.

---

[a] https://www.youtube.com/watch?v=jy-dpzi8neQ

[0] https://tree-sitter.github.io/tree-sitter/

[1] https://www.masteringemacs.org/article/how-to-get-started-tr...

[2] https://github.com/nvim-treesitter/nvim-treesitter

[2.2] : https://github.com/tree-sitter/py-tree-sitter / https://github.com/tree-sitter/tree-sitter-python

---

[b] https://www.seas.upenn.edu/~harmony/

[c] : https://github.com/bigaidream-projects/bidirectional

[d] : https://www.brics.dk/xsugar/

[e] : https://esolangs.org/wiki/Piet-Q

[f] : https://stable-diffusion-art.com/qr-code/

[g] : https://artvizual.com/featured/interactive-qr-code-art-exper... / https://www.hongkiat.com/blog/qr-code-artworks/

---

[3] : http://icps.u-strasbg.fr/~pop/gcc-ast.html / https://stackoverflow.com/questions/54162940/understanding-f...

[4] : https://scratch.mit.edu/

[5] : https://dl.acm.org/doi/abs/10.1145/1317331.1317345