Loglo: Experimental spreadsheet and stack language for vector graphics
loglo.app
loglo.app
1. You can either define a function scattered across multiple cells in a single row, or gathered all in one cell. But as is, it doesn't look like you can define a function taking arguments in the scattered way.
2. The way the row evaluation works, each cell from left to right shares a stack. But the cells only show the top of the stack. The rest stays hidden. This feels like a departure from a key tenet of spreadsheets: to show all the data.
But this really sparked lots of ideas for me, and even got me to make a 5.5 minute video riffing on it: https://archive.org/details/akkartik-2020-06-17-LoGlo
I wonder, for formulas, if word stack effects are known or inferred, might the language simply be syntactic sugar? So `A:| 3 | 5 | negate | plus |` desugars as `| 3 | 5 | =negate(A2) | =plus(A1,A3) |`. Because the stack effects of negate and plus are known to be x-x and xx-x respectively. Factor is an example of a concatenative language with explicit stack effects. It does sacrifice allowing variadic words.
Might a range of code cells serve as a code block? In a concatenative language, evaluating a word simply pushes its definition on the stack. So if `A:| 1 | + |` and `B:| 2 push(A1:A2) |` then B1 would expand as `2 1 +`. So perhaps named ranges and custom formula definition are then overlapping concepts?
Meta: I find it curious that this post, variously submitted a day ago, and again at 1/2 and 1/4 day ago, were all at 1 or 2 points with no comments, and then this, the first submitted, surged to popularity. I'm glad it "caught".
Please say more!
* each spreadsheet defined one function
* one sheet for inputs, each input labeled (i.e. function parameters)
* one sheet for outputs, each output labelled (i.e. function results)
* sheets for test data for inputs and expected output (examples of correct function parameters and results)
* cell values could be result tables from SQL statements, with cell formulas that could act on tables (where, join, etc) i.e. a single cell could contain a table value
* the idea was to allow consultants to naturally design business rules in a functional manner, and intuitively see how values flowed through a calculation. Debugging is natural, and test driven design is built in to the design. Business rules are often driven by examples in my experience.
* Because all calculations are a graph, I believed that the results of complex business rules could be computed efficiently as updates occur.
There was more to it of course.
I liken this to OpenSCAD, which is really fun in a similar way.
Having generated files for CNC mills, laser cutters, waterjets, and a plasma cutter, drawing by writing commands seems like the wrong way to do the job. Everybody uses graphical tools for that. There was once a programming language for machine tools called APT, where, amusingly, GOTO moved the tool. Nobody does that any more. Maybe for CNC punching or drill lists, but not for anything with non-trivial edges and surfaces.
The good graphical software for this is expensive, though. Vectrix has a whole line of software - Cut2D, Cut2D Pro, VCarve, VCarve Pro, and Aspire, starting from $150 and each more expensive than the last. They're really all the same program.
You can also do this stuff with Autodesk Inventor, Fusion 360, SolidWorks, or other high-end CAD programs, but those are overkill for a laser cutter. On the free side, there's TinkerCAD and FreeCAD, which can do the job and suffer from the usual problems of open source GUI programs.
I only ever deal with GCode when outputting to my CNC.
To my - very likely entirely ignorant - eye, it seems to hyper-complicate something much easier and quicker done with a mouse (etc) and a GUI.
I'm sure I'm just a bit stupid.
Avi was one of the founders of Dribbledb. I miss Dribble!
I agree--it was an interesting time and Dabble seemed really fresh and unique in its choice of tools!
ImageTracer is a simple raster image tracer and vectorizer that outputs SVG, 100% free, Public Domain.
Available in JavaScript (works both in the browser and with Node.js), "desktop" Java and "Android" Java:
https://github.com/jankovicsandras/imagetracerjs
What an interesting combination!