Hacker News new | past | comments | ask | show | jobs | submit login

> As seems to be common with graphical programming things abstraction can be a little hard unless it fits into the node-with-fixed-inputs-and-outputs mold

In other words, you're trapped in a first-order box: http://lambda-the-ultimate.org/node/5157#comment-85605




Constraints sometimes are a creativity booster in art, so maybe not so much a trap. Whereas unlimited tools or canvases may paralyze it. Just look at the demoscene to see what people create in a self-imposed limited environment.

A person chooses to confine themselves to watercolors, and masters the medium, or does something spectacular with it, since they focused on that medium. Just looking at the vvvv examples, I'd say there's plenty enough there to get started and then some.

Praxis runs on many platforms since it is Java-based, and has node editing, but you can edit code on the fly as well. You can do visuals, and it has the beginnings of a sound synthesis base already working and in progress. [1]

I personally use Extempore, a livecoding environment that evolved from Impromptu. It has a low-level, Scheme-like language called xtlang, and can do sound and visuals too. [2]

I also use Tidal, a Haskell-based system to livecode patterns of samples - very addictive, since it is easy to make something quick. [3]

Fluxus is a scheme-based system, that is mainly for visuals, although there is a lesser-known audio component called fluxa for linux and Mac OS for it. [4] It was the first livecoding system I had really been exposed to around 2005, a few years after I picked up Processing. [5]

Somebody mentioned Pd, PureData. You need the extended version to do graphics, since the vanilla Pd is node-based just for sound creation.

There are many other systems, and it seems the livecoding scene is exploding.

[1] http://www.praxislive.org/ [2] http://extempore.moso.com.au/ [3] http://tidalcycles.org/ [4] http://www.pawfal.org/fluxus/ [5] https://processing.org/


From the Extempore link:

> xtlang also borrows many Lisp like semantics including first class closures [emphasis mine], tail recursion and macros.

xtlang doesn't trap you in a first-order box. That's a good thing.

From the Tidal link:

> Tidal is embedded in the Haskell language.

Haskell doesn't trap you in a first-order box. Programming in a DSL embedded in Haskell is just programming in Haskell.

From the Fluxus link:

> Extends the Racket language with graphical commands and can be used within it’s own livecoding environment or from within the DrRacket IDE.

Same as above, s/Haskell/Racket/g.

---

FWIW, I never criticized the use of DSLs for art (or any other purpose). Only the imposition of first-order jails.


I didn't take your post as criticism, but rather a spark, or conversation starter, to think about self-imposed limits in art via tools or physical handicaps.

I had immediately thought of the demoscene, especially Inigo Quilez [1], and his creation Shadertoy [2]. It is amazing to see what people create with these tools.

Thanks for the link on 'first-order jails'. I thought I had the gist of it, until I read your link. I especially like the back and forth about higher order vs. first order re: Haskell and graphical user interfaces. I am curious how it applies to Praxis, which has a node editor, but you can hop into the code which is in Java. It is built from the ground up for distributed, non-glitch livecoding.

I am an experimenter, and although I fancy myself reading about logic and computing, I am only passingly familiar with it WRT your reference. I learn a lot about it from my studies with Shen [3], and recently Idris. [4]

Extempore, and its programmng language xtlang, are driven by livecoding needs, but it is basically a general systems programming language at this point. I believe Andrew started with S7 scheme like CM (Common Music) did. The original creator, Andrew Sorensen, and Ben Swift who works on it too, are courting, or are being courted by the HPC world. The need to have a language that could handle time well, or 'temporal recursion' for music creation, lends itself well to HPC concerns. Xtlang is fast. C fast. It uses LLVM in the back.

Blender3D has a nice node editor for building up procedural textures and shaders too as in this tutorial. [5] I find that the node/gui approach keeps me focused on what I am trying to emulate or build. I don't like it for programming like in LabView though, and I don't like node-based programming in the few incarnations I have seen. OTOH, Brainfuck is TC, but I wouldn't want to be in that 'first order jail'-free environment either ;) REVELATION: I do like J, which some people say looks like line noise! [6]

[1] http://iquilezles.org [2] https://www.shadertoy.com/ [3] http://shenlanguage.org/ [4] http://www.idris-lang.org/ [5] http://www.chocofur.com/6-shadersamptextures.html [6] jsoftware.com


> to think about self-imposed limits in art via tools or physical handicaps.

Oh, I'm also not denying the value of self-imposed limits:

(0) In a library I'm writing, I'm enforcing these rules: no unreachable code paths, no exceptions (or any other form of sneaky control flow), no asserts. Programming under these constraints is difficult, but the result is very satisfying: my functions now have more precise argument types, because I'm not allowed to throw an exception if they're passed the wrong argument!

(1) When I write music (which admittedly I don't do very well), I find it useful to come up with, say, 10 potential leitmotifs, reject all but 2 or 3 of them, and force myself to write the rest of the song or tune around the selected motifs. The other motifs are completely forbidden, though they may be reused when writing another song or tune.

> I am an experimenter, and although I fancy myself reading about logic and computing

I think anyone who's doing something new, not done before, has to be an experimenter to some extent. Which is a good thing! That's how cool stuff happens: try various approaches, until you find one that works. Even logic was developed that way. First-order jails limit what you can try, though.

---

As for the rest of your post, I have read it, but I can't intelligently comment. I'm a visually challenged person - I'm not blind, but I'm the kind of person who needs a ruler and a compass to draw stickmen.


I am self-taught, and the way category theory has been popularized in more than just mathematics has resulted in so many papers that it is hard to keep up. I am skimming a book called 'Category Theory for Scientists' at the moment.

I was first turned on to logic by Raymond Smullyan's books for laymen, but I have since bought his more academic books; I have not made it through them yet.

Now I look for these concepts in my tools too. That is why I chose Extempore, being Lisp/scheme-based, and I have looked into Haskell-based tools like Euterpea for music, and just today Hylogen for livecoding shaders in Haskell. Elm is also cool for front end development.

> ruler and a compass to draw stickmen.

I am stealing that one!


Yes, that's about it. Sometimes that really matters and sometimes it doesn't matter at all. It seems like a lot of the time for the sort of things people do in vvvv it's not so important. I certainly found it a limitation but it's hard to know how much that's an actual need and how much it's just me thinking in the languages I'm used to.


> It seems like a lot of the time for the sort of things people do in vvvv it's not so important.

It's not so important until it turns out it is. Say, because the project, while initially small, has grown to a size that demands using abstraction. Or because, while the original programmer unwittingly reimplemented the same patterns over and over, the next programmer is less willing to put up with so much duplication.

Every attempt to lower the craft of programming to the level of those who aren't willing to learn it has resulted has resulted in:

(0) An eventual admission that this approach doesn't work, e.g., how JavaScript was originally supposed to be easy for non-programmers to learn, but eventually grew programming patterns and practices that require programming knowledge to understand and put into practice, while keeping the gotchas and rough edges that were supposed not to matter.

(1) Half-assed attempts to retrofit means of abstraction into languages with too much bad legacy code, e.g., generics in Java or modules in JavaScript.

(2) Yet another attempt to lower the craft of programming, this time by someone else. Loop.


this is why VL was developed, an object oriented visual programming language that has much more ways of expression. especially the idea of data types, loops, branching and iterator patterns. it can already be tested as an integrated language in vvvv (like C# already is) if you download the alpha builds: https://vvvv.org/vl




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: