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

Max is Max/MSP, where:

* MSP is an engine for generating/synthesizing/analyzing realtime audio which the user builds as a diagram in a GUI. The backend automatically sorts the diagram into a graph and generates the audio as the user builds the program. So by the end, the programmer has used their ears to measure whether the program can indeed compute audio for the diagram in realtime. (And the corresponding classes for signal computation are designed with soft realtime scheduling in mind.)

* Max is a general purpose programming language where the user creates and connects various branches of different Rube Goldberg machines together in a GUI. This appears superficially similar to DSP diagrams above. But each object in the chain can do anything from simple realtime appropriate math to doing file i/o while allocating large chunks of memory. There's no easy way to tell which of these Rube Goldberg objects are realtime safe. Plus one can iterate infinitely and recurse into already recursive chains of calls with ease. (The MSP engine prohibits recursion.)

Due to lack of constant aural feedback for Max diagrams, users typically keep a separate, erroneous mental model of all the Rube Goldberg machines in their short-term memory. In fact, most users practice a novel form of cryptography I call "Fresco-based write protection": the user keeps drawing and connecting more Rube Goldberg machines atop one another until their short-term memory becomes the only private key that can decode them. Given about 30 minutes for the frescoes to "dry," this technique is proven secure even against rubber hose attacks.

For maximum frustration, Max/MSP has objects which let the user hook Rube Goldberg machines up to a DSP graph, and vice versa. And I mean maximum frustration: while such inter-diagram connections give users functionality they wouldn't otherwise have, they also give users the false-confidence necessary to schedule a performance that ends up with that user staring at a silent laptop and muttering, "I don't understand, this worked fine on Tuesday."

Edit: clarification




> users typically keep a separate, erroneous mental model of all the Rube Goldberg machines in their short-term memory... the user keeps drawing and connecting more Rube Goldberg machines atop one another until their short-term memory becomes the only private key that can decode them.

It really was a cute rant (we've all been there where we've hated using something that much!), but honestly this bit describes every piece of sufficiently complex software I've worked on. Not sure about you, but I poke my coworkers all the time to ask "hey, can you explain what this bit of business logic does again? I think I need to reuse it for this new feature..." Maybe Max just needs a unit testing framework.


Not to mention, it doesn't have to work like this... There are people, and I say this unashamedely, like myself that are experts in how Max works from its lowest level systems such as the scheduler to basic concepts such as order of execution. It is a great language for putting together robust performance software as much as it is a playground for heinous DSP graphs which can break, splutter and fail. A lot of people here are complaining that Max is a bad language because you can't grep/sed/awk it or that it doesn't have unit testing but they're totally missing the point.


> but honestly this bit describes every piece of sufficiently complex software I've worked on.

Just to be clear: the word "atop" is being used literally here in a way that doesn't hold for text-based languages.

Your frustration: "What does z() do, and why is it calling flarg() twice?"

My frustration v0.1: "What does z() do, and why is it calling flarg() twice?"

clicks and drags an object to reveal another Fresco

My frustration v0.2: "What does z() do, why is it calling flarg() twice, and why are there 7 instances of flarg pasted atop one another with internal non-local connections which trigger stack-overflow protection every time z gets called? Also, why is there a zero-width spacer between the 'z' and the '()' which, while somehow syntactically correct, causes 'z' not to get called? Also, why does the text editor require one to click and drag a line from 'z' to the '()' in order to get rid of the zero-width spacer in order to actually call the function?"

Edit: I'm sure you can find similar weirdness in a text-based language. Perhaps if one made a contract that they're going to use a global setter variable in every function of a Javascript program which will mutate some global state. That would be bad. But you really have to work to do that whereas the natural tendency in Max is to wrap an object-chain back atop itself to create unreadable spaghetti as one builds a prototype.


lol unit testing? Max/MSP objects are just enormous json blobs. They have much bigger problems with that language than unit testing.

People interested in musical programming should investigate SuperCollider and completely bypass Max/MSP. It’s terrible software.


The object connections are described in json but the objects themselves are c++.


In Pure Data, the file format describes a directed graph of objects. It's not just freeform. Here's part of a presentation on "Dataflow Programming" talking through that graph:

https://www.youtube.com/watch?v=aPh4Z3SioB8&t=29m25s

Is Max/MSP different?

Pure Data is Dataflow-ish programming language. It's fine for Dataflow nodes to be written in another language so long as the node is self contained — that's the essence of "Hybrid Dataflow".

Pd has some global state so it's not pure Dataflow, but from what I can tell that state is not what the rant earlier is complaining about in the context of Max/MSP.


Yes, that is technically true. A more objectively correct statement on my part would have been, "Max patches are JSON blobs."

But let's be real: it's highly dubious software, exploiting the tired and inefficient trope of the noodly "patch connections" approach made famous by modular synth folks. The sound engine sucks, even with the new updates made recently. The new versions are made using the JUCE framework, and yet it has no Linux support. WTF? Good luck doing anything low-latency, on any platform, using any kind of hardware. Seriously, last time I tried to agonize with Max/MSP, that shit would start crackling at 48k and a block size of 192, that's absurdly poor performance for any sort of "modern" audio software.

Max/MSP is something made to take advantage of "computer musicians" and "audio engineers" who know very little about the actual computing platforms they continue to exploit. These people have become decidedly easy to trick, they simply don't approach their own so-called "craft" with the amount of skepticism they must have in order to continue to practice that craft.


> exploiting the tired and inefficient trope of the noodly "patch connections"

That's the whole point. pd works the same way and so does vcvrack among more localised tools like Reaktor.

> The new versions are made using the JUCE framework, and yet it has no Linux support. WTF?

I don't have any love for JUCE but you are naive to think that its as easy as setting a new compile target and pressing go. Max is for profit and they need to target the most salient customers. Forget how little the percentage of people is that use Linux - you are aiming this product at a niche of niche people already. Be realistic here if you're own money was at stake.

> Good luck doing anything low-latency, on any platform, using any kind of hardware. Seriously, last time I tried to agonize with Max/MSP, that shit would start crackling at 48k and a block size of 192, that's absurdly poor performance for any sort of "modern" audio software.

I can't say I've had as much problems as you. I have a friend whose work has to be as low latency as possible (so that onset detectors are working really fast) and his system is running somewhere at 16/32 for vector size. The processing after this is non-trivial also.

I'd be curious to know what your professional use of Max is as you seem to have an incredibly aggressive attitude to the software, how its made and the people that use it.


> Max is for profit and they need to target the most salient customers.

The problem with this is that...

> professional use of Max

... surely, you jest.

This software is not stable enough, useful enough, nor performant enough to be used in professional settings, outside of perhaps some of the "multimedia performance" buffoonery of people like Carsten Nicolai.

One could not reasonably use Max/MSP for scientific or academic purposes, for anything where precision was required. There is are so many useless GUI/state management operations being performed by the sound engine that it makes it an unreliable tool.

Contrast this with Max's FOSS cousin pD, the highly performant SuperCollider, ChucK, or Csound even! It's a blow-out - Max/MSP is the worst-performing, has the least imaginative and least innovative approaches, and doesn't really do much at all in the way of refactoring for performance or for broad compatibility with other software/hardware. Its community is the least-knowledgeable and contributes the least - by far - to the broader computer music community.

I had this Max/MSP nonsense thrown at me all throughout my collegiate education. I was always able to easily convince people I didn't need that specific, useless, proprietary software, to do my work. But it was a constant uphill battle I had to fight. Because all Max/MSP did was entrench itself in areas of the audio technology world that did not know better.

It's terrible software, designed with a terrible software development ideology, and made popular for all the wrong reasons.


Why do you find Pd so much better?

FWIW, Radiohead used Max/MSP live IIRC. Aphex Twin has used it. Neither are "multimedia performance buffoonery". Though I love your characterization because I've been subjected to plenty of said buffoonery.


For us plebes, the FOSS makes pd great. Backwards compatibility is nice, resurrecting 10 year old patches has never been a problem for me.

I suspect being successful musicians, cycling74 has an interest in getting their product into your rig. I bet Johnny Greenwood gets custom objects if he calls them up.


Max/MSP is used professionally by Autechre for many albums now as well as live on stage.

I’ve written several devices and never had any problems yet. I’m using a bog standard laptop from 18 months ago.

I also Reactor and ChucK and JUCE directly.

Nice rant tho.


I teach Max at a college level currently. The Rube Goldberg machines you speak of result from over engineering and the weird philosophy Cycling 74 has of always having new versions of Max be backwards compatible.

However after you spend a good amount of time you start to be able to avoid these higher-level over engineered mini libraries and be able to use lower level operators to achieve exactly what you want and nothing more. After you build up your own library of modules all is well.

But I do agree with your point. I've even been creating my own counters lately because even simple things like the counter "object" in Max are so bloated.


How much of your critique of Max/MSP does apply to Pd? ;-)


> Fresco-based write protection

LOL ain't that the truth.

Max projects can become spaghetti monsters very easily even if you create custom objects and such.


Bravo! If you enjoyed that anti-Max performance art trolling, but thought it wasn't spectacularly hyperbolic and sociopathic enough, I recommend looking up some of the classic flames on the nettime mailing list by Netochka Nezvanova aka "NN" aka "=cw4t7abs", "punktprotokol", "0f0003", "maschinenkunst" (preferably spelled "m2zk!n3nkunzt"), "integer", and "antiorp"!

https://en.wikipedia.org/wiki/Netochka_Nezvanova_(author)

>Netochka Nezvanova is the pseudonym used by the author(s) of nato.0+55+3d, a real-time, modular, video and multi-media processing environment. Alternate aliases include "=cw4t7abs", "punktprotokol", "0f0003", "maschinenkunst" (preferably spelled "m2zk!n3nkunzt"), "integer", and "antiorp". The name itself is adopted from the main character of Fyodor Dostoyevsky's first novel Netochka Nezvanova (1849) and translates as "nameless nobody."

She (or he or they or it) were the author of the NATO.0+55+3d set of extensions for Max, which predated Jitter:

https://en.wikipedia.org/wiki/Nato.0%2B55%2B3d

>NATO.0+55+3d was an application software for realtime video and graphics, released by 0f0003 Maschinenkunst and the Netochka Nezvanova collective in 1999 for the classic Mac OS operating system.

Behold this beautiful example of fresco-based write protection:

https://enacademic.com/pictures/enwiki/78/Nato.0%2B55%2B3d.p...

http://www.skynoise.net/2005/10/06/solu-dot-org-vj-interview...

>>>What’s your connection with the notorious ‘nato’ software?

>Nato was the first software that gave me the push to start exploring the live visual world.. before that I did video art making analogue video, and imposing graphics with amiga. Then multimedia and internet projects seemed to offer more possibilities and not until finding Nato did I return to pure video. Fiftyfifty.org was distributing Nato in the beginning, and invited Netoschka Nezvanova various times to Barcelona, my connection with Nato was quite close but now I’m using the “enemy” software Jitter and sometimes Isadora. Jitter is far more complicated and more made for engineers/programmers than Nato, which was basically a video object library for max/msp, and more fun – it seemed always so fragile, and easy to lose.

https://news.ycombinator.com/item?id=8418703

DonHopkins on Oct 6, 2014 | parent | favorite | on: "Open Source is awful in many ways, and people sho...

Does anybody remember the nettime mailing list, and the amazing ascii graphics code-poetry performance art trolling (and excellent personalized customer support) by Netochka Nezvanova aka NN aka antiorp aka integer aka =cw4t7abs aka m2zk!n3nkunzt aka punktprotokol aka 0f0003, the brilliant yet sociopathic developer of nato.0+55+3d for Max? Now THAT was some spectacular trolling (and spectacular software).

https://en.wikipedia.org/wiki/Netochka_Nezvanova_(author)

https://en.wikipedia.org/wiki/Nato.0%2B55%2B3d

http://jodi.org/

http://www.salon.com/2002/03/01/netochka/

The most feared woman on the Internet

Netochka Nezvanova is a software programmer, radical artist and online troublemaker. But is she for real?

The name Netochka Nezvanova is a pseudonym borrowed from the main character of Fyodor Dostoevski’s first novel; it translates loosely as “nameless nobody.” Her fans, her critics, her customers and her victims alike refer to her as a “being” or an “entity.” The rumors and speculation about her range all over the map. Is she one person with multiple identities? A female New Zealander artist, a male Icelander musician or an Eastern European collective conspiracy? The mystery only propagates her legend.

Cramer, Florian. (2005) "Software dystopia: Netochka Nezvanova - Code as cult" in Words Made Flesh: Code, Culture, Imagination, Chapter 4, Automatisms and Their Constraints. Rotterdam: Piet Zwart Institute.

https://web.archive.org/web/20070215185215/http://pzwart.wdk...

    Empire = body.
    hensz nn - simply.SUPERIOR
    
    per chansz auss! ‘reazon‘ nn = regardz geert lovink + h!z !lk
    az ultra outdatd + p!t!fl pre.90.z ueztern kap!tal!zt buffoonz
    
    ent!tl!ng u korporat fasc!ztz = haz b!n 01 error ov zortz on m! part.
    [ma!z ! = z!mpl! ador faz!on]
    geert lovink + ekxtra 1 d!menz!onl kr!!!!ketz [e.g. dze ultra unevntfl \
    borrrrrrr!ng andreas broeckmann. alex galloway etc]
    = do not dze konzt!tuz!on pozez 2 komput dze teor!e much
    elsz akt!vat 01 lf+ !nundaz!e.
    
    jetzt ! = return 2 z!p!ng tea + !zolat!ng m! celllz 4rom ur funerl.
    
    vr!!endl!.nn
    
    ventuze.nn
    
       /_/  
                             /  
                \            \/       i should like to be a human plant  
               \/       _{  
                       _{/  
                                      i will shed leaves in the shade  
           \_\                        because i like stepping on bugs
https://anthology.rhizome.org/m9ndfukc-0-99

Netochka Nezvanova was a massively influential online entity at the turn of the millennium. An evolution of various internet monikers, among them m2zk!n3nkunzt, inte.ger, and antiorp, Nezvanova has collectively been credited for writing a number of early real-time audiovisual and graphics applications. She was also a prolific and divisive presence on email lists, employing trolling as a form of propaganda and as a tool for creative disruption—though, at times, users adopting the moniker also engaged in harassment and other destructive behaviors.

Among her most well-known pieces of software are the data visualization application m9ndfukc.0+99, which runs within a custom browser created for the app, and the realtime audiovisual manipulation tool, NATO.0+55+3d (which would later be repurposed as Jitter by Cycling ’74). Using data as raw material, these applications mined the artistic potential of noise, randomness, and the unexpected.

In spite of (or perhaps in service to) the many pieces of software attributed to this anonymous online entity, the singular lasting impression of Nezvanova has been rooted in her seriously anarchic attitude—in the elusive, yet public, persona that she carefully crafted as a hybrid, internet-based act of performance art.

Whether trailing code poetry across nettime mailing lists and online forums, or distributing software licenses at contentious fees to academics, Nezvanova was using information architecture itself as a medium. Often times, she would forgo the legibility of clean software design to produce unpredictable outcomes, and even reveal discrete truths.

    "I have not been thrown off a mailing list.
    I have been illegally transformed into a yellow flower.
    A young girl one day found me, and with half closed eyes whispered:
    Perfection,
    Today you've peered in my direction."

    —Netochka Nezvanova
https://www.nettime.org/

https://www.nettime.org/Lists-Archives/nettime-bold-0101/msg...


Oh, it was so futuristic! I was young and easily impressed. It was the last time for me that the present felt like a prelude to the future. A few years later and the progress of time meant little more than a constant dribble of new codepoints getting added to the emoji set.


But we have face tracking piles of poo now!




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: