Future of Coding - Orca: Devine Lu Linvega

Episode Date: March 1, 2020

Orca is a visual programming environment for making music. Except it's not graphical, it's just text arranged in a grid. Except it doesn't actually make music, it just silently emits digital events ac...ross time. When you first see it, it's utterly alien. When you start to learn how it works and why, the logic of it all snaps into place, and it becomes a thrilling case study for authors of live programming environments and interactive media tools. Devine Lu Linvega, Orca's creator, struck a wonderful balance between flashy style and significant utility. Orca is typically encountered as an inky black and seafoam green alphabet soup, pulsating to some species of broody electronic industrial throb. But it is also a forgiving learning environment that doesn't crash, puts code and data together in the same space, lets you directly manipulate code and data interchangeably, allows generous recovery from mistakes, and supports discovery through freeform play. I invited Devine to come on the show specifically to brain dump about the design process of Orca, how he started the project and built it up to what it is today. During our three-hour conversation we wound up talking a lot about all the other tools he's created, and you can hear that discussion on last month's episode. This time it's all Orca — inspirations, execution model, operators, interface, system design, ports & reimplementations, interactions with other tools, and the community. This episode contains many snippets of music, as examples of what you can make using Orca. All of it was created by Devine, and is available on his Youtube channel. If you like a particular piece and want to hear the full thing — and see exactly how Devine made it — they are all linked in the transcript at the point that they appear in the show. So just scroll and skim, or search the transcript for some phrase that neighbours the song you want to find. Quote of the show: "It's for children. The documentation fits in a tweet, basically." Links Devine Lu Linvega is our guest. He and his partner Rekka funnel their lives and creativity into Hundred Rabbits. Devine has created countless tools, but Orca is the focus of today's episode. He also appeared on the previous episode. Support them on Patreon, so they can keep making amazing things like Orca. At the dawn of time, Devine was inspired to make a game by misunderstanding an Autechre music video. I don't know which one he meant, but here's a classic. And, why not, here's my favourite song of theirs. Yes, that's one song. Put on some big headphones and play it loud while you read, debug, sleep, drive, trip, what have you. In the theme of creation through misunderstanding, Orca was inspired by a misunderstanding of Tidal. It's not mentioned in the episode, but I wanted to link to this Tidal remix (By Lil Data, aka FoC community member Jack Armitage) of a song by Charli XCX. This remix slaps, but... you can't really feel what the music is going to do based on the code, hey? Rami Ismail hosted a year long game jam, for which Devine and a friend created a little block-based puzzle game named Pico, which would eventually become Orca. Sam Aaron created the music coding tool Sonic Pi, which is included by default with Raspbian. It reminded Devine a little bit of Processing without the compile time, and seemed similar to Xcode's Playgrounds. Dwarf Fortress, ADOM (Ancient Domains of Mystery), and other Roguelike games are precursors to the 2D character grid of Orca. The code structures you create resemble the patterns in Game of Life. Learning how to read Orca code is like learning to read the code in The Matrix. Orca's traveling N E S W operators are likened to Rube Goldberg machines, rolling ball sculptures, and the Incredible Machine. Orca is a language that uses "bangs", a concept borrowed from Max/MSP and Pure Data. Devine also made a similar looking flow-based web framework called Riven. Generative music arguably went mainstream with In C by Terry Riley. Here is the definitive recording, and here is one of my favourite renditions. While you can make generative music with Max/MSP, or Ableton Live, Orca offers a much richer, easier approach. The Chrome version of Orca is easy to get up and running with no dependencies, thanks to web platform features like WebMIDI and WebAudio— much easier than tools like Tidal or Extempore, especially if you use Orca's companion synthesizer app Pilot. Orca is so simple that it's been ported to Lua and C. The C version runs nicely on the Norns, which is a little sound computer by Monome. Ivan recently listened to a fantastic interview with Miller Puckette (creator of Max and Pure Data), which sparked curiosity about realtime scheduling for live-coded music tools. Orca's Euclid operator U was inspired by the Euclidean Circles synth module. The community around Orca largely grew out of the "lines" community, a forum started by Monome. They make a lot of pieces you can use as part of a modular synthesizer rig — you know, one of those giant cabled monsters used by the likes of Tangerine Dream in the 70s. People still do that, and it's better than ever. It seems like all node-and-wire visual programming languages, like Origamiand Node-RED, are perpetuating certain conventions borrowed from modular synthesis without any awareness of that history and the limitations it imposes. This makes your humble host a touch grumpy. The THX deep note was an early example of the wild polyphony afforded by computer-synthesized audio, as opposed to the limited polyphony or even monophony of analog synthesizers. You can use Orca to control Unity, which is neat. You can use it to play QWOP, which is nuts. Speaking of QWOP, it's part of a whole genre of hard-to-control games like Surgeon Simulator, Octodad, I Am Bread. Devine has used Kdenlive and Blender to edit videos, since they're both really good (for an open source programs). Better than editing just with FFmpeg. Remember when Jack Rusher said "Orcal"? Yeah, good times. The transcript for this episode was sponsored by Repl.it. They're amazing, and seeing stories like this just melts my heart. Email jobs@repl.it if you'd like to work on the future of coding and, hey, help kids discover the joy of computing. For the full transcript go to https://futureofcoding.org/episodes/045#full-transcriptSupport us on Patreon: https://www.patreon.com/futureofcodingSee omnystudio.com/listener for privacy information.

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to the future of coding. I'm Ivan Rees. Orca, with Devine Lu Linvega. Orca is a visual programming language. It is ostensibly a tool for music, but as you'll hear in this interview, there's nothing strictly musical about it. It is simply a tool for generating patterns of events in time. In this interview, Devine shows us Orca from many different angles. We'll learn about Devine's philosophy of creation through misunderstanding, Orca's origins as a simple video game
Starting point is 00:00:57 and how it evolved into a tool for music, the way Orca found a community and how that community pushed the design of Orca in new directions, and of course, we'll spend quite a bit of time reflecting on the language model itself. Single character operators, base 36 numbers, no abstraction, all code and all data visible at all times. Now, if you have never before seen Orca, you have two choices. I recommend pausing this podcast and going to the show notes, which are at futureofcoding.org slash episodes slash 45. There will be screenshots of Orca,
Starting point is 00:01:45 as well as links to videos of people using Orca to live code music. Your other choice is to just keep listening. Throughout the conversation, we will occasionally stop to describe how Orca looks or how it works, assuming that some people might need a mental image to understand what we're talking about. Podcasting is an audio medium, which makes it tricky to cover a visual programming language like Orca, but we did our best. On the other hand, Orca is also a tool for music.
Starting point is 00:02:18 I placed musical interludes at the natural corners in our conversation where we changed topic. All of the music featured in these interludes, and the music at the end of the show, and the music you're hearing now, all of it was created by Devine using Orca. He has these songs and many more on his YouTube channel, and you'll find links to every song in the show notes. Now, a word of warning. Normally, I like to listen to my podcasts sped up a fair bit, usually just a hair under 2x speed. If you're anything like me, you might want to start listening to this show a little slower than others.
Starting point is 00:02:59 Unlike most podcasts, this show is edited, so you'll find there's less dead air and awkward pauses. This episode in particular warrants this warning because it has music. I specifically tried to select songs that would still be comprehensible, if not enjoyable, when sped up some amount. But if you go too fast, well, you're on your own. If you missed the previous episode, it's worth going back to. It's the other half of my interview with Devine, where we talk about all his work except Orca. Each of these episodes is standalone, so don't feel like you're missing any context if you haven't heard it. One last
Starting point is 00:03:38 programming note, stay tuned to the very end of the episode if you want to hear who next month's guest will be. I'm pretty excited about that one. All right, on with the show. Devine is going to start us off by telling us where Orca came from in a philosophical sense. Orca was me misunderstanding how Tidal actually worked. Okay. You know, sometimes you see something and then you're like, wow, this is brilliant. And then when you actually figure out how it actually works, you're kind of like, huh, that's not really how I interpreted it. Well, my life is full of those. I remember when I first saw the O-Tekker music videos,
Starting point is 00:04:32 I was like, wow, this is a great game. I must find this engine. But then I realized it was all hand-keyframed, pre-rendered. Yeah, exactly. But that inspired me to actually build what I thought it was one of the first somewhat programming-y
Starting point is 00:04:52 project that I've attempted with something like it I was like oh I'm just going to make the Otega music videos sort of like an audio reacting thing I thought it already existed but I didn't have access to it but later I learned that it just didn't exist at all and it was just me projecting that you know that it was a thing well Tidal was kind of like that I saw people using Tidal and on YouTube
Starting point is 00:05:18 and I was like hey I can do that But then when I actually learned later how... It's hard to explain now, looking back, because I don't have that sort of innocent look on it. But I thought what I was looking at might have generated this specific sound I was hearing, but I think in the end it wasn't. With Tidal and these kind of languages, sometimes it's kind of hard to inspect
Starting point is 00:05:44 how the sounds are generated, or at least where they come from, especially in sequences. with title and and these kind of languages sometimes kind of hard to to inspect uh how the sounds are generated or at least where they come from especially in sequences there's like an emacs thing that lets you uh interpret some passage of of title code in real time and you can kind of see it um sort of like the line highlights but later i kind of like understood how that worked and it wasn't it wasn't that the music was you know making these lines blink but it was I think the person just interpreting these specific lines on the beat I think it's important at this point for any of the listeners who haven't seen title title is a live music programming environment but it's structured much like traditional text-based code where you have lines of instructions
Starting point is 00:06:43 that proceed in a certain order it's sort of like a repl where you can evaluate a certain statement and that will start triggering some behavior in the music yeah you'll you'll pick your your sequence that you want to because it works in this kind of like sequence things starting with d and then you can you'll be like i want to i want to play this this one and then you can kind of pause it and you can also affect the others by whatever's playing at the moment but it's all happening in a in a text coding environment that looks very similar to what you would be coding in if you were using c or java or javascript or one of those kind of languages yeah title is it looks like it well it's based on haskell but when you
Starting point is 00:07:19 actually write title code this it doesn't really look so much like haskell but it has these like all these sort of like arrows and double semicolon and these kind of stuff the special syntax to mean things in a musical sense right yeah the title language is actually really nice it has a lot of things that i can appreciate more now like looking back orca is sort of like a i think it's a good way to get into that sphere but it doesn't extend really well. If you want to break the mold of Orca, it's tricky, or at least I haven't found ways that are elegant. When I look at Tidal now, I'm like, oh yeah,
Starting point is 00:07:56 you really have the power of it being more verbose gives you more power, which the challenges are different in Orca. Estate is really important. You get quickly cramped in your program in Orca, and that's not something that you have so much with title but the trade-offs is that with orca you can like it it really focuses on the idea that you can always see what is happening one thing that i started to do is like the show in berlin i would write some code that even though it doesn't play just yet people can expect it to play in a certain amount of frames and people can see it on the screen. Like there's like this number counting down and when that number is counting down and it sends a projectile and you can kind of like follow it across the street.
Starting point is 00:08:33 Watch it move across the screen. And then you're like, oh, what's going to happen when it hits that thing? And that in a sense creates a sort of a buildup and expectation. And I thought that was kind of like a nice power to have for a crowd. Every single thing that generated the sound, you could see it. You could inspect everywhere. All the sounds come from it at all times. And that was kind of like one of the important things.
Starting point is 00:08:56 So that was sort of like your goal in starting it, to make an environment where, as a member of the audience watching somebody live coding, you can actually see things happening in the programming environment that match up with sounds in the music that you're listening to. Kind of. Okay, so at this point, I was maybe halfway into the timeline of Orca. Because that's not really where it came from, but that's where it became a sort of mine, we made a game for Game Jam called Pico, and it was like a little puzzle game where you had generators and combiners and you would send a red block and a blue
Starting point is 00:10:17 block into a combiner and then you would get a purple block and the goal was to make some kind of shade of teal and then you would have to was to you know make some kind of shade of teal and then um you would have to you know solve this little puzzle by using these little machines and it was in 3d space and so so that was maybe like five years ago or more a while back anyways and maybe two or three years ago rami's male was was doing a sort of like a year-long game jam where there would be like one developer every single day of the year making one game and mine was like oh i'm just gonna make a demake of of that that color game that we made and it's gonna be in html it's just gonna be like moving little uh cells around and and it had no sense at that point that it would ever make music. It was just kind of like you could send V and the lambda,
Starting point is 00:11:07 no, the caret sign, and greater than, lesser than, you could send these little arrows around and solve little puzzles. And I thought that was kind of neat. But then I saw people on Twitter use that to trigger MIDI events. And I was like, oh my God, this is so cool. So we're going to add more operators, and we're going to add one that deflects and one that reflects and one that just splits and so like in a sense the first few letters that ended up being in orca were the north south east and west and eventually just
Starting point is 00:11:36 just adding little operators i i end up having like a 26 or something like a whole family of them and then i was like well that's it so that this is like it it's like a little puzzle game that lets you play music and and so on and then i started to think that maybe i could use that to play a show and then that's kind of like oh well okay so let's look at how other life coding languages are doing and then i did i did it i contacted sam aaron and i was like okay so can so what can you tell me about? Because I have a bunch of Raspberry Pi computers that I use for doing some various kind of work on the boat. And when you install Raspbian, it comes with Sonic Pi. And I was like, oh, cool.
Starting point is 00:12:16 It reminded me a little bit of processing without the compile time and you can kind of like change things. It was a bit also similar to how Xcode had the playground. Maybe it still does, but you could change things in real time. And I thought this was, this was neat, but I never considered that for music.
Starting point is 00:12:34 So I did some research and then the operators for Orca started to stabilize a little bit. Then I was like, Oh, okay. So what most people need a quick way of writing sequences and, and so on. And the more I worked on it the more i realized that maybe orca was not a bad design for this because so like the
Starting point is 00:12:52 first the first few shows i i ended up watching for of live coding so there was two camps there were people starting from a blank page which i liked but it was very verbose you would you would you end up typing a lot of stuff to get in like to start getting any sounds out and so the first things i would do with sonic pie was to make sort of like libraries of like single characters functions just like like helpers and this kind of stuff and and then when that how that translated into orca was that well orca is already every single every single function is one character already. And instead of moving up and down and scrolling up and down on a text file, you have the two dimensional thing where you can, you know, like one line can affect the line underneath without variable assignment, which I thought was tedious in real time to do in front of
Starting point is 00:13:41 an audience. when you are looking at somebody using orca to perform in a live setting what you will be looking at is a text editor like screen but it is spatial on a 2d grid it's more like dwarf fortress yeah it's like dwarf fortress or atom or any like a classicelike game where it's like a big grid of characters and it's two-dimensional so you go up down left right it's not like lines of of code that are written sort of like you know prose or poetry or something like that it's more like like a map that you are looking down on from above you have your cursor that can move around freely and you can enter a character under the spot where your cursor is. Each letter of the alphabet corresponds to a certain function or a certain operator, as it's called.
Starting point is 00:14:52 Those operators can do things like trigger a bang every n ticks. You could put that next to something that on a bang will emit a certain MIDI note. That MIDI note will go to a different program because Orca on its own makes no sound. It will send a MIDI note to a different program and that other program will have some synthesizer or a sequencer or something that will actually generate the sound. So in Orca what you're doing is you're building these little layouts of letters and numbers. They look a little bit like the shapes you see in a cellular automata, like a game of life simulation. You get shapes that look kind of like that of different letters and numbers
Starting point is 00:15:41 that will generate MIDI notes, or they can also generate other kinds of signals to other programs. So you can use OSC or you can use UDP. People have used that to hook it up to game engines to do graphics for live visuals in their shows and performances. What you are seeing when you are looking at the code running is you are seeing the actual code, which is all the letters to have a function that does some action that affects some other function that does some action that affects some other things and you kind of compose them together spatially and then there's all the data that those those functions or operators are acting on so it could be like this is a sequence of letters so it could be like a b c d e f g a b c for the musical notes
Starting point is 00:16:22 and they're all in a row. And then you can have an operator that takes that list of musical notes and cycles through them one at a time and plays that note on the piano. Or it could cycle through them in a random order. I found that there's not anything like it that really helped explaining it. A lot of the time, people just have to make the trek to finding a video of it. And everyone's like, oh, I see, that's really simple. There's like 26 letters that you can use, and that's it. Yeah. Like it's, it's for children and, and, and, and like it's the documentation is fits in, in a tweet basically. And it's what I find interesting about it is you only need to know
Starting point is 00:17:17 the tiniest little bit about how it works to go and look at the music that people are making, using it in a, in a very different way. Because when I first heard about it and I first was looking at it, I couldn't make heads or tails what was going on. Like it looks very neat. It looks cool. It has a very distinct visual style to it. It looks different than pretty much any other programming environment that I've ever seen. But then after learning the tiniest bit about what's going on, you know, what things are data and what things are code, what things are changing over time and what things are remaining the same. You can suddenly start to see the clusters of letters and numbers, almost like they're little machines in an assembly line or something like that. And each one of them is doing its own little part of the job.
Starting point is 00:18:00 And as you're listening to the music that's being generated you can go oh that part down there is making that sound and that part up there is making that sound and you can kind of follow along with what the code is doing because it's giving you so much information as you are watching it run like it's giving you visual feedback because different things are lighting up and moving the best metaphor at least that I heard about this, was like a cipher reference where someone was like, the first time you look at it, it looks like the screensaver in the Matrix.
Starting point is 00:18:30 But then once you've learned like what Northwest, East and South do and, you know, count clock and track and then all you're seeing is lots of redheads. Yeah, yeah. Well, and let's talk about this. So it was fascinating for me to learn just now that one of the starting points for Orca was that N-E-S-W, North, East, South, West, which are those letters of the alphabet. When you put them down in Orca, they will, every tick or every frame, move one space in that direction.
Starting point is 00:19:00 So North moves up, you know, tick, tick, tick, tick, tick, up the screen. South moves down. Those things are bangs. So when they run into some other operator, they will activate that operator. And it's very neat because you don't see them in all Orca programs, but you do see them used in a whole bunch of different ways. people who use them just scattered all over the place randomly to make glitchy sounds. Or you see people making like waves out of them that travel up and down and up and down and bang different notes, sort of like, you know, if you're running your fingers up and down the notes on a piano. Like it feels like it's trying to, that part of the language to me at least, feels like
Starting point is 00:19:39 it's trying to break out of the constraints of text. Like it feels very much like this could be extended to particles in 3D or something like that very easily and it would come across really well. There's a name for that kind of machine, right? It's something like Ruh-Golberg. It's kind of like a Ruh-Golberg machine where you'll send a little E, it'll bang,
Starting point is 00:19:58 and then it'll push a little marble down, you know, like another incredible machine and then they will keep going. Yeah, exactly. For me personally, in all of the research that I've done and the work that I'm doing, working on programming tools that are sort of a little bit off the beaten path. One of the things that I keep coming back to is that you can make systems that have the charm and whimsy of a Rube Goldberg machine, but that can actually be useful
Starting point is 00:20:25 for doing serious programming work. And I think that's what makes Orca so cool to me. People are using it to make really, really good music in a bunch of different styles. And the code that they're writing to do it has this very charming, playful character to it. And so I think what we're going to do now in the show is kind of dig into the different aspects of that design because that's something that i want to
Starting point is 00:20:51 try and get closer to an understanding of is like how all the pieces of the design came about how they fit together and how they contribute to that sort of overall feeling uh i i don't know when you said like oh i'm curious to drill down more about the design of how things came to be and i just had a flood of images of me fighting on forums and chat rooms to get operators changed and and um yeah i guess uh yeah no just go ahead just ask me and i'll do my best to answer but just know that it's not just all my doing it was like a collaborative effort of a whole bunch of people most of which are way more intelligent than i and some of the operators that are in orca i can't really explain properly
Starting point is 00:21:35 so let's let's do this well and i think that's interesting because the the audience for this show is mostly people who are working on their own projects. And a lot of the people in the community have a tendency to want to sort of retreat into their own private space and chip away at a design for years and years to try and make something perfect. And I think hearing a success story of the person who's implementing the language being collaborative with the people who are using it through the development process, like that's a story that I often hear going wrong. And I think it's good to see an example of where that went right and led to a more interesting result than what would have happened had you just made it on your own. Thank you. so this is a language that uses bangs you have symbols that will emit a bang and a bang is
Starting point is 00:23:02 i know it as terminology from max mP. I know it from Pure Data. Yeah, they're visual languages. They're some of my favorite languages. But this idea of a programming language where it's live executing in a traditional programming language, like a C or something like that, you don't need a construct that represents make something happen now. And in live programming, I think you really do need something that means like make something happen now. And in live programming, I think you really do need something that means like make something happen now. And so I'm wondering, Devine, like at what point did bangs come in?
Starting point is 00:23:32 How did you arrive at things banging other things? Did you ever consider any alternatives other than that approach? Well, no, I think that aspect in it was there right from the beginning. But even before building Orca, my website used a framework that I made called Riven, which looks pretty much like some of the work you're doing. Some kind of flow-based web framework.
Starting point is 00:23:54 Yeah, it's like a nodes and lines kind of visual environment. And that already had bangs as well. It's kind of a concept that I use to think a lot. When there's interaction involved, I find that works really well. Also inspecting flow-based concepts and tools I find really hard without the concept of bang. And without being able to see the bangs happening. Yeah, so Orca had to have something like this. I didn't want to have just compares.
Starting point is 00:24:22 There's three bang operators in Orca and I just can't think how I would do most of the things I'm doing today without this sort of thing I think the bangs, that's where the comparison to Rube Goldberg's really come from, because when you look at a Rube Goldberg machine like it's got marbles traveling around on these tracks and the marbles will
Starting point is 00:24:40 go and physically hit into something and that will cause some action and so whenever I look at a language that has bangs in it, it feels to me like those are the marbles. Those are the things that are pushing the action of the machine forwards, as opposed to like, you know, in the engine of your car, there are no marbles. There's things like directly connected to other things and directly driving them, but you don't get to see the sense of anticipation oh that thing's heading over there and in a moment it's going to cause something to happen um so bangs were there from the start yes yeah and when you did the northeast southwest
Starting point is 00:25:14 operators that travel around those were always bangs yeah that's the first thing i did basically yeah and what were the first things that they were running into? So the first few operators had a whole bunch of special characters. At first, the slash would be a deflect, and the pipe was a mirror. The tilde was a rotation. So I actually didn't really use any letters. It was just special characters. Even in the Northeast, Southwest, I was using greater than, smaller than, caret, and V to make little arrows.
Starting point is 00:25:44 But at one point, I thought all the special characters were getting a bit hard to scale. And I figured 26 would be a really nice limit to the scope of the project. You know, like a lot of people will jump into this sort of like creative programming stuff and there's no scoping involved. It's kind of like open-ended. You don't know how deep you're yeah but if i if i put if i put my foot down now and say well the limit is as many letters that we have and every single extra characters are just io like ways of communicating outside of the software yeah we'll get to that yeah that gives
Starting point is 00:26:21 us like uh something to work with like i absolutely love working with limitation and this was just a beautiful limitation we had to optimize for the fewest amount of things that would allow for the maximum amount of possibilities and that aligned with my idea of easy to learn and hard to master like like so you want to learn i don't know you want to learn haskell well all right here's the haskell book and good luck but with Orca there's 26 things to learn so how much time can you waste just going through the whole alphabet like writing down Q what does Q mean and so on
Starting point is 00:26:53 And they're like pieces of a chess set like there's only so many pieces you only have to learn with each one of them how it moves but then you spend forever and ever and ever learning how to combine them in really powerful ways Yes So you decided on 26 moves, but then you spend forever and ever and ever learning how to combine them in really powerful ways. Yes. So you decided on 26 pretty much right as soon as you moved from having symbols like greater than, less than two letters, you thought, let's go with 26.
Starting point is 00:27:16 Yeah. So like, so suddenly I had, you know, like 20 spaces to fill because I already had like maybe six operators down. So I was like, like okay so what can each do and then that brought the concepts of number like iterating clocks and all these little other operators that became the foundation for what orca was was to become but the whole time there was this sort of like i had to thread carefully between a tool that you can use to make music and like conceptual programming i mean the people who use orca there's like two camps
Starting point is 00:27:44 people who find it like a nice toy to think about programming and explore different programming concepts, and who are all pushing for, oh, we need greater than, all these logic operators. Yeah, more data types. Yeah, exactly, that kind of stuff. And also, on the other hand, people who are not programming or computer savvy so much,
Starting point is 00:28:02 but are really into music, and are pushing for things like, oh, I want more ways of writing atonal music and this kind of stuff. And in the middle, there are people who can kind of see both sides. And I found some really, really interesting people who came up and said like, okay, so I just found this paper that talks about
Starting point is 00:28:21 how we can compress musical notation. And I think there's a few things in there that you can use. And we would kind of look over this at maybe make some change so we can implement some of like we basically implemented some papers in orca and because orca is a way of writing music in a very very dense way i could write like an hour-long piece in just a handful of characters yeah it's extremely generative in that sense yeah for anybody who's not familiar with the history of generative music, there's this sort of breaking point that happened around the 1960s where music went from being something that is either purely improvised and not really notated or something that is strictly written down in
Starting point is 00:28:58 sheet music notation or various other notations that is played quite literally to, I think one of the first pieces was In Sea by Terry Riley, where you had just one page, a letter-sized page of music with something like 53 or so little snippets of melodies. And the players of the piece were instructed to all start at the same point and play that first melody as many times as they wanted, as long as they wanted, and then move to the next one when they felt like it. And so everybody would start and they, some people would move forward and other people would stay behind. And the other constraint was, if you hear people are getting too far ahead of you, you should probably speed up. And if you're getting too far ahead, you should probably slow down. And what this led to is this, this one
Starting point is 00:29:43 piece of written music, this one page, has versions of it that are played with every different combination of instruments you can imagine. Some of them take five minutes or less. Some of them take five hours or more. And it was sort of the beginning of, let's find ways to make music where there's a little bit of control by the author creating some constraints and a little bit of a system. And then the performers have more leeway and more room for interpreting how to execute that piece. And so Orca is also interesting in the history of music because it is a very approachable system for somebody to make that kind of generative music. Prior to Orca, the ways that you could go
Starting point is 00:30:26 about building a generative system are a little bit less accessible. Like there is Max MSP and there are some other musical environments and you can do a little bit of generative music using some of the randomization features in tools like Ableton Live. But it's something where to do generative music on computers has often required people to be quite expert at programming and so i i find orca interesting on in that respect also i think it borrows some of the approachability of video games and makes that available to people who want to make music well beyond the tool itself i think there's something to be said about the state of these tools today like usually in title workshops the state of these tools today.
Starting point is 00:31:10 Usually in title workshops, the third of the time is involved in setting it up. So I was like, well, maybe, I mean, I'm in a strange position where I thought it'd be kind of nice if it worked without dependencies and anyone could just run it in the browser. It took me a while to get there. but now we have a version that's basically like 100 kilobytes. If you can install Chrome, it will work on your computer. And it just uses the web tools like web media, web audio, and just this approach is kind of nice. I mean, it's wasteful in other ways, but I find it's a good introduction for people don't come directly from programming i mean even me i'm a programmer and i had such a hard time setting up extampore that i was like gee like like yeah like that's not accessible for most people i
Starting point is 00:31:57 think and and uh if if the if the first step of your thing is like oh yeah we'll just we'll install haskell and install Emacs and that also limits a whole bunch of people who might be interested in the concepts behind the tool so I was kind of aiming I guess at children you know like I was like
Starting point is 00:32:17 if you can just open the page and put that in front of a kid could they figure it out and I think it wouldn't take that many keystrokes until they figure out which, like, will just move, will start moving, and through the act of playing, they'll find their way without having to read the documentation.
Starting point is 00:32:35 Yeah, and it's an environment that is unlike programming where you have an interpreter or a compiler, and you have to write just the right syntax in just the right way, or else you get a syntax error, or maybe you're using a structured editor and so you don't get syntax errors but you still have to know the right way of combining all of the pieces of the language to get a result to show up orca is much more approachable in a playful way if you know only four or five characters you can put them down on the screen in a bunch of
Starting point is 00:33:07 different combinations and they'll already be things moving around and things are changing and if you have something like the other companion app you made pilot which is a very simple app you download it you open it and it's just a bunch of synthesizer banks ready to go so that orca can send messages to it and you can immediately start hearing the result. You don't have to do any configuration or anything like that. It's very easy to go from having never used it before and having never done programming at all to having written legitimate code. Like this is actual computer code in a programming environment that is generating music in a way that you understand and can start playing with and start building your way towards
Starting point is 00:33:47 complexity piece by piece i'm not 100 sure but i think it's i don't think you can crash orca oh that sounds like a challenge all right so uh listeners uh go ahead and play with orca regardless um but while you're doing it and send send me the crash reports. Yeah, yeah. But one example is you can go on any website, just copy-paste the whole frigging text content and paste it in Orca and something will happen. Well, have you seen anybody hook up Orca to a Game of Life simulation or hook it up to a roguelike game or something like that?
Starting point is 00:34:24 Well, Orca doesn't work like game of life so game of life is what it does it just it just looks at the whole grid counts the number of neighbors and just assign a value to this that cell so it'll look at like one cell and look at like okay so four sides that means we and we have three neighbors that cell is worth three and and once this is done then it kind of like does the operation of going of moving up to the next frame orca doesn't work like that at all orca wouldn't work as a game of life ecosystem because it starts from the top left and goes to the bottom right and it just uh runs that cell and then moves on to the next and in theory it is not allowed to to look ahead yeah but that's what makes orca
Starting point is 00:35:05 super cool or that's yet another thing that makes orca very cool is that you have put in special commands that can read in input and write it into the into the code grid or send out things that are in the code grid elsewhere so what i'm imagining is like you could make a little space in your orca grid that is for you know it's just a bunch of sequences of characters that are used for melodies or rhythms or something like that and then take that chunk of the grid and send it to another program that's running a game of life sim and so the game of life sim is what is generating your musical patterns. Oh, I see. And then Orca is using those patterns to trigger the MIDI events.
Starting point is 00:35:49 And then you have a synthesizer that's doing something with those. And I think most of your tools work this way, where the tools have a very, very narrow range of responsibilities, like that sort of Unix philosophy of do one job and do it really well. Yeah. And that forced you to have really really good ways of communicating in each program with the outside world oh yeah the io is super important for orca because it really doesn't do much on its own it's just a way of automating things but one one person did fed its webcam feed into orca as letters like you know like you can convert an image to some ascii thing and that was kind of neat i mean mean, if you have enough Colin characters,
Starting point is 00:36:26 you'll end up with sounds and things. And that was noisy and interesting. © BF-WATCH TV 2021 I know our audience is really interested in how to implement programming environments. And so I think to a certain extent, it's interesting to look at how did you go from zero to Orca? Because a lot of them are on their own journey of going from zero to a system of their own oh that's that's that's a super good question actually all right so orca had like like i said before he had to be very accessible so i made the mistake i guess of tagging the repo as programming language because i thought you know orca is kind of like a programming language in the same way that brain fuck is a programming
Starting point is 00:37:44 language you know like it's it, oh, it's a lang, but then that attracts a certain kind of people. And if you said, oh yeah, I implemented it in JavaScript, these people would not have it. No matter how interesting your language or your project might be, if it runs inside Electron, it's garbage. And I had my share of this. But I was super fortunate to know someone who could help me with this.
Starting point is 00:38:12 So a friend of mine in Japan, it was like, well, we could make a super, super simple curse version that runs in just Vanilla C, and that would shut these people up. And we did. And it was actually kind of nice, because that opened up orca to be available on super low power devices which now i like the c version of orca i
Starting point is 00:38:31 kind of i use every single day basically right now um because you can run orca on raspberry pi to trigger and a hardware synth with a super simple setup written in a way that satisfies the need of these people who are very interested in the design of programming languages and and see orca as a programming playground more than a tool to write music since it's a very general programming thing there are no specific tools in orca that is designed just to make music so of course i mean a lot of people don't even see it as a music writing tool at all like that's probably how you've seen it because on twitter that's that's what's most uh viral i guess but a lot of people just use it to animate some sprites and games or whatever so it's it has
Starting point is 00:39:17 a sort of like general aspect that that reaches out to different kind of people and having this the c version really shielded me from this sort of criticism which I liked and what came out of this is that somebody imported that in Lua and a lot of musicians use Lua. It's kind of similar to Ruby in a way and the implementation of Orca is so simple. I'm pretty sure you could make a Orca client in less than 500 lines of code now but the Lua port opened up a whole new crowd of people, made it available to a whole new crowd of people. It runs on the MonoNorms, which is a little sound computer. And I really like that since the scope is very small,
Starting point is 00:39:56 it's really easy to port into other languages. And that also addresses specific needs of these people much better. If I had only the Electron version or just the Lua version or just the C version, the C version, setting it up is complicated. None of the musician people would be able to use it. The JavaScript version, it runs in a browser and most of the people who see Orca
Starting point is 00:40:16 as a programming playground don't run JavaScript in their browser. And a lot of musicians don't like to be facing a computer when they're writing music. So for them, the Lua running on their arms is the perfect thing. So just being able to move across these different platforms easily because the scope of the thing is so small was a totally game changer for the project. And that's something that I know a lot of people in our community are wrestling with
Starting point is 00:40:40 is the question of what environment to implement their prototypes in. And so that's a really strong testimony in favor of keeping your core ideas simple enough that you can do multiple implementations. so so uh going back to that idea of the tools being small and and doing specific things orca not making sound on its own i listened to an interview with miller puckett creator of maximus p and pure data and he said that when he first started making max the thing that he was most excited about was the scheduler inside the engine that he wrote and thinking of this program that he had made which is ostensibly a tool for music thinking about it in terms of just a way of organizing time and a way of getting the computer
Starting point is 00:41:55 to create a notion of time that was useful for live programming in you talked a little bit about the execution model for orca when you building it, how much were you thinking about the way that it handles time as opposed to just getting something that works so that you could be making music with it? I feel bad of saying not at all. Orca could be way more optimized than it is. It could be way more clever with time as well, but it's not. It basically waits for the frame to be finished to be rendered
Starting point is 00:42:26 to do the next one after a specific amount of time but it doesn't know how long it took to render that frames and it doesn't compensate even though it will wait exactly the same amount of time every time no matter how long it took to render the previous frame which will definitely throw the time you know right out of the window. But I decided to keep it. I decided to keep it like this because it's really hard to break of the sort of like the super precise time signature of electronic music. And I was just, I mean, the C version, you can run it at 90,000 frames per second, and it will run fine. It's really imperceptible.
Starting point is 00:43:08 But for the JavaScript version, maybe you lose 6 milliseconds, 9 milliseconds every frame. And I was okay with this. That's on par with the amount of drift that a human musician will have. It's on the order of plus or minus 10 milliseconds, generally. And because Orca's not generating sound, it's just generating instructions the order of plus or minus 10 milliseconds generally and because orca is not generating sound it's just generating instructions that get sent to another program and that other program generates the sound i don't know that i would have noticed that it had that time drift
Starting point is 00:43:36 even though i'm a musician i'm used to listening to music in a very critical way that's interesting to learn you know i'm not hearing pops and glitches and that sort of thing that you normally hear when an audio program is struggling to keep up. Yeah, I know this, like you said, the synth might do these kind of pops and things, but Orca will just send events. So you won't notice. And so I guess what that means is another angle of approach
Starting point is 00:43:58 to making glitchy music with Orca, which is really fun, would be to like run it in Chrome using the developer tools that say, only give this tab 1 20th of the available CPU, something like that. Well, inversely, a friend of mine, she used Orca to do DSP, basically.
Starting point is 00:44:19 And the way she did it is sending UDP packets directly to the sound card at 44,000 frames per second. Oh, from the C version? Yeah. It's like it does signal, you can basically send bytes of sound to the sound card and you'll get sound out and you can modulate this in your Orca program. That's very interesting. And were they live programming it or did they sort of prepare? Oh, okay. Since you had decided upfront to have 26 operators, so you knew there was an upper limit
Starting point is 00:44:53 on how much room you had in the design of the language. And another thing that you had said elsewhere was, or at least you alluded to this, that I think backwards compatibility was really important like it seems like you you no it wasn't no did i say that well here's the sense that i got is you had said somewhere that once the 26 operators were decided that they were pretty much finished and that you weren't thinking that you would ever change those? Oh, no, I meant more like that's the limit of what is available, but it's still subject to change.
Starting point is 00:45:30 And whenever I say we're never going to change the scope again, you know, two weeks later. Right. Okay. That's interesting because I read that totally the opposite way. Like I looked at that statement as like, wow, you know, you're making a commitment to making sure that people's Orca programs from you know a year ago will still run in the current thing and i was going to kind of ask like how does that square with some of the things that i've seen changed like it looks like to me at one point you moved from having operators all have their arguments on
Starting point is 00:45:59 one side to having their arguments kind of on either side is that something you did yeah that's a massive breaking change and broke it for everyone. It broke it for me. I had like hundreds of hours of patches that just suddenly stopped working. That's another thing that I think is going to be interesting to our audience. Like, how did that go?
Starting point is 00:46:15 How did you decide that it was worth it to make a change that broke all of the existing code that everybody was using? How did you get people over that hump? And why did you get people over that hump? And why did you make that change? Well, I can't assume. I'm learning about all of this.
Starting point is 00:46:35 I'm a bad programmer, and I'm still learning about this. I still discover things from the 80s that just blows my mind, and suddenly I want to implement them in Oracle. When I started, it was like a little game that you could send the banks around and it was, I didn't really understand the ramification of like changing one operator for the other. And I didn't care so much. And nowadays there's so much people using it. So I have to be more mindful and respectful of the work that people have put in. And there's no reason to do any change unless somebody comes up to me with something that is just blows me away. Then I'm
Starting point is 00:47:03 just like once in a while, somebody will show up and be like, oh my God, I tried to do something with Orca, I couldn't, but instead I implemented this. I mean, the code is so simple to change that usually what happens is people will make the change and then they'll show me. It's like, oh, I've modified your X operator and then suddenly it does this, and look at what I can do.
Starting point is 00:47:22 And once in a while, I am just floored. Like, wow, how was that not in orca and this happened a lot in the beginning and less so now and i know that whenever this happens it just pisses most people off but i mean and i'm okay with that i mean i have to deal with you know the community and then and but usually what i do is not just sort of like change it and don't tell anyone i use the forum and the chat room to communicate with the users and we usually like talk it over usually some people will see some edge cases that I didn't see
Starting point is 00:47:53 and also since now there's three versions in three different languages everyone has to be on board because they're gonna have to implement them and usually I don't touch the C version so much because I'm not as knowledgeable with C I mean I was gonna say I was good at JavaScript but I'm not I'm just kind of like moving the pieces around but usually people make better implementations of the things than me so but yeah like everyone has to be on board basically and some people will have some angles that I couldn't see usually that's what that's what happening I'm like I get super excited about one thing and then I'm like oh my god we're
Starting point is 00:48:21 moving toward this and somebody was like oh but you can already replicate this behavior with this and that operator but usually for the past few changes that we did they were super justified and the operators that are now in place i would miss them if they were not in and we also replaced some operators that that were not used so much you know like i look at all the videos that people share on twitter and it's always the same you know eight operators people use you know tc du nord east southwest x and o and that's it like the other ones they're kind of like more esoteric and more kind of weird and harder to use and not as straightforward and have weird names and so on so these ones i feel more comfortable changing them recently we changed three behaviors that are pretty core like the f which is the if which is you know like that one we basically
Starting point is 00:49:04 reverted to how it was in the beginning but somebody convinced me to change it and then after using it for like six months we realized that it was much better before so we changed it back um the l which was kind of a placeholder we never really knew who knew what to do with that one so we just you know tried something and it was kind of breaking patterns in Orca. So now it's just less than, which is actually really useful, like to do more computer playground type things. And the other one was B. Now it doesn't, like the behavior of B changed a little bit. It's more like, like on itself, it won't count,
Starting point is 00:49:40 but it will take a counter input and output like a bounce. So the behavior changed enough that it's kind of like a different thing now. But the idea is that you can bounce outside of being on the clock. Now you can take an iterate operator and feed its output into the bounce thing, and you will get a bounce outside of the clock. And you can do all sorts of things like this, which is much more useful. The transcript for this episode of The Future of Coding is sponsored by REPLIT. They are an online REPL for over 30 languages.
Starting point is 00:50:25 Actually, it was 30 the last time I checked, but let me see how many it is now. 1, 2, 3, 4, 5, 6, 7, 8, 9, 50 languages. It started out as a code playground, but it's now scaled up to a full development environment where you can do everything from deploying web servers to training ML models, all driven by the REPL. They're a small startup in San Francisco, but they reach millions of programmers, students, and teachers. They're looking for hackers interested in the future of coding and making software tools more enjoyable and accessible. Email jobs at repl.it if you are interested in learning more. blocked REPLIT because kids were using it to create games in the browser, which is, as far as I'm concerned, about the highest endorsement that you can make of a programming tool, that it was blocked for creative use and kids were having too much fun using it. Thanks again to REPLIT for
Starting point is 00:51:39 sponsoring the transcript. Some of the operators act when they receive a bang and some of them act automatically on every tick or on a certain interval. How do you decide which things should serve as like a clock source? Okay. Okay. So for the longest time we had one operator that was simply was just bang at X frame, so the operator. And then someone showed up in the forum and saying like, oh, have you seen the modular synth module? I think it's called Euclidean Rings. I was like, no, I've never seen this.
Starting point is 00:52:18 And so I looked, and it was based on a paper that encodes binary rhythm using a very simple formula that had two inputs and then an output. And that was just the best operator to have in Orca. And it allows for all sorts of really interesting repeated sequences that you can use for snares and all these kind of things. And I didn't come up with it. I didn't do the implementation,
Starting point is 00:52:36 but I use it every single day. And that led to the Euclid operator, U? Exactly, yeah. Yeah, I was going to ask about that one because that's one that i i haven't played with it yet and so i looking at it in the list of operators it seems awfully specific whereas everything else seems very sort of very simple very similar to what you'd see in other programming languages this one seems different than what i've seen elsewhere that's cool to learn that that's
Starting point is 00:53:02 how that came about at first we were like okay let's try to implement it in Orca using the Orca operators. Usually that's what we do. It's like, oh, let's try to do a multiply with Orca operators and so on. But that one was just a monster. It was so big and there was no way that I would just, you know, like during a live set, try to rebuild this whole thing. Because there's no way to make like functions in Orca. There's no way to say like, here's a sub module, it's hidden, it's running some complexity internally, you can open it up and edit it if you need to, but otherwise it's abstracted away. There's none of that.
Starting point is 00:53:34 No, you cannot define anything except variables. And variables will just store a value. You can't store a complex structure in a variable. No. That's interesting that that's the criteria because that puts a lot of pressure on you to make really good use out of these 26 slots that you've got. Yeah, but there's no, I mean, if you look at,
Starting point is 00:53:55 you know, like you go on GitHub and find these pages that explains every single programming patterns that are out there. There's not that many. And a lot of them are just combinations of two or three others. Right now, when I look at the Orca specs, it covers most of these sites that just list all the patterns and programming.
Starting point is 00:54:12 I mean, there's a few things that we omit by design that don't apply to the things that we want to solve with Orca. But in general, you know, like when you get the basic logic gates and that kind of stuff, you basically have something that is close to Turing complete
Starting point is 00:54:23 and gives you enough space for iterating. After that, it's just a matter of UX. We had to make it so there are some cases where obviously a third input port on an operator would open a whole bunch of new avenues and possibilities, but it's also another port. Takes up space in the grid. Yeah, in Orca, your most valued thing is the estate. You really want to save up on all this space because it operates on a 2D grid.
Starting point is 00:54:50 Yeah, there's a real benefit to keeping the operators spatially compact. Yes. So you mentioned earlier that there are some people on the musician side of the community who want to expand Orca to do things with, you know, microtonal music. The side that I immediately fell onto was wanting to have more control over like micro rhythms and sort of more flexibility in terms of rhythmic composition and get off the irrational divisions
Starting point is 00:55:18 that are available. How do you respond to the people who want that? I think this is going to be interesting to our programming community because these are the people who want that i think this is going to be interesting to our programming community because these are the people who are on the domain side of the problem rather than on the programmer side of the problem and so i'm curious how you sort of balance their needs against keeping the model of orca that you have simple and pure the way it is right now. Well, so that kind of feature I get a lot requested. But so maybe it's, okay, so it's like the OSC people, you know, it's maybe 1% of the people who will use Orca want, you know, this specific thing.
Starting point is 00:55:57 So I've implemented something that would kind of serve that. I mean, usually, I mean, it's always good requests. I mean, like, it's like, like oh i would really like to be able to just use a micro micro or add swing to orca or something yeah yeah and i was like well i would use it yeah sure okay so i started to look into it and and instead of changing the specs of orca i'm changing the client because the client keeps the track of time right so i didn't feel like there should be an operator that messes with this so on the client keeps the track of time. So I didn't feel like there should be an operator that messes with this. So on the client side,
Starting point is 00:56:29 I can do all sorts of crazy changes that basically, it obviously locks people into that platform, but it's not so problematic. I can just add a client function that will do like add some swing or change the BPM or... And when you say client, just to be clear,
Starting point is 00:56:43 you're talking about the GUI that is running the orca engine inside it and not say like a companion app like pilot or something like that that's actually doing the synthesis yeah yeah and so like the the c version has some specificities to it right or the lua version yeah yeah exactly in addition to the 26 basic operators and things like comment and some of the io operators like colon and the percent Yeah, exactly. for adding things to the language. So how do you decide what commands to add and when to add a command? Because I imagine it could be very easy to just go overboard on that and add tons and tons and tons of commands,
Starting point is 00:57:35 but you've also done a pretty good job of keeping that tight. Like it's like play, stop, evaluate one frame, set the beats per minute. It's like configuring what the orca engine internally is going to be doing yeah there's there's not that many things the inject command it's just one command but it's the ramification of that command are huge are huge yeah like i was like well if i can you know spend 15 minutes on this one command and then it just opens the gates for like well actually when i do shows i can't imagine not using this and for listeners that's
Starting point is 00:58:11 a command that lets you take another orca file on your hard drive and load that into your current running orca environment so it's a it's a way of getting a little bit like a like a sub patcher or a function or a subroutine sort of like behavior. Yeah, exactly. So there's not that many things that people requested that cannot be done with what is in place now. I mean, I'm always open. But usually, you know, like 90% of the time,
Starting point is 00:58:35 somebody will come up and say, oh, I really wish you could do this. And I'm like, well, you can. You can combine this one and this other operator. And then they're like, ah. I didn't see it this way. I didn't understand the behavior of that one. And that's why I'm so active in the forums.
Starting point is 00:58:49 And I absolutely love this. I mean, imagine waking up every single day to questions about how to do something in the language you invented. It was my dream. I'm super happy that, and often I have no idea. Somebody will ask me how to do something and I'm like, well, let me think about this.
Starting point is 00:59:06 I'm not sure I've done something like this before, so I'll spend the whole day doing design, but design that is on top of what's already there. I won't change a language to answer a question. I'll just try to figure out how to do it with the language that I've made. And a lot of people think I'm the best person using Orca, and I'm not.
Starting point is 00:59:23 There's a whole bunch of people that I know that are way better at solving Orca problems than me usually I'll just ask them how to do this or that or I don't remember how to do greater than, I always forget the silliest things the little patterns that you can make I have a file on my computer of all the patterns
Starting point is 00:59:40 that people have given me that I can use and also reuse and some things are less obvious. A lot of people coming from programming, they're used to doing, you know, like paper computers or like thinking with like adding binary numbers. And that is a skill that is really useful in Orca. Orca is based already six, but there's a lot of math stuff that just goes over my head.
Starting point is 01:00:01 But then I'm like, Oh, how do you do again? Multiplying with addition. And it's always like, Oh, how do you do it again? Multiplying with addition. And so I was like, oh, you have to make this and that. And oh, yeah, obviously. It's really not straightforward for me. Yeah, in case anybody missed that, yeah. Orca uses a number system that is base 36. And I'll leave that as an exercise to the listener
Starting point is 01:00:16 to figure out why that is. But it's, I think, another pretty neat part of the design. Thank you. so while you say that you are not the best orca programmer and you're not designing this language you're not like the benevolent dictator sort of person saying you know here is pearl six um accept it as it was made over the last 15 years you're not doing that kind of process um what have you done that has allowed or like what things do you think you've done that have that have really allowed the community to flourish in the way that it has well i know for a fact that i'm really not good at this. So I just kind of like, I trust everyone.
Starting point is 01:01:29 Well, I mean, I'm very easy to convince. I don't really hold so strongly on some ideas or some preconception of things. You know, like if at any point I'm like, well, the Orca design is absolutely perfect. You know, like there's no way this could be any better. Then, of course, it would be harder for anyone to show up and be like, oh, well, I really wish I could do this, which I can't. But now I'm just kind of like, I let myself convince if someone is interested in Orca enough.
Starting point is 01:01:53 And I mean, I'm super humbled by the fact that people spend time playing with this at all. Like I made this for myself, but whenever I see people doing workshops and shows and things like this with the tool, I'm just like, wow, there must be other people like me out there because usually i just feel like nobody makes stuff for me like everything is made for some other fictional human being that i am not because i can't relate or use any of the things
Starting point is 01:02:16 that are found in the mainstream so i'm glad to see that there's some other people who appreciate this kind of lean designs and do you think like to what extent does the other work that you're doing as part of hundred rabbits play into the community around the tools that you're building because you've got quite a following through that and it's sort of neat to see how each new thing that you make whether it's like your inktober series that led to the creation of some new art tools or whether it's pilot that came about so that you could have a plug and play ready to go synthesizer for orca like they all sort of build off of one another and so do you see that a lot of people coming to orca from the community of
Starting point is 01:02:56 people who were already following your hundred rabbits work or is it something that that community came from elsewhere well in the case of orca it totally came from elsewhere? Well, in the case of Orca, it totally came from elsewhere. So I think what happened is someone, actually like most of the Orca community comes from the Monom forum. Do you know what Monom is? Yeah, and for the listener, Monom is a company that makes a bunch of boutique hardware
Starting point is 01:03:22 for musicians. Each of their different pieces of hardware have a very sort of pure visual and material aesthetic. They're very simple. They're very elegant. They all sort of connect to modular synthesizers, which if you've ever seen, you know, a big synthesizer that, you know, like Tangerine Dream or there's somebody from the 70s, like with all the cables running here and there and everywhere, that sort of synthesis is still going today. It's still very popular. And so they make a lot of pieces that you can connect into one of those big synthesizer rigs. Some of
Starting point is 01:03:55 their tools are just like, this is a keyboard that has a bunch of unlabeled buttons on it, and you can configure what you want those buttons to do. Or they have a module that is called the Norns that is just a little box that will run some computer code that you feed it. But it's a very simple, minimal computer. It doesn't do very much because a lot of people who are doing modular synthesis, they don't want to use a computer. They want to get away from the computer and go strictly with traditional electronics. And so the Norns is a way of introducing the tiniest little bit of the power of computation and the dynamic nature that that brings back into this process without having a laptop and a screen and an operating system and a Slack client and notifications and all that
Starting point is 01:04:43 kind of stuff being a part of your live performance. So that community is a very neat place sort of at the boundary between people making music with computers and people making music without computers. Yeah, it's not so hard to see that, you know, like how the Unix philosophy translates into music is via modular synthesizers, because every single module targets one task and just does that. And it talks really well with the same protocol to all its other machines. And in fact, people familiar with patcher languages like Max MSP, those are inspired by modular synthesis. In modular synthesis, you have each of these modules
Starting point is 01:05:20 is like a node and the wires between them are physical wires. You're plugging in patch cables from one to the other. Not to get off on a tangent, but I think a lot of the limitations in the node and wire visual programming languages we have come from their faithful adherence to the way that modular synthesis works. You see that influence all the way through to today, and I think that a lot of programmers who have never seen modular synthesis have a bit of a blind spot to the fact that a lot of the design decisions underneath came from that world and the limitations of that world. And so they're sort of cargo culted
Starting point is 01:05:55 into every new like origami and Node-RED, all of those programs just carry on with these designs without really thinking, oh yeah, the only reason we're doing it that way is because once upon a time, people were making electronic synthesizers connected with physical wires meant for performance on stage or in a recording studio. Thank you. Imagine my position where I was working on Orca, and then someone was like, there's a thread on Orca on that forum, and then suddenly I could access this crowd of people
Starting point is 01:07:29 that I felt so much at home there. I was like, oh my God, this is a sort of like, it wasn't in my, I don't know how you say that, peripheral version. I could not see this demographic at all, and once I discovered this, I was like, wow, this is at all and i just once i discovered this i was like wow this is where a place where i feel really at home it's the intercept inter connection of programming and music and people are aware of how their tools are working and it's a big open
Starting point is 01:07:57 source mentality there like monom builds lean beautifully, open source hardware. And as 100 Abbots, our studio, was trying to address this via software, I was like, well, okay, so this is going to be my home now. And this is basically where I spend my days. Nowadays, it's just looking at what people are building with Orca, with the Norns, or whatever they share on the forum. But also now it's like a big source of inspiration,
Starting point is 01:08:23 which I kind of wish I had stumbled upon way way before yeah me too because their community is it's one of those little corners of the internet they have exactly found their in-group they all have that overlapping passion and they there's just a lot of energy there that feels really really good so that's where you feel like most of the orca community came from was out of the monom community yeah i think it was the time was perfect but also just if you look at orca closely enough it looks like kind of like it's a bit lispy it's a bit like an old like a flow-based language i think people come from the modular sense scene they look at this and they're like yeah okay i see i get i get it i think that's what drew me into it is you can look at Orca and see echoes of so many other
Starting point is 01:09:09 interesting styles of programming that we've had in the past. And the fact that they're brought together in service of making music, for me, that's just an added pleasure because I enjoy music and making music. But I think you don't even need that to appreciate the little details
Starting point is 01:09:24 that it's borrowed from everywhere else, synthesized into a new kind of thing. When I play with Orca, and when I look at the code that other people write in Orca, I sometimes feel like it's kind of fragile. I think that the premium that you place on the real estate, the amount of space that you have to build things, that makes it feel a little bit like if I type the wrong thing in the wrong spot, it sort of causes like this cascading failure or things can kind of go haywire. I haven't had that happen too badly, but it always feels like it could happen. Is that something that you also feel
Starting point is 01:10:05 is that something that people feel when they're new but in practice it's never a problem have you ever seen somebody you know accidentally send their whole orca patch way off the rails um well i i certainly have uh there's not that many fail safesafes to stop this. I mean, you can undo. And the way undo works kind of keeps the time. I mean, I messed up in front of an audience and nobody noticed. But sometimes there are very destructive things that you can do. You can accidentally paste over things
Starting point is 01:10:39 that you didn't want to erase. Usually I assign a lot of the variables up top and this is like a no-go. I have to be very careful not to go there and change things, because it'll just break everything. And once in a while I do, but I can always undo. I made one kind of, I guess I call it a sort of helper, or a way of minimizing mistakes is usually when I do shows,
Starting point is 01:11:02 I use the monophonic operator, unless I really need to do long release notes. And little things like this that makes it harder to fail are useful, but nothing stops you from accidentally sending the letter Z on the fourth octave and you get the highest pitch. Yeah, yeah, yeah. Yeah, high piercing noise and and just for the listeners the monophonic operator the way um midi and synthesizers work is that normally at least
Starting point is 01:11:32 these days now that we have nice technology when you're playing a melody if you push two notes at the same time they will both play if you push one note and then let it go and that note has a bit of decay on it it will gradually fade out and then if you push another note and then let it go and that note has a bit of decay on it it will gradually fade out and then if you push another note it will play all of the notes are independent but when you run a synthesizer that is monophonic each new note will stop the previous note from playing and so when devine says he would use the monophonic operator as a safety net the reason that that works is if something screws up, he doesn't accidentally send like a thousand MIDI notes all at the same time out to his synthesizer, which would be,
Starting point is 01:12:15 you know, cacophonous. It would just send the very last MIDI note because that last one would stop the one before it, which stops the one before it. Yeah, exactly. It's a safer way of doing this. And I just want to stop you there because you said, because now we have a good technology. Well, I think monophonic sense can be by design made today and all my sense are monophonic and it's something that I actually look for. I guess what I mean is like once upon a time all synths had to be monophonic because there was only one oscillator you could only make that oscillator vibrate at a certain single frequency and so the way we got from only being monophonic to being polyphonic is by adding more and more individual oscillator pieces in hardware and so for a while if you
Starting point is 01:13:04 got a fancy synthesizer, it would let you play like eight notes, up to eight notes, because it had eight physical oscillators in it. And then when things went computerized, then it was like, okay, now we can do the THX deep note and have, you know, 5,000 oscillators all running in parallel because they're virtual. And so that's what I meant by better technology. But I agree with you that monophonic synths are almost a different category of thing unto themselves, and they're virtual. And so that's what I meant by better technology. But I agree with you that monophonic synths are almost a different category of thing under themselves and they're useful and beautiful in their own way. Do you think really it's because they added more oscillator?
Starting point is 01:13:35 Like it's not something I know about that much. Yeah, like back in the 60s and 70s when they were first making synthesizers and even before that, like the Theremin originally only had one oscillator in it you know an oscillator is a is a fairly complex component as far as i understand it you have to tune them individually and so if you had multiple oscillators for a while there you know you could tune them to be in the same center of what note they would play. So they're all tuned to like, when you press A, it's going to be 440 hertz.
Starting point is 01:14:09 But if you took that synthesizer outside and put it in your car and then drove to a show that you were going to play and you took it out of your car and brought it in, the temperature change would have thrown all of your oscillators out of tune. What? Yeah. If you listen to recordings of old synth music like a lot of times you know they would have to retune their oscillators throughout the show because the heat generated by playing the synthesizers would throw the oscillators out of whack that's amazing yeah so there was a while
Starting point is 01:14:35 there where it was a very physical limitation and so mono was just simpler you didn't have to worry about you know your oscillators going out of tune with respect to one another. When you did want to tune, you know, it was easier to do and it didn't cost as much. That was one thing where music going computerized, that was an early selling point, even though the quality of synthesis was much poorer, the ability to have as many oscillators as you wanted, because you would pre-compute all of the audio. You would set up your sound system and say render, and then it would render your audio out using code. It let you effectively have as many oscillators as you wanted. So that's part of how music went from being done on physical electronic synthesizers to computer synthesis. Thank you. Thank you. so What are the sort of weird things that people have done with Orca
Starting point is 01:17:28 that defy the purpose that you built it for? There was one girl in France who was using Orca in her class, and she was in robotics. And I guess it was like a sort of like esoteric programming robotic class or something, but they were all using different kind of... Like someone else was using Sonic Pi for robotics somehow. I don't know.
Starting point is 01:17:49 But anyway, I ended up in a position where I was answering questions on how to move a robotic arm via UDP in Orca. And Orca doesn't have that many granularity in its... I mean, it doesn't have any sense of floats. Like there's 36 numbers. And so that gives you at most, you know, 10 degrees rotation angles. But that was a nice limitation that this person wanted to play with. So we went along, I mean, I played along and that was kind of a weird reason to use Orca.
Starting point is 01:18:19 And I remember at the time we didn't have the multiply operator, which made things kind of a bit harder. But what are are weird things? Well, one of my favorite Orca artists is Orca to Control Title, which I think is amazing. Because sequencing in title, I find is a bit hard. Well, no, sequencing in title is fine. Building tracks, entire tracks, and mixing and navigating this music I find in Tidal doesn't come naturally to me and I have a hard time getting a sense of what
Starting point is 01:18:48 is happening when I'm writing Tidal code but Tidal is really really good at synthesis, you can make really interesting granular synth stuff and glitch and things and it has a whole bunch of interesting effects you can use and I found that the combination of sequencing in Orca and synthesis in Tidal is a really good match
Starting point is 01:19:04 so that's been one thing, it's not super weird but it's super interesting and i see uh in the read me that there's um information about hooking orca up to unity um what have you seen people doing with that integration yeah so a friend of mine uses it to animate a character it's a nice way of automating of doing automation in general so you can imagine you know the game QWOP uh yeah QWOP could you imagine playing QWOP with orca oh wow so for the listener QWOP is a game where you have character kind of like a stick figure your goal is to like run a hundred meter sprint and you control it using the letters on the keyboard, QW with the left hand and OP with the right hand. When you push one of the letters down, it sort of like
Starting point is 01:19:50 bends a joint on your body. And when you let it go, it unbends the joint. And so you have to use the letters, like you, you type them in a, in a very careful rhythm to make your character run. And it was one of the first games that sort of led to the movement in games of sort of games where they are very hard to control. So there's like surgery simulator where you're a surgeon, but it's very hard to control the surgery. And so you end up, you know,
Starting point is 01:20:15 accidentally dropping all sorts of scalpels and that sort of thing into the patient. There's a game called Octodad where you play as an octopus who has to do a bunch of parenting activities. There's a game called I Am Bread where you play as a piece of bread and your goal is to get into the toaster and you have to kind of climb across the level. So there's this whole genre of games where the fun comes from, you know, you know what you need to do and what you want to do
Starting point is 01:20:40 and getting the game to do it is very hard. And so imagining somebody using Orca to try and drive one of those games, that to me is a very charming, entertaining idea. Yeah, so that was super interesting to watch. Yeah, and did it work? No. Well, I mean, does it matter? Yeah, no, no.
Starting point is 01:21:02 I mean, I'm sure... I can't even play Quote. I mean, I'm terrible at Quote. Yeah, no, no. I mean, you know, I'm sure... I can't even play quotes. I mean, I'm terrible at quotes. Yeah, nobody can. So, I mean, who cares? It's just plain interesting and entertaining. Well, it feels like the sort of thing that, in theory, if you could do it just right, it would work.
Starting point is 01:21:18 Because it's a game of, you know, getting the right rhythm. I know, right? It's like fine-tuning the release is what it's about but it's can you even get there or yeah yeah that's that's one of the things i'm going to be most excited to see in the future is what other curious uses of orca people come up with because it's it's a tool that is so like it's interesting to look at and it's interesting to write in and it feels very fresh and different and so i think that inspires people to go you know oh what can i use this for like that's that's immediately where my mind went after seeing it was like i want to hook it up to game of life somehow or i want to hook it up to other of Life somehow, or I want to hook it up to
Starting point is 01:22:25 other kinds of things, like a roguelike, like a game that uses the character grid in the same way, but to a very different end. And so I'm very stoked to see what other people come up with for that. Do you remember when Jack was on the podcast and he was saying like oh i'm not sure if it's pronounced orca or oracle yeah yeah yeah i just remember that because of the the lambda as the a yeah yeah well if you do if you do make something uh weird with orcas send it over and use the hashtag oracle that kind of ties into my second last question here which is what tools do you want to make that you haven't started making yet or that you've started working on, but haven't finished? What's, what's sort of the next itch that you feel like you need to scratch? In the perfect world, there would be no more tools for me to make because I just make them because I can't find them or I can't use them. And right
Starting point is 01:23:22 now I'm, I'm somewhat content with how I'm doing computers. So I don't feel like I have to build everything. Have you done a video tool? Because you make a lot of video work. Yeah, actually, I use KDN Live. It's excellent. I am always the first one to complain about how open source programming looks like like shit but kdn live looks a little bit terrible but it works really really well so i'm super satisfied with this even like um actually we had to edit the video and i mean all we ever knew was i movie you know yeah that's the tone i voice i have in my head when I think back
Starting point is 01:24:05 but we had to migrate our whole workflow and we tried to edit a blender and that was not so terrible there's always a way and sometimes it really helps
Starting point is 01:24:21 to be in a position where everything stops working I really helps to be in a position where everything stops working. I really had to install Linux on bare metal to be exposed to the new challenges that I would be facing these past few months. If you run Linux on a VM, you can always be like, well, I'm just going to use the Windows version because I'm running it on Windows or something. But being in that position, I freaking love it when things are kind of hard. But video is one thing that was daunting. I was like, oh my God, what am I getting myself into?
Starting point is 01:24:52 I'm really not in a position where I can do web-based JavaScript video editing. And I didn't want to edit all the future videos with FFmpeg in the console. But no, Candy and Alive worked really well. Blender is an amazing 3D... Actually, getting away from OS X forced me into Blender 2.8, which is by now my favorite 3D modeling software by far. Blender's amazing. Yes, and I guess the convenience and the comfort
Starting point is 01:25:19 that I thought I had was kind of illusory. Now I can see that actually I was just being sheltered from the things that I really was looking for. Like recently I was having drinks and thinking about this sort of idea before. And you know, when you go from, I guess, omnivore to vegetarian or vegan, you think you lose something. You're like all the things that I was eating, I'm going to lose. But no, like you can be sure that you're gonna discover like way more ingredients than the one that you're gonna stop eating when you have to make up for things with the convenience of having most of your nutrients from red meat or something to do meal planning
Starting point is 01:25:55 and learn about how nutrition works a little bit better then you discover all these ingredients that were completely out of your your vision before and that's a stupid metaphor but this is exactly how i feel today you know like it took me way too long you know to get into linux and now i'm like oh all the things that i thought i cared about actually now i learn how to make them and they work way better so it's it's a little bit like you have a new set of creative constraints that you have to work within yeah and i'm exposed to a lot more of the history of computer culture and this return like it feeds into how i do things today i don't have a specific tool to solve the challenge i have today but i do have a lot of searching and trying the tools that are already out there see which sticks you know like one of my
Starting point is 01:26:45 absolute latest passion i guess for the past few months has been lisp so like now everything has to be running in lisp and everything has to you know include some kind of lisp and and or scheme but there's like 30 years of history to go through and 30 years of tools that people made to go through and i'm super excited to have this now that this completely like whole new fields of interest or a whole new fields of things that existed all along you know sometimes i can think back of moments when i whined about something didn't working properly and i just wasn't exposed to you know like maybe something to some somebody made in the 90s that exactly tackled that problem.
Starting point is 01:27:28 I feel that a lot when I'm learning more about programming and I discover a new kind of data structure or an abstraction or a research paper or something like that that just lets you reframe the problem in a way where the solution becomes apparent. I really love that feeling, the change in perspective giving you the opportunity to see solutions that you couldn't see before. Yeah.
Starting point is 01:27:49 And I think like for language development, language programming, the first time you make a parser and it's lightning fast, and then you realize that, oh, like instead of adapting how I work with programming, I can make something that just follows the way I think.
Starting point is 01:28:07 And having this sort of reversal of how you would do programming or computing, I find it super empowering. Yeah. If your only experience with programming has come from Xcode or Visual Studio, you're really missing out on what it feels like to use tools that are designed for simplicity
Starting point is 01:28:23 rather than being everything in the kitchen sink oh my god if you've never experienced writing your own interpreter then you're really missing out because you've only ever used other people's way of doing things it's kind of nice to be reflecting on what your intuition would want nowadays i feel it's getting more and more accessible for even beginner program i I mean, I know how to program, but I don't come from a very strong programming background or anything like it. I mostly come from arts,
Starting point is 01:28:51 but it's crazy that I can write an interpreter today and make a programming language the way I would expect programming language to work. Orca comes from a misunderstanding of title. Well, this is a pattern in my career that I see everywhere. I made a language that I thought was Lisp. You look at Lisp code and you're like, oh, well, I see what's going on. And I made an interpreter that works exactly like this. And I use it all the time. I use it today. I can't really call it Lisp because it just looks like it. And it's like a misinterpretation of what Lisp is and how it works.
Starting point is 01:29:31 But I was at Jack Rusher's place in Berlin the other day. And then I was like, oh, can you look over my Lispy thing? And then he would just point out in all the ways that I'm breaking over my Lispy thing? And then you would just like point out in all the ways that I'm breaking patterns in Lisp and how it's kind of like a weird twist of what Lisp is. But that's kind of how my mind interpreted it and how I guess how I reflect. And it's kind of nice that I was able to build it so quickly.
Starting point is 01:30:01 Yeah, like that's beautiful. There's so many things that have been made as a result of you know somebody mishears the melody for a song and it gets stuck in their head and then they write a song based on it and then they go and listen to the original and go oh that's not at all what i thought it was i i've done my share of that i mean i made covers of songs you know on just based on memory and then later i'm like oh that's way up way off but then it led you somewhere new oh yeah it just it has value just different doing the expedition into the history of programming and computing that's what makes it so exciting is there's no way you're going to learn the cultural context that led small talk to being exactly what it was um and so you might pick up on
Starting point is 01:30:43 the ideas of small talk and misunderstand them and make something. And then that turns into, well, this is a bad example because that turned into Java and, you know, Java style. Wait,
Starting point is 01:30:53 small talk turning to Java. Well, so object oriented programming, like the term and the ideas came from small talk, but what we call object oriented these days where it's like you make a class and you instantiate the class and the class has methods and all that kind of stuff like that's that's a a pretty bad misunderstanding of what small talk did for oo and so when you get into it there's all the people who say oh are you talking about small talk style oh are you talking about small talk style? Oh, are you talking about Java, etc, style? Oh, there's this new
Starting point is 01:31:27 generation of people like us who are discovering that history for the first time. And I think it's going to lead to some pretty interesting results where people misunderstand what came before and do something very different. Well, hopefully somebody looks at Orca and misunderstand it into something that's amazing. That is a beautiful note, I think, to end on. Dimeen, thanks for coming on the show and talking to me. And I'm really excited to hear what people think of this episode because I think we went to some pretty out there places compared to where most people in the programming research
Starting point is 01:32:06 community are spending their time. But like, as we established at the very beginning, like, I think there's tremendous value in looking a fair bit abroad from whatever starting point you have. So thank you for taking us there. Thank you so much for having me. That's our show for today. Thank you again to devine for making these past two episodes with me and especially for letting me use your music in this episode i think it was a very fun way to capture some of the essence of orca and share it with the audience here the next episode of the show is going to be a small episode recapping the survey that we ran on the future of coding Slack. I'll go through some of the survey results and some of the answers suggesting things we should do with the community and with the podcast over the coming year.
Starting point is 01:33:21 The feedback was tremendous and I think it's really interesting as a barometer for where our community is at. That'll just be a little mini-episode about halfway through the month. The next full episode, which will come out about a month from now, well, here's your hint. So going back to that idea of the tools being small and doing specific things, Orca not making sound on its own, I listened to an interview with Miller Puckett, creator of Maximus P and Pure Data, and he said that when he first started making Macs, the thing that he was most excited about was the scheduler inside the engine that he wrote.
Starting point is 01:34:10 Join the community at futureofcoding.org slash community. Show notes are at futureofcoding.org slash episodes slash 45. And I will see you in the future.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.