An online event I'm co-running - Algorithmic Pattern Salon 2023
Talk sessions over five days, exploring contemporary and heritage algorithms in weaving, braiding, music, typography, live coding, juggling, etc etc
I love this, definitely planning to attend!
I’m just starting to learn how to crochet and it was both suprising and intriguing that we have not yet been able to reproduce these types of stitches with a machine.
(Edit: Ah this will probably be brought up in Julias talk, excited to learn more)
Yes she mentions that in her written submission, will be making that public it on the weekend.
I think there's a lot of weaving techniques that machines aren't able to do as well
It's still early, but what do you all think about levlo.com? Any feedback is welcome, but I'd especially love to hear how do you understand the product based on the messaging on the site. What would you build with it?
📝 Levlo
Levlo is a textual no-code platform that allows you to create, share, and monetize expert applications without coding. Start building your app today!
yeah, it's a bit difficult term, but the best I came up with.. The point is that you're not actually writing text, but using a graphical user interface that, among other things, only allows you to input valid tokens for any given location.
there is no parsing, so the 'code' can look a lot more like natural language. "Programming in plain English" is another label I've used for it.
Fair enough! I'm being picky. I think if you squinted I think you could say any text editor "only allows you to input valid tokens for any given location". I'm not sure if it's plain English. I think this might be called a 'structure editor'?
I'd say basically all text editors allow you to type anything anywhere. Like you can type "1 ++" into your codebase even if anything you would add afterwards wouldn't make it valid code. And yes, this is structured/projectional editing.
I mean you can only type characters in a particular set (e.g. ascii, unicode) within a fixed grid.
Well that's the programming language research field term yes, but would tell absolutely nothing to potential users 🙂
Hmm, yeah it's still code with if/else/+/-/</> tokens. If there's a small grammar, it could be nice to use, but for example AppleScript... I can't stand it, as a developer or non-developer. There are so many rules to the grammar that it makes it impossible to remember how to write it correctly.
... set AppleScript's text item delimiters to theSearchString
The order of nouns, prepositions, verbs, plurality, it's not just longer than code, it's more confusing.
How do you build a UI with it? What does a simple application such as a To-do list look like?
Will there be support for numerical units? "travel distance > 10". 10 what? I think I understand it more.. it's like a textual (vs grid) spreadsheet?
I suppose it's bit of an academic discussion that what is code and what's not. I do still like to refer to what's written with Levlo as "Levlo code" too. I'd just point out that natural English does have if/else and mathematical operators when used in specific domains. The operators could easily be replaced with words in Levlo, but I thought it'd be unnecessarily verbose.
Initially the idea is to target use-cases where a custom UI is not necessary (such as spreadsheet use-cases), however you'll be able to hide parts of the code and apply some styling to end up with a form UI. You can also host your Levlo App as a REST API so that it takes some of the inputs as query parameters and returns some of the computed values as results. This would allow you to build a completely custom UI for the logic implemented with Levlo.
You're probably right that if the grammar ends up being massive with many ways to write the same thing, it'll probably get difficult to use. But Levlo is not parsed so there's a lot more flexibility in designing the grammar than what AppleScript developers had. Also Levlo is able to offer the user an exhaustive list of valid tokens for any given location, so 'browsing' how to continue should be a lot easier.
Also, yes, my intention is to take the type system very far with numerical units, ranges, sets, and verified computations between different units.
Maybe it's not "code", but it is logic (logical and/or) and math, which code also uses. A structured editor that feels free-form is always nice. Some possibly related links:
Yeah, it's certainly logic and maybe I'd call any textual definition of logic "code", but then no-code refers to "not general purpose programming language code", not "not definition of logic", and textual doesn't mean a sequence of unicode/ascii/etc, but something that you can read as you read text. 😅
Interesting links! Thanks! Although, I'll pick Levlo over any of the tech listed 😄
It is sounding more like en.wikipedia.org/wiki/Logic_programming, with rules/clauses, formal logic.
I've published an essay Personification of computer processes where I introduce a metaphor that will allow us to program computers in a game-like (and also in "Dynamic Land"-like) environments. The website Latent Centers is a digital garden I started recently where I will continue to publish related work. The aim is to invent computing that makes us feel more alive.
I'm looking forward to hearing your thoughts!
(For the best experience, visit it on a desktop device. I haven't adapted it to touch devices.)
For me, coding comes down to functions, variables, and values, as you mention in the article. If you were to do the same personification to math for example, how would you do it?
The Program Counter represented as the active entity, walking through function execution. I like it better than I thought I would. It has ToonTalk vibes, but with fewer agents, so much more constrained, more grounded, and less confusing.
For me, coding comes down to functions, variables, and values, as you mention in the article. If you were to do the same personification to math for example, how would you do it?
@Mike Austin I'm curious if you had in mind some examples from math when you wrote the question. I assume that the subsets of math can be personified in the same way. I'm curious what examples you have in mind! Thanks for asking!
The Program Counter represented as the active entity, walking through function execution. I like it better than I thought I would. It has ToonTalk vibes, but with fewer agents, so much more constrained, more grounded, and less confusing.
Brian Hempel it does have ToonTalk vibes, happy to hear you find the idea compelling!
For many years I tried to find something similar to "beings" as the personification of processes. (I still haven't found it). Then at some point it occurred to me that maybe I can ask Alan Kay himself if he knows of anything like it, explaining the idea along the way. If I recall correctly I heard him claim in a couple of talks that most of the things have been invented in 80s or something along those lines. So I thought, well, let's put it to a test! To my surprise he replied back and pointed out Ken Kahn's ToonTalk. It is indeed done in a similar spirit, but not quite. The closest thing to beings in ToonTalk I would say are "robots", but they can't be controlled directly as beings can. They have a more specific role, not as general as beings. Like you say, there are many metaphors in Toontalk and it gets confusing because of that.
Interesting that you had an association with the Program Counter. What part of the article made you bring it up?
@Tomaz Zlender You could say that code is (mostly) just logic and math. If you turn variables, values, and function into different abstractions, what about the math and logic? What makes it different that those abstractions aren't changed? My head is kind of cloudy today, the right words aren't coming out 🙂
Another example, how would you describe an anonymous function: (x => x + 1)(5)
. It is a function, but has no space/portal equivalent if I understand.
Another example, how would you describe an anonymous function:
(x => x + 1)(5)
. It is a function, but has no space/portal equivalent if I understand. (edited)
Good question, the future examples will make that more clear. The anonymous function has a definition, which maps to a space, and even though it is "anonymous" it is still possible to point to it one way or another. I think the "portal -> function name" is confusing, I need to change it to "portal -> pointer to a function". Does that make it more clear?
what about the math and logic?
I don't have a good answer to this one, I'll have to think about it
the Program Counter
I watched the vid and only skimmed the writeup. The Being is doing the current step of execution. That’s what the Program Counter Register is in hardware: the current step of execution.
Hi everyone, my latest article on The Object Network and OnexOS is out:
It discusses "The Blob" - apps - and how we can free our data by "simply" not having those nasty apps coming between us and our precious digital stuff...
Idiosyncratic apps come between you and your data...
It's quite short and readable, I think. Let me know what you think!
The Inversion illustrated is actually the inversion from imperative to declarative architectural style.
We're experimenting with a novel form of "Programming by Example", similar to Excel macros: plato.io/blog/introducing-macros
I think it can scale quite well to a complete programming system with branching, looping, etc.. Thoughts?
How would branching work? Drag/press a condition button? Record two macros and mark them as branches visually?
@Mike Austin We're experimenting with a few variants. The most straightforward is your first suggestion, but the challenge is maintaining a consistent state. Macros are recorded with a "recording context", or an example of the parameters needed to run the macro (e.g. a single row of a table). But once you introduce conditionals, those parameters might not be valid for all branches (e.g. update if a record exists, insert if it doesn't).
So one option is to prompt the user to choose a different context (e.g. pick a different row).
Another option is more in line with your second suggestion (took us longer to come up with it, though :)). The user records a macro for a single context, then we alert them to a failure or possible failure for other contexts (not always possible, but usually is), and then they record a separate macro for that context.
This is more in line with classic "Programming by Example" systems such as the one described by Bret Victor (worrydream.com/MagicInk), where multiple examples are provided and the system tries to generalize.
where multiple examples are provided and the system tries to generalize
This approach fails. Just have the user write the branch condition explicitly.
Why do you say it fails? To clarify, we're not trying to do any "smart" inference. Just trying to come up with a scheme that's more inductive.
For instance, if you record a macro that accepts some input, searches for a row, then updates the row, that may work for your first example, but it will fail when the row doesn't exist. We can prompt the user when they hit that failure, and ask them what they want to do.
I agree it won't work in all cases, but we think there might be common patterns that will get us pretty far.
Is this representation editable, or must you redo the demo if one of these inferences is wrong?
Also, those aren't inferences, they're recordings of explicit user actions.
We can prompt the user when they hit that failure, and ask them what they want to do.
Maybe Eager did this? It sounds okay. But what you don’t want to do is implicitly try to infer the branch condition.
I’ve seen many PBD systems and the amount of work to demonstrate to try to get the branch condition is very much greater than the amount of work to just say the branch condition.
I didn't know about Eager. Thanks!
Are you aware of any PBD systems that only record explicit actions? All of the research projects I'm familiar with try to do an "observe and infer" approach, which I agree is too fragile.
For instance, our plan for looping is to make the user explicitly say they want to run a loop over a collection, rather than to try and infer that they're repeating actions for some set of elements.
Yeah less inference is better. If you could also add the loop after the fact, that’s even better. That’s where the editable program representation is helpful.
Yea, SmallStar is the most practical I've seen. But all of these systems operate in the desktop metaphor. Have you seen any that operate on structured or relational data? That's our context, and the problems end up being quite different.
“Why Programming by Demonstration Systems Fail: Lessons Learned for Usable AI” Tessa Lau. 2009. citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=37c50b0cc3c701b269c18014dd3a0c07f9c2b4b8
Most of these are solved with an editable program representation.
Have you seen any that operate on structured or relational data?
Surprisingly, not off the top of my head (nor in my quick search). Closest I can find is Gneiss, which is great in its own right. cs.cmu.edu/~shihpinc/gneiss.html
Wow, SmallStar goes waaay back. I was going to say something like PhotoShop actions.
Photoshop actions doesn't solve the hard problems like conditionals, AFAIK, though.
True. Just one example of macros that came to mind. I'd imagine they would have solved some interesting problems being how old PS is, though. I haven't use it in many years.
As strange as this might sound, the most powerful and usable PBD system I’ve ever seen is… emacs keyboard macros (the name’s a misnomer, they also record other types of events, like mouse gestures).
I have started experimenting with a mobile shader editor and wrote about it over on my blurgh: dflate.io/shady-phoney
You can play with it here: shd.is
And if you wanna signal boost me: mastodon, bsky & twtr
But most of all I'd be curious to read your thoughts, associations, etc. 🙂