Yesterday I recorded the first episode of Making Cell, which is basically going to be about building cell from the ground up, live. In this episode, I explain the basics and put some The Smiths in the background.
It would help interested visitors of your repository to provide more background about the application domains you are aiming at. "make programming as effective as possible" is a nice high-level goal, but for which kind of programs do you want to achieve this? Readers have to guess from the keywords that follow (database, service, interface - it's pretty clear that you are not thinking about embedded systems, for example).
Ah, good point! I'm still aiming (pretentious and impossible as it sounds) for universality. I wasn't thinking of embedded systems in particular, where you'd perhaps have minimal interfaces.
I'll make a clarification that I want to make it as universal as possible (knowing full well it might be a failure exactly because of this).
Thank you for checking it out!
At yesterday's meetup I demoed a node and wire tool I'm working on in the scientific computing domain.
@Márton Gunyhó had an interesting question, so I'm sharing here in case anyone has any related thoughts:
do you use some graph algorithm to figure out what needs to be recomputed, or do you keep all intermediate values in the wires in memory? I imagine the latter would get pretty heavy pretty fast.
Currently I've gone with the simple/naive approach of just keeping everything in memory. This is nice because any long-running nodes at the top of the network don't need to recompute when their descendants need to re-run. This does mean that you can run out of memory quickly if you are dealing with large pieces of data though.
I'm not sure what my long-term solution is yet. Currently my thoughts are to start dropping/caching-to-disk large pieces of data as memory usage to get too high, and recompute when they are needed again. In the meantime, it's not too bad for the primary use cases I have in mind to simply be content with working with a subset of data that fits into memory.
Also, thank you @Márton Gunyhó for letting me know about xarray.dev! I wish I knew about this library sooner
The future optimization for using less memory reminds me of memoryless textures and sparse textures in GPU coding land. If you don’t need intermediate steps, you can just reuse the memory.
Something you might consider is having the user select what to keep in memory. Provide a simple and unobtrusive UI (e.g. a small button), and some equally unobtrusive UI for figuring out the size of the dataset (e.g. hovering over that button).
Background: as a power user, I much prefer manual control over some superficially smart solution that one day I will have to reverse-engineer and fight to get my work done.
Wow, lot's of great stuff you all are posting here! So exciting 😃
I'd like to share something too, it embraces the "scaling-down" sentiment I am seeing in other projects here.
I designed a semantic hypermedia data structure (FIFO) with a "higher-order" syntax, allowing form to be transferred across text/gui substrates. The general idea was to see how closely you can emulate hypermedia documents using just semantic and semiotic rules. These rules are then encoded in a rendering pipeline to systemically present the data on the screen. It sounds fancy but in practice it's very mundane.
FIFO's syntax is actually inspired by the file system information model, which, as we know, has these properties, allowing trees to be rendered systemically and consistently in whatever style, but without any loss in meaning. Not only file systems, though, this is a very pervasive modality, such as the universality of frequencies in relation to the particularities of timbre, or natural language itself, which is very malleable in terms of encoding, preserving meaning mostly intact regardless of representation. This sort of thing is only possible with models that are purely abstract, immaterial, but yet well defined.
Now this is not just for fun, it can be very useful to have a document language like in some scenarios, for instance, to very cheaply and quicky compose and distribute multimedia information. I made my website using FIFO, and also a portfolio for a friend of mine. It's just a proof of concept at this point, I invested very little in the rendering part, just enough to make it usable. In the future I'd like to make an editor for it, for now I just write it by hand. You can check the links below to see it in practice. Before anyone asks why bother with all the work to have a worse version of markdown, consider that: 1) this is not markup but a data structure, it has it's own in-memory DOM and query interface, 2) it's extensible, 3) it's hierarchical, so you can have directories in the document, 4) it's mathematically rigorous, 5) is composable, and some more things. The fact it looks like a basic document is consequential, as the whole idea was to capture the stereotype but starting from a different principles. There can be different visual renditions, too, I'm just not so much creative in this department.
visual repr: jon.work/og
text repr: jon.work/og/index.fifo.txt
visual repr: jon.work/fifo
text repr: jon.work/fifo/index.fifo.txt
visual repr: henriquecesar.pages.dev
text repr: henriquecesar.pages.dev/index.fifo.txt
📝 File Systems: The Original Hypermedia
A vision for a universal, accessible hypermedia system inspired by the file system paradigm
A critical overview of FIFO: a semantic data structure for hypermedia
Home Page de Henrique Cesar
Interesting! Your FIFO reminds me of two somewhat similar (but differently focused) projects I have seen before:
📝 The Most Elegant Configuration Language
Dmitrii Kovanikov's Personas Web Space
Both very exciting projects! I love this kind of stuff. Pretty sure I've seen Tree notation during the discovery phase of my research! And the CCL article is a gem, had real fun reading it, the author is much better than me at explaining things
I feel that CCL ended up a bit poisoned by concrete syntax. FIFO can have whatever concrete syntax as long as it follows the higher-order syntax.
I think also that CCL missed the advantage of treating "start of line" as a first-order type/key for encoding multiline values. It makes the whole system even more pure
This is how FIFO is parsed into memory, it's definitely a graph, but I also suspect it's a variation of hypergraphs too, since edges can relate multiple nodes, and even have edges themselves
Now I am a bit lost. What I see is a tree, both visually and in the parsed data. Where are the edges that relate multiple nodes? Where are edges that have edges themselves?
The edges are reified. Nodes prefixed by a dot (meta nodes) are edges/relations between data nodes. The example given was not meant to be a sample demonstrating the qualities I mentioned. Indeed it mostly behaves as a tree due to the text source layout. But when using a live environment, such as a GUI interface, the text representation is not needed, and so it facilitates more advanced compositions. In any case, this is more in theoretical than practical utility, since it's designed for documents and those are naturally tree-like
I haven't gone as far as implementing references and a parsing supporting it, so this is just a mock to demonstrate the layout. I've done it by hand so might contain some errors. I think you can even use the file system to create hypergraphs by interpreting directories as hyperedges and using symbolic links to instantiate nodes (files) across many directories. Basically any tree model can be elevated to a hypergraph with semantic interventions. What's missing from this in-memory repr are multivalued backreferences, which would allow for multiway pathfinding starting at any node
🗒️ Sem título
the row schema is [parent_id, relation_id, key, value, meta_relation, data_relation]
There are indeed multiple ways to represent a file system as a (hyper)graph. The question is what you gain from moving to more sophisticated graph representations. A plain file system without links has a well-established representation as a tree. You can choose to represent directories are hyper-edges between files, but unless you add links (which let you add any file to any hyper-edge), you don't gain much from that. Inversely, if your use case profits from hypergraphs, the question is if implementing this hypergraph as a tree plus links is the best concrete representation.
I wrote a blog post undoing one by one the tricks I used to write a Wasm compiler for a Reverse Polish Notation calculator that fits in a tweet: