WEBVTT 00:00.000 --> 00:06.000 Thank you. 00:06.000 --> 00:10.000 So this is going to be a very different talk in the last few in this room. 00:10.000 --> 00:16.000 Definitely don't take my advice on anything about regulations or anything legal. 00:16.000 --> 00:20.000 This is going to be about Essolangs as a hacker folk art. 00:20.000 --> 00:23.000 So I approach this as an artist. 00:23.000 --> 00:28.000 I have work which is more strictly visual art. 00:28.000 --> 00:30.000 Oh, good. 00:30.000 --> 00:32.000 Okay, it's still showing. 00:32.000 --> 00:33.000 Good, good. 00:33.000 --> 00:36.000 So for instance, oh, there we go. 00:36.000 --> 00:46.000 For instance, this dither generator where you can create dithering patterns with different types of different shape pixels like triangles and hexagons. 00:46.000 --> 00:49.000 And this is work that I also paint. 00:49.000 --> 00:55.000 And then I have work like my straightened trees where I compulsively straighten trees in a way. 00:56.000 --> 01:00.000 So it seems like I keep losing the video. 01:00.000 --> 01:04.000 So you just have to imagine, oh, there it is again. 01:04.000 --> 01:06.000 Some trees that are very straight. 01:06.000 --> 01:09.000 And as you can see, it warps everything around it. 01:09.000 --> 01:15.000 Both in the suburbs and the city taking on the opposite shape that the tree had. 01:15.000 --> 01:18.000 And then I also make work as Essolangs. 01:18.000 --> 01:23.000 For instance, this programming language where code is written as a labrant of folders and side of folders. 01:24.000 --> 01:26.000 Where files are ignored. 01:26.000 --> 01:32.000 And the names of folders are not considered apart from the alphabetical order in which they are read. 01:32.000 --> 01:39.000 This is part of the hello world program. 01:39.000 --> 01:43.000 So one of the nice things about folders is that in Windows. 01:43.000 --> 01:47.000 Windows will tell you that folders take up no space on disk. 01:47.000 --> 01:56.000 If you could see the screen, you would see a properties window that says that there are 352,449 folders. 01:56.000 --> 01:58.000 And that they take up zero bytes on disk. 01:58.000 --> 02:05.000 And of course, Windows is long to you, but this way you can pretend that you're storing all of your data and all of your programs as folders. 02:05.000 --> 02:09.000 And that you have infinite file storage. 02:09.000 --> 02:14.000 So for me, all this work is very connected. 02:14.000 --> 02:21.000 The trees, the folders, all of it comes from the same place, from a way of exploring human rationality. 02:21.000 --> 02:24.000 How we look at language and logic. 02:24.000 --> 02:32.000 But for this last piece for folders, I'm not just building on work by artists that are sort of better known in the art community. 02:32.000 --> 02:36.000 People like Yoko Ono who did instruction based work. 02:36.000 --> 02:41.000 But of course, I'm also building on a whole history of Essolang programming languages. 02:41.000 --> 02:49.000 In particular, when I made folders, I was thinking about the white space programming language, where we write code in tab space and return. 02:49.000 --> 02:55.000 And I started with the idea of what is more empty than an empty appearing file. 02:55.000 --> 03:00.000 And that would be a folder with nothing, it except for other empty folders. 03:00.000 --> 03:05.000 And so I wanted to sort of explore the history of Essolang programming languages. 03:05.000 --> 03:08.000 And I started a blog called Essolang Dark.co. 03:08.000 --> 03:10.000 It looks really nice. 03:10.000 --> 03:14.000 You'll just have to sort of imagine it because the video is cutting out. 03:14.000 --> 03:17.000 But you can, there it is again, as Dark.co. 03:17.000 --> 03:19.000 All right. 03:19.000 --> 03:25.000 And so I began interviewing other people who make these languages back in 2011, 03:25.000 --> 03:28.000 which eventually became this blog in 2014. 03:28.000 --> 03:35.000 And I'm going to share a little bit of what I found about a few different genres of Essolang's. 03:35.000 --> 03:41.000 And how we can think about them as its own sort of aesthetic history from outside the art world. 03:41.000 --> 03:46.000 And then I'm going to show you a little bit more of my work if I leave myself enough time. 03:46.000 --> 03:50.000 So we really need to begin with the turning tar pits. 03:50.000 --> 03:53.000 Are people familiar with that term turning tar pit? 03:53.000 --> 03:56.000 Is that something not familiar to anybody? 03:56.000 --> 03:57.000 Not so many. 03:57.000 --> 03:58.000 Okay. 03:58.000 --> 04:03.000 Well, the name comes from that book, the Mythical Man Month, Frederick Brooks. 04:03.000 --> 04:07.000 You know, he wrote this book that was very popular for a while. 04:07.000 --> 04:15.000 And on the cover it had these, this picture of these creatures that eventually got trapped in the library. 04:15.000 --> 04:18.000 Tar pits kind of struggling their way through. 04:18.000 --> 04:25.000 And this was a term that started to become applied to some of the very early Essolang languages. 04:26.000 --> 04:31.000 The first language that we can sort of properly call a turning tar pit was called false. 04:31.000 --> 04:35.000 And with apologies to the Dutch speakers. 04:35.000 --> 04:38.000 This was created by. 04:38.000 --> 04:41.000 The Vuter von Orton-Merson. 04:41.000 --> 04:50.000 Orton-Merson created this language as sort of a challenge to himself to create a fully functional programming language, 04:50.000 --> 04:54.000 a fully featured programming language with a compiler of just one K. 04:55.000 --> 04:57.000 For the Amiga. 04:57.000 --> 05:00.000 And this is a language which. 05:00.000 --> 05:03.000 It really looks like a right only language. 05:03.000 --> 05:06.000 It has this very sort of dense vocabulary. 05:06.000 --> 05:09.000 Almost everything is written with a single character. 05:09.000 --> 05:11.000 It's a stock based language. 05:11.000 --> 05:12.000 You can. 05:12.000 --> 05:18.000 Which is sort of something that he chose because it's a way of keeping the language very small. 05:18.000 --> 05:22.000 And one of the side effects was to make the compiler small. 05:22.000 --> 05:26.000 It's impossible the commands are all one character long. 05:26.000 --> 05:28.000 And this inspired a few other languages. 05:28.000 --> 05:31.000 One of them is be funged by Chris Pressie. 05:31.000 --> 05:36.000 Chris noticed that once you have characters that are one character. 05:36.000 --> 05:38.000 Command that are one character. 05:38.000 --> 05:40.000 You don't need to read them left to right. 05:40.000 --> 05:43.000 You can have lines of code that start moving towards the right. 05:43.000 --> 05:45.000 And then they turn up and they turn last and they turn down. 05:45.000 --> 05:47.000 And they can flow in every direction. 05:47.000 --> 05:51.000 And part of designing this was him thinking about designing a language. 05:51.000 --> 05:55.000 So it would be the most difficult language to write a compiler for. 05:55.000 --> 05:59.000 This also was for the Amiga and also 1993. 05:59.000 --> 06:03.000 And then the other language that was inspired by false was BrainFuck. 06:03.000 --> 06:05.000 Which. 06:05.000 --> 06:07.000 Basically. 06:07.000 --> 06:10.000 Urban Mueller said, OK, you've created a compiler that's one K. 06:10.000 --> 06:13.000 I'm going to make one that's under 256 bytes. 06:13.000 --> 06:18.000 And he did that by stripping down the code to the language. 06:18.000 --> 06:20.000 The language to basically attorney machine. 06:20.000 --> 06:22.000 And only has eight commands. 06:22.000 --> 06:29.000 And what's interesting about BrainFuck is that all the commands individually are easy to understand and easy to read. 06:29.000 --> 06:36.000 The whole cognitive gap between the text of code and his performance comes because of the complexity that builds up. 06:36.000 --> 06:41.000 As you sort of write any sort of complex algorithm in BrainFuck. 06:41.000 --> 06:47.000 And one way to sort of understand false BrainFuck and B.FUNs is by looking back. 06:47.000 --> 06:50.000 To the 1950s. 06:50.000 --> 06:53.000 We had a language called Flowmatic. 06:53.000 --> 06:55.000 That was created in the late 50s. 06:55.000 --> 06:57.000 And it was the first. 06:57.000 --> 07:01.000 I believe it was the very first language that brought natural language into code. 07:01.000 --> 07:04.000 It was created by Admiral Grace Hopper. 07:04.000 --> 07:06.000 It looks like the code to the left. 07:06.000 --> 07:10.000 It's what inspired Cobal and a bunch of other languages. 07:10.000 --> 07:14.000 And what happened when this language was created. 07:14.000 --> 07:20.000 Admiral Hopper wanted to create a language that would democratize code somewhat. 07:20.000 --> 07:28.000 To make it sort of take it out of the hands of what John Beck is a foretran called the high priesthood of programmers. 07:28.000 --> 07:32.000 The people who felt like they alone were sort of entitled to write code. 07:32.000 --> 07:36.000 And they alone had the understanding of what was necessary. 07:36.000 --> 07:43.000 It's our first sort of step towards democratizing code to make code available to more people. 07:43.000 --> 07:47.000 To make the active programming available to more people. 07:47.000 --> 07:54.000 But what happens with every time we try to democratize code is it also involves somewhat of deskilling. 07:54.000 --> 07:56.000 It makes programming easier. 07:56.000 --> 07:58.000 And there's always some push back to that. 07:58.000 --> 08:05.000 And as back as described, some of the early programmers were not happy that all of a sudden this was sort of being taken away from them. 08:05.000 --> 08:13.000 And there was a sense that this automatic was designed with the idea of turning managers into coders. 08:13.000 --> 08:17.000 That we wouldn't really need dedicated programmers as much. 08:17.000 --> 08:19.000 And we thought this happened over and over again since then. 08:19.000 --> 08:22.000 I think it was the original idea behind visual basic. 08:22.000 --> 08:25.000 And of course we're seeing it now with AI assisted coding. 08:25.000 --> 08:30.000 That all these things are supposed to make it so business folks can write code with less help from programmers. 08:30.000 --> 08:35.000 And that somehow it's going to solve the sort of underlying difficulty of writing code. 08:35.000 --> 08:37.000 And of course it never really works. 08:37.000 --> 08:41.000 But what happens instead is it creates a new kind of expertise. 08:41.000 --> 08:43.000 The people who are experts in the new system. 08:43.000 --> 08:48.000 And it's somewhat sidelines the expertise of the old system but that never really goes away. 08:48.000 --> 08:54.000 And we see evidence of this in the essay the humble programmer by Dykestra. 08:54.000 --> 08:57.000 Now this was written a bit later in the early 70s. 08:57.000 --> 09:03.000 Based on thoughts that he had going back to the late 50s. 09:03.000 --> 09:12.000 What Dykestra was concerned about is that there were programmers who still sort of wrote code in the old style. 09:12.000 --> 09:17.000 And he thought it was very essential at this moment to professionalize programming. 09:17.000 --> 09:26.000 He says, what opinion that he would run into a lot is that a really competent programmer should be puddleminded and very fond of clever tricks. 09:26.000 --> 09:32.000 The other one was that programming was nothing more than optimizing the efficiency of the computational process. 09:32.000 --> 09:36.000 And what he wanted was to get away from that type of thinking. 09:36.000 --> 09:40.000 Now that computer cycles were cheaper we don't need to shave off a few of them. 09:40.000 --> 09:44.000 We don't have to write more and more efficient code. 09:44.000 --> 09:48.000 Instead we have to write code in neutral voice that other people can understand. 09:48.000 --> 09:54.000 So that we can become widget makers that can fit with other people's widgets. 09:54.000 --> 09:56.000 Everything should be written in neutral tone of voice. 09:56.000 --> 10:02.000 We should not be trying to show off and everything should be sort of readable to other people. 10:02.000 --> 10:06.000 Is it kind of corporatizing of coding. 10:06.000 --> 10:10.000 One of the things he in particular did not like is the idea of the one liner. 10:10.000 --> 10:14.000 The idea that a programmer places a one line program on the desk of another. 10:14.000 --> 10:20.000 I'm proudly tells what it does and ask the question, can you code this in fewer symbols. 10:20.000 --> 10:26.000 And you know the whole essay just sort of he sort of makes the same points over and over again. 10:26.000 --> 10:32.000 And it's kind of typical dixtra where he's he's kind of bitchy and. 10:32.000 --> 10:40.000 So by going back to the touring tar pits, these are languages that invite the exact kind of thinking that dixtra wanted us to get to get past. 10:40.000 --> 10:52.000 So the idea of writing something in a neutral in a neutral voice or writing something with clarity as sort of the. 10:52.000 --> 10:57.000 The ultimate aim because it's very difficult to write clear code and brain fuck. 10:57.000 --> 11:03.000 So what I have here is five different ways to write the number 35 in brain fuck. 11:03.000 --> 11:06.000 The only one I can read at the top one. 11:06.000 --> 11:14.000 It is adding five to one memory cell moving to the right, adding seven moving to the left, subtracting one moving to the right, 11:14.000 --> 11:16.000 subtract adding seven again. 11:16.000 --> 11:19.000 It's basically this is how multiplication is done in brain fuck. 11:19.000 --> 11:22.000 The others are all more complex. 11:22.000 --> 11:28.000 They use wrapping, which means they go past 255 because in brain fuck a memory cell. 11:28.000 --> 11:44.000 The other example is that we have here do the same thing in fewer characters. 11:44.000 --> 11:56.000 So the first original example is 18 characters long, but the last one is only 14 and it does that by taking advantage of 12 different memory cells and moving back across them in different ways. 11:56.000 --> 11:59.000 You can see what it looks like now at the bottom. 11:59.000 --> 12:08.000 So Chris Pressie, the creator of BFUNGE, has described brain fuck as the 12 bar blues of SLX because there's so many variations of it. 12:08.000 --> 12:12.000 There's so many people who sort of made their own version. 12:12.000 --> 12:15.000 One of them that I like in particular is called body fuck. 12:15.000 --> 12:25.000 It is really sort of an early interface for brain fuck where you have to sort of physically carry out the labor of programming. 12:25.000 --> 12:29.000 And this was done before the connect. 12:29.000 --> 12:33.000 So this is all using a webcam. 12:33.000 --> 12:35.000 It's made by Nick Hunselman. 12:35.000 --> 12:45.000 If you want to move to the left and memory, which is what he was doing just there, he has to sort of stand there for a while until it picks up that left motion has happened. 12:45.000 --> 12:48.000 The next example is called TT type. 12:48.000 --> 12:54.000 It is sort of a hypercapitalist version of brain fuck where each of the symbols has a different value in the market. 12:54.000 --> 12:56.000 And they are constantly changing. 12:56.000 --> 12:59.000 It's made by the Canadian developer Edith Vow. 12:59.000 --> 13:03.000 And so you can start a program using a lot of plus signs because they're cheaper. 13:03.000 --> 13:10.000 And then they can sort of go up and value and you have to sort of move towards obstructing it differently. 13:10.000 --> 13:15.000 One of my favorite examples is the language Leninquidge. 13:15.000 --> 13:18.000 Leninquidge asks, do we really need binary? 13:18.000 --> 13:24.000 Can't be code in Unery using one symbol. 13:24.000 --> 13:30.000 And this is the beginning of a hello world program. 13:30.000 --> 13:39.000 So the thing about Leninquidge is, of course, the number of ones is itself a number and that can be broken down into a brain fuck program. 13:39.000 --> 13:45.000 If you wanted to write hello world to the screen and you want to represent each one with a single atom, 13:45.000 --> 13:50.000 but it would take more matters than exists in the universe to complete. 13:50.000 --> 13:54.000 So those are some of the brain fuck variations. 13:54.000 --> 14:00.000 I'm going to move now to one of the other sort of best known SLangs, the language peat. 14:00.000 --> 14:06.000 Our people familiar with peat is something that people have seen before a few people. 14:06.000 --> 14:13.000 So peat is a language which is, 14:14.000 --> 14:19.000 it's represented by an image and it's the change in color from what are called codals, 14:19.000 --> 14:30.000 which are basically just like it's sort of similar to a pixel that is represented as a box that is four or nine pixels or larger that you can draw the image bigger. 14:30.000 --> 14:34.000 And it's sort of building on the idea of be fun. 14:34.000 --> 14:39.000 You can write code that moves left to right and then turns up and then down and so on, 14:39.000 --> 14:45.000 except now with peats we're doing the same thing but without characters we're doing it with the change of color. 14:45.000 --> 14:54.000 So it goes through the red block it gets to the pink block and some of these colors are showing it to turn a different direction. 14:54.000 --> 14:58.000 And you can see the left is a very early peat program. 14:58.000 --> 15:04.000 The one to the right is actually a peat program, a peat interpreter written in peat. 15:04.000 --> 15:08.000 This is what a computer generated one looks like. 15:08.000 --> 15:16.000 And what's happened with peat over time is that individual programmers have sort of developed their own style in it. 15:16.000 --> 15:23.000 Thomas Scotch created this program which prints peat to the screen. 15:23.000 --> 15:28.000 It was used as a cover for the speaking code book. 15:28.000 --> 15:32.000 And this is an example of a language that we call a multi-coding oscilling. 15:32.000 --> 15:35.000 In that there's two different ways to read the code. 15:35.000 --> 15:43.000 You can read it as what it will perform and it can read it as the image that it produces as code. 15:43.000 --> 15:46.000 And these two different readings impact each other. 15:46.000 --> 15:54.000 Basically the programmer is trying to create something or work and peat but usually they want to express something visually as well. 15:54.000 --> 16:01.000 And this relates to other literary and artistic traditions. 16:01.000 --> 16:12.000 Sort of the best known is probably Aleppo which is a group of mathematicians and writers based in Paris in the 50s and 60s who did constraint based writing. 16:12.000 --> 16:15.000 They called themselves the rats who designed their own mazes. 16:15.000 --> 16:20.000 They would create a constraint system and then create literary works within that system. 16:20.000 --> 16:28.000 Probably the most famous example of this is the book by George Perek which in English is called Avoid. 16:28.000 --> 16:32.000 And it is a book written by somebody who has four easiness name. 16:32.000 --> 16:35.000 He's written an entire novel without using the letter E. 16:35.000 --> 16:37.000 This is the first page. 16:37.000 --> 16:46.000 And you can see he's honored in Paris with a pause George Perek which is written like that. 16:46.000 --> 16:55.000 So you start to over time you start to have more peat programs that were influenced by the earlier pieces. 16:55.000 --> 17:00.000 And then you had pieces that really took their own direction entirely. 17:00.000 --> 17:03.000 This is a pie program by Richard Mitten. 17:03.000 --> 17:07.000 And it calculates pie based on the size of this circle. 17:07.000 --> 17:11.000 So the circle of the image actually represents a circle and code. 17:11.000 --> 17:18.000 And the larger that you draw this program the more accurate it'll calculate pie. 17:18.000 --> 17:22.000 Then you have people who write peat programs and hide them in other images. 17:22.000 --> 17:26.000 So this was like an advent of code experiment. 17:26.000 --> 17:29.000 This is the basic peat program to the right. 17:29.000 --> 17:32.000 Here it is with the black characters that sort of box it in. 17:32.000 --> 17:36.000 And then so is designed to look more and more like a Christmas tree. 17:36.000 --> 17:44.000 And then it fills in with non-peat colors to the left to basically hide the code in the image. 17:44.000 --> 17:47.000 And then finally my favorite example. 17:47.000 --> 17:49.000 This is a peat ready made. 17:49.000 --> 17:50.000 Someone saw a painting. 17:50.000 --> 17:52.000 They thought it looked like a peat program. 17:52.000 --> 17:56.000 They decided to recreate it and code to see if it would work as peat. 17:56.000 --> 17:57.000 And it turns out it does. 17:57.000 --> 17:59.000 It copies input to output. 17:59.000 --> 18:02.000 So you can click characters and they'll print them out. 18:02.000 --> 18:05.000 It was totally unintentional by the painter. 18:05.000 --> 18:13.000 And somebody whose name actually happened to be peat saw this and thought that it had some potential. 18:13.000 --> 18:17.000 So there are many other types of multi-coding oscillangs. 18:17.000 --> 18:23.000 And some of them leave more room for expressiveness of the programmer than others. 18:23.000 --> 18:26.000 One of the really famous ones is called Shakespeare. 18:26.000 --> 18:29.000 It's not a great language. 18:29.000 --> 18:31.000 It was sort of funny when it first came out. 18:31.000 --> 18:37.000 But it's sort of lift on and oscilling listicles over the last 20 years and it keeps getting repeated. 18:37.000 --> 18:47.000 You basically write code where you have these long lines of compliments or insults that add one or subtract one. 18:47.000 --> 18:53.000 The reason I don't really love Shakespeare is that if you wrote a Shakespeare program and I wrote a Shakespeare program, 18:53.000 --> 18:56.000 they would read pretty much the same way. 18:56.000 --> 18:58.000 It's a very little room for expressiveness. 18:58.000 --> 19:02.000 I think the joke kind of runs cold after a short time. 19:02.000 --> 19:08.000 But the thing about Shakespeare is that it inspired a whole bunch of other programming languages that used haxt. 19:08.000 --> 19:16.000 There's ash paper that tries to use aspects of poetry that people actually use, like capitalization in the middle of the word, 19:16.000 --> 19:19.000 or how much things are invented and so on. 19:20.000 --> 19:25.000 An inverse which produces visuals based on poetry. 19:25.000 --> 19:30.000 But each program has its own word table. 19:30.000 --> 19:35.000 So the vocabulary is specific to each poem. 19:35.000 --> 19:39.000 So I'm going to talk about a third type of oscilling, 19:39.000 --> 19:44.000 which are oscilling that are more directly critical of technology. 19:44.000 --> 19:53.000 And the one that I'm going to pick on right now is the ones that deal with English, 19:53.000 --> 19:58.000 the sort of hegemony of English. 19:58.000 --> 20:04.000 So we didn't always have programming languages that were using so many English keywords. 20:04.000 --> 20:05.000 We have APL. 20:05.000 --> 20:12.000 They're also there were Soviet programming languages and languages in other countries that used keywords from other natural languages. 20:12.000 --> 20:16.000 But right now we're sort of dominated by English. 20:16.000 --> 20:20.000 And there are a number of programmers who sort of pushed back against that with creative projects. 20:20.000 --> 20:22.000 One of them is called ALB. 20:22.000 --> 20:24.000 This is created by Ramsey Nasser. 20:24.000 --> 20:27.000 It's an Arabic list. 20:27.000 --> 20:35.000 And this started out as not meaning to be an oscilling as much as a practical programming language. 20:35.000 --> 20:41.000 But what he found was that a lot of the underlying technology that was supposed to be in different 20:41.000 --> 20:45.000 to natural language didn't really work correctly with right to left languages. 20:45.000 --> 20:49.000 Even though they said that they were all unicode compliant and they all sort of worked. 20:49.000 --> 20:51.000 They should work with any language. 20:51.000 --> 20:55.000 But there were also some other sort of cultural things that were a little bit difficult. 20:55.000 --> 20:59.000 Because the programming language is not just the code that you write. 20:59.000 --> 21:01.000 It's everything that's output as well. 21:01.000 --> 21:07.000 And you have to consider what is the Arabic word for abstract proxy bean. 21:07.000 --> 21:13.000 But ALB sort of started a little movement. 21:13.000 --> 21:21.000 This is a language by Anuluwapay who was an Igerian programmer who works for mostly European companies. 21:21.000 --> 21:25.000 He has to speak English all day and after hours he's like, 21:25.000 --> 21:28.000 I want to be able to write code in Europe. 21:28.000 --> 21:32.000 So he created this language for himself and his friends. 21:32.000 --> 21:36.000 And all of it uses the Europe language and syntax. 21:36.000 --> 21:42.000 And then there are some that are more explicitly creative pieces. 21:42.000 --> 21:51.000 This is Wanyan Lang which is written in classical Chinese where you write code as poetry in the style of the various poets. 21:51.000 --> 22:02.000 This is a 99 bottles program which is in the style of Levi who is apparently famous for his drinking habit. 22:02.000 --> 22:10.000 And it's the person who translated this for me calls him the greatest poet in Chinese history. 22:10.000 --> 22:16.000 Apparently nine numbers and wine number, wine and wine or homophones in Chinese. 22:16.000 --> 22:22.000 There's a lot of sort of like textual play in it as well. 22:22.000 --> 22:29.000 So going back to this idea of the constraint-based thinking that comes in Asalang's. 22:30.000 --> 22:37.000 The Olympians, those mathematicians and writers ask questions like, 22:37.000 --> 22:43.000 How small, how tight can you make a set of constraints and still produce literature that's interesting. 22:43.000 --> 22:46.000 Can you for instance create a poem of a single letter? 22:46.000 --> 22:52.000 Is there something that is different in feeling from the letter from the poem A and the poem B? 22:52.000 --> 22:54.000 But eventually someone did do that. 22:54.000 --> 22:57.000 Aaron Saroyan who is a minimalist poet. 22:57.000 --> 23:02.000 Produced this poem and I'm with an extra arch. 23:02.000 --> 23:10.000 And so bringing this to Asalang's, we can think about how programming languages can sort of play with constraints. 23:10.000 --> 23:14.000 I created a programming language called past tense. 23:14.000 --> 23:23.000 And this is a language where there are valid programs in the language but they do not run. 23:23.000 --> 23:34.000 If a program runs in any language, it's not valid as past tense because past tense is only for programs we're never going to run again. 23:34.000 --> 23:39.000 I created a converter so you can turn your existing code into past tense. 23:39.000 --> 23:42.000 This is what it looks like for a C-sharp program. 23:42.000 --> 23:47.000 Name's based, hello, world, public class programs. 23:47.000 --> 23:52.000 Public static-voided means strong arcs. 23:52.000 --> 24:01.000 System-consult, wrote lines, hello, world. 24:01.000 --> 24:09.000 One of the great things about creating an Asalang or any kind of systems art is that other people will come to it and bring their own point of view. 24:09.000 --> 24:15.000 That's sort of exciting about languages like Pete, David Morgan-Mar, who created Pete. 24:15.000 --> 24:19.000 He didn't really know how far people would take the language. 24:19.000 --> 24:21.000 I created a language called fatfinger. 24:21.000 --> 24:28.000 It's a version of JavaScript where you can spell everything wrong and it still works. 24:28.000 --> 24:36.000 Basically how it functions, you include the fatfinger library and then you create any script tag with JavaScript misspelled. 24:36.000 --> 24:43.000 It says Java OScript and then you instead of varts, varts and document has a bunch of keys in it. 24:43.000 --> 24:49.000 It just looks for the closest thing that it understands to what you typed. 24:49.000 --> 24:54.000 The thing about putting this out in the world is people did not use it the way I was expecting. 24:54.000 --> 24:59.000 For me it was really about compulsiveness and code which is sort of more what I'm interested in. 24:59.000 --> 25:07.000 But there were some code poets who realized that you could intentionally use a different word in place of the expected word rather than the misspelling. 25:07.000 --> 25:19.000 So this is a piece by Jeremy Douglas where he uses the variable who and then uses it also as what and when and why. 25:19.000 --> 25:27.000 And he's able to use it interchangeably to create something that reads as English poetry but still functions as JavaScript. 25:27.000 --> 25:41.000 And he created sort of a map called fat doctals of various words that most of the time will function in fatfinger as their equivalents in JavaScript. 25:41.000 --> 25:44.000 I'm going to show my language. 25:45.000 --> 25:48.000 This is a recent programming language. 25:48.000 --> 25:54.000 I know we have some people in the audience from software heritage. 25:54.000 --> 25:59.000 So I want to share that this language was shown at this exhibition UNESCO. 25:59.000 --> 26:04.000 That's to be comparison which is a celebration of open source code. 26:05.000 --> 26:09.000 Related to programming language that we write with these flowing lines. 26:09.000 --> 26:13.000 It's actually written with box drawing characters. 26:13.000 --> 26:26.000 Which are holdovers from systems like the one that I learned to program on the commoner 64 where you can draw user interfaces like the one on the left with these different corners and lines. 26:26.000 --> 26:33.000 But in review, instead of creating boxes, we're creating these sort of flows called strands. 26:33.000 --> 26:36.000 And each strand does something different. 26:36.000 --> 26:38.000 It's a list based language. 26:38.000 --> 26:43.000 In this case, all of these lines have these hooks sort of in a line. 26:43.000 --> 26:45.000 So they're already into one list. 26:45.000 --> 26:53.000 And what they're producing are the integers that correspond to the string hello world. 26:53.000 --> 27:01.000 This is not my program but a piece by a programmer in London for review that. 27:01.000 --> 27:08.000 And a lot of the sort of fun of writing in this language is that you might create one version of a program. 27:08.000 --> 27:12.000 But then you'll find a denser way of saying the same thing that sort of looks better. 27:12.000 --> 27:20.000 And so there's a lot of writing code and then sort of reworking it more and more to get it to function to sort of look better on the screen. 27:21.000 --> 27:29.000 And one thing I was thinking about in designing this language is the way that maze is work and have similar that is to source code. 27:29.000 --> 27:36.000 When we see a maze, usually we're not in in the maze like we might be to one on the left where we can't see the whole of it. 27:36.000 --> 27:40.000 Usually we're looking at it from above where we can see all the different paths. 27:40.000 --> 27:44.000 But that doesn't mean that it's entirely obvious how to get through the maze. 27:44.000 --> 27:49.000 We still have to sort of run it in our heads to sort of find the way. 27:49.000 --> 27:51.000 And of course it's very similar with code. 27:51.000 --> 27:58.000 If we look at this kind of spaghetti code to the right, we have to sort of make sense of it by sort of running it running through it in our heads. 27:58.000 --> 28:01.000 Just looking at it is not sort of enough. 28:01.000 --> 28:09.000 When I put when this got to Hacker News, it created a lot of confusion. 28:10.000 --> 28:16.000 This is one comment by a programmer who says, it's just what it feels like to learn to program as an adult. 28:16.000 --> 28:24.000 I can brainfuck an APL with the best of them and this is the most alien language specification I've ever read. 28:24.000 --> 28:28.000 Part of it is that each type of strands moves in a different way. 28:28.000 --> 28:34.000 So some of them, so this is a complete Fibonacci program. 28:34.000 --> 28:38.000 Each sort of unit here, it's sort of like a paragraph of code. 28:38.000 --> 28:39.000 It's called a glyph. 28:39.000 --> 28:44.000 It starts with these markers to the left and the upper left and the bottom right. 28:44.000 --> 28:49.000 And it's the way that they move through the space that matters. 28:49.000 --> 28:54.000 But if they have a little space at the end, it means they're pointing to a memory cell. 28:54.000 --> 29:00.000 If they don't that it's the way that they move back and forth, you can see the line numbers restart for each glyph. 29:00.000 --> 29:04.000 And we always skip line number four. 29:04.000 --> 29:06.000 It's not that I hate the number four. 29:06.000 --> 29:14.000 It's that it's all in successive prime numbers. 29:14.000 --> 29:20.000 Now a lot of some people, the thing about it is that there's no particular reason it had to be prime numbers. 29:20.000 --> 29:23.000 And I get asked sometimes, I can't explain why. 29:23.000 --> 29:29.000 As if there needs to be a reason, the reason is because that's what I decided to do. 29:29.000 --> 29:35.000 It needed to be numbers. It couldn't just be linear because it would be very hard to draw large numbers in this language. 29:35.000 --> 29:41.000 And I didn't want it to be prime numbers sort of have like a nice sort of flow in the way that they increase. 29:41.000 --> 29:45.000 And it feels like it has meaning, but it's very arbitrary. 29:45.000 --> 29:52.000 And part of the thinking behind this language was I was imagining that this programming language had developed more like a natural language. 29:52.000 --> 29:57.000 That it would have these arbitrary decisions that would become part of it over time. 29:57.000 --> 30:02.000 And that sort of have an internal logic, but that don't are not really sort of explainable. 30:02.000 --> 30:11.000 Because the basic type of strands adds and subtracts value by moving back and forth on each line. 30:11.000 --> 30:14.000 There are many different ways to draw the same thing. 30:14.000 --> 30:21.000 So this is three different ways to create one list with a zero and a one and another list with a live end. 30:21.000 --> 30:26.000 And these we're going to use in the Fibonacci program and these are all equivalent. 30:27.000 --> 30:34.000 This is a complete set of the the whole Fibonacci program written five different ways. 30:34.000 --> 30:40.000 So this is a language which is right now very difficult for AI to make sense of. 30:40.000 --> 30:45.000 I think AI is very bad at understanding code that. 30:45.000 --> 30:49.000 Where the code flows vertically instead of just left to write. 30:49.000 --> 30:54.000 But also of course it's not enough of it for it to make sense of. 30:54.000 --> 31:00.000 But I like to think that all of these usalangs are a form of resistance to AI. 31:00.000 --> 31:08.000 I mean, if we think about how mainstream languages have sort of. 31:08.000 --> 31:13.000 You know, the sort of procedural multi paradigm languages that sort of adopt the same things every year. 31:13.000 --> 31:16.000 It becomes very sort of planned over time. 31:16.000 --> 31:20.000 And then we have AI sort of producing a sort of bland code. 31:20.000 --> 31:25.000 And it's a stuff that would make dixtra happy because it's very well, sometimes it's readable. 31:25.000 --> 31:33.000 It's it's it's definitely has a neutral style and reduces the sense of individual expression within the text of code. 31:33.000 --> 31:36.000 That assoing's feel like a place of resistance against that. 31:36.000 --> 31:42.000 Instead of having, you know, five programming languages to rule the world, we can all make languages of our own. 31:42.000 --> 31:46.000 They might be languages that will only be understandable to a few other people. 31:46.000 --> 31:55.000 But we have control over how it looks, how it functions, and what is possible to say in it. 31:55.000 --> 31:57.000 I'm just going to share a couple more things. 31:57.000 --> 32:00.000 How much more time do I have? 32:00.000 --> 32:03.000 Like, I can go on. 32:03.000 --> 32:05.000 Yeah. 32:05.000 --> 32:06.000 Okay. 32:06.000 --> 32:07.000 All right. 32:07.000 --> 32:09.000 I have a lot more time than I thought. 32:09.000 --> 32:12.000 I will show a few more languages. 32:12.000 --> 32:14.000 So I showed you that finger. 32:14.000 --> 32:19.000 That finger was actually inspired by an earlier language of mine called entropy. 32:19.000 --> 32:24.000 So usually when we think about assoing's, we think of code that's very difficult to read. 32:24.000 --> 32:27.000 But the code in entropy is actually very straightforward. 32:27.000 --> 32:29.000 It's as very sort of bureaucratic code. 32:29.000 --> 32:33.000 It looks like a mix of Pascal and C. 32:33.000 --> 32:38.000 But the thing that's unusual about entropy is that the data decays the more that you use it. 32:38.000 --> 32:45.000 So every time you access a variable, it'll be randomized very slightly. 32:45.000 --> 32:52.000 So this is what the 99 bottles sounds like in entropy. 32:52.000 --> 32:54.000 If I can get to start it. 32:54.000 --> 33:04.000 So I have a little bit here. 33:04.000 --> 33:20.000 18.0. 33:21.000 --> 33:26.000 So you notice that the voice changed there. 33:26.000 --> 33:37.000 That is the place where it's decided that it's no longer speaking English, that it's in German. 33:37.000 --> 33:39.000 I did write Eliza in entropy. 33:39.000 --> 33:42.000 It ended up becoming drunk Eliza. 33:42.000 --> 33:45.000 This was sort of an interesting cultural experiment. 33:45.000 --> 33:50.000 The more that you talk, she sort of crashes a lot. 33:50.000 --> 33:53.000 But basically you could have a CRD crash. 33:53.000 --> 33:55.000 You can have conversations with her. 33:55.000 --> 34:02.000 And the thing that's sort of interesting is that her data bank sort of becomes more and more decayed. 34:02.000 --> 34:04.000 The more that you talk with her. 34:04.000 --> 34:06.000 And people's responses tend to be the same. 34:06.000 --> 34:12.000 That the longer they communicated with her, the more they're sort of just hitting their keyboard. 34:12.000 --> 34:16.000 One thing about entropy is that originally I wrote a C sharp compiler for this. 34:16.000 --> 34:18.000 I guess that was in 2010. 34:18.000 --> 34:25.000 And then a few years later, another developer Andrew Hoyer decided to create a JavaScript version. 34:25.000 --> 34:31.000 Which is actually sort of now what I've built more recent versions of entropy on top of, 34:31.000 --> 34:35.000 because this was a really smart idea that you could do visual work in entropy. 34:35.000 --> 34:41.000 And you could sort of carry this into, you could do things that were sort of not very obvious before. 34:41.000 --> 34:49.000 And I think that that's really sort of what's rich about doing assaling work is that it's always communication with other people. 34:49.000 --> 34:55.000 Anything that you make, if there's interests from the rest of the community, people will, 34:55.000 --> 35:01.000 like you don't really understand your language until other people bring their own vision to it and write programs in it. 35:01.000 --> 35:05.000 If you're lucky enough, people will create their own interpreters for your language. 35:05.000 --> 35:10.000 They'll expand what sort of possible to do in the language and they'll bring new insight into what it is that you've created. 35:10.000 --> 35:13.000 So it's something that's always community based. 35:13.000 --> 35:15.000 It's always collaborative. 35:15.000 --> 35:23.000 And I think that that's why, to some extent, it's very indebted to the history of open source. 35:23.000 --> 35:26.000 I don't think it really makes sense so much in other contexts. 35:26.000 --> 35:30.000 And to some degree, it's always going to be a little bit outside the art world, 35:30.000 --> 35:33.000 because I don't think that this is ever going to be really sellable. 35:33.000 --> 35:36.000 Because who would want, like if someone made an NFT out of their assaling, 35:36.000 --> 35:38.000 no one would want to contribute to it. 35:38.000 --> 35:41.000 It would just sort of ruin the whole thing. 35:41.000 --> 35:45.000 So it's not very commercially viable to be making these languages, 35:45.000 --> 35:52.000 but it's something that I think is very rewarding and is the work that I'm really excited about. 35:52.000 --> 35:57.000 So I do have a book of assalangs that just came out. 35:57.000 --> 36:00.000 It's a little bit hard for me to recommend buying this book here, 36:00.000 --> 36:03.000 because it's very expensive with the tariffs. 36:03.000 --> 36:07.000 So I think you might have to wait for, you know, my country to unfuck itself. 36:07.000 --> 36:10.000 And then by the book. 36:10.000 --> 36:15.000 But I do have some copies here if people want to buy it without the tariffs. 36:15.000 --> 36:22.000 And I want to mention that I am going to be speaking about the assalangs from the book 36:22.000 --> 36:27.000 in Carl's Room next Friday at Zed Kayam. 36:27.000 --> 36:30.000 So if you are in that area, or if you are friends who are in that area, 36:30.000 --> 36:32.000 it would be great if you came out. 36:32.000 --> 36:39.000 It would be more of a straightforward discussion of other languages from the book. 36:39.000 --> 36:45.000 And since I still have a few minutes, I'm going to show the language that I showed 36:45.000 --> 36:49.000 at last year's Faustam, which is called valence. 36:49.000 --> 36:54.000 And if anyone was at my talk last year, no, okay, good. 36:54.000 --> 36:55.000 So this won't be a repeat. 36:55.000 --> 37:01.000 So valence is a programming language that sort of fills in something that's really sort of missing 37:01.000 --> 37:07.000 in the world of programming, but that comes very easily to natural language. 37:07.000 --> 37:14.000 So natural language, we can construct sentences like Billy saw the group at the telescope. 37:14.000 --> 37:18.000 And if I say Billy saw the group at the telescope, there's two different ways to understand this. 37:18.000 --> 37:23.000 It could be that Billy was looking through the telescope and saw the group or it could be that Billy saw the group 37:23.000 --> 37:24.000 and the group had the telescope. 37:24.000 --> 37:28.000 So these are two different ways that we can break down that sentence. 37:28.000 --> 37:34.000 So what if we had code a programming language that allowed for that same thing? 37:34.000 --> 37:40.000 So I decided to produce it and I would use only ancient Greek characters to represent it. 37:40.000 --> 37:43.000 These are the eight characters that I used for that. 37:43.000 --> 37:51.000 In the idea of the language is that every single, each of these characters are the eight variables you can use. 37:51.000 --> 37:56.000 They're also, they also represent the eight octal digits that you can use. 37:56.000 --> 38:01.000 Each one is a command and an expression and it takes either zero, one or two parameters. 38:01.000 --> 38:05.000 If it takes one, it's prefix and if it takes two, it's in fix. 38:05.000 --> 38:13.000 And so what happens when you write code is that every single possible interpretation of that code shows up. 38:13.000 --> 38:18.000 So let's just give this a minute for the signal to come back. 38:18.000 --> 38:23.000 There it is. Okay. Great. So I can just start typing and something will happen. 38:23.000 --> 38:28.000 And you can see I already have nine interpretations for the more runnable. 38:28.000 --> 38:36.000 The ones that are not runnable are because they are wild statements that do not have a closing bracket. 38:36.000 --> 38:40.000 I can add the closing bracket and now but I have five runnable. 38:40.000 --> 38:47.000 But the great thing about this is you can just sort of key mash with the left hands and you get a whole bunch of different programs coming out of it. 38:47.000 --> 38:59.000 So I already have 81 different versions of this and I can run them and when the program runs it runs every single variation of this. 38:59.000 --> 39:14.000 And then if you want to lock down the meaning somewhat more, you can put brackets around it which make it more specific because the brackets only go around parameters, not around the commands and this gives you a little bit more control. 39:15.000 --> 39:22.000 So that's pretty much what I have and I am ready to open this up to your questions. 39:22.000 --> 39:25.000 Let me put my contact info up here for you all. 39:25.000 --> 39:27.000 That's for my mailing list, the big QR code. 39:27.000 --> 39:29.000 Thanks everybody. 39:29.000 --> 39:43.000 So we are super lucky because we have ten minutes left for questions and now you will torture me. 39:43.000 --> 39:44.000 Please raise your hand. 39:44.000 --> 39:48.000 I will try to run as fast as possible to you because we are unfucking it. 39:48.000 --> 39:50.000 I start there. 39:59.000 --> 40:04.000 Hello. 40:04.000 --> 40:22.000 Thanks. 40:22.000 --> 40:28.000 So have you or other. 40:28.000 --> 40:35.000 Have you or other as a longer creator been contacted by video games developers? 40:35.000 --> 40:41.000 Because there are some video games that try to hide secret languages in image in music. 40:41.000 --> 40:47.000 Some are very creative like tunic that creates a language with a music and everything. 40:47.000 --> 40:50.000 And that would be incredible. 40:50.000 --> 41:01.000 If in the game there was hidden elements that were programming language, people would have their mind blown trying to figure out the syntax and finding it. 41:01.000 --> 41:05.000 Okay, so I got parts of that question. 41:05.000 --> 41:12.000 So I have not worked on video game systems but there is something very much. 41:12.000 --> 41:18.000 The sort of puzzle nature of a lot of these languages does feel a lot like a kind of gaming. 41:18.000 --> 41:19.000 I think a lot of it. 41:19.000 --> 41:24.000 There's a big crossover between the sort of. 41:24.000 --> 41:30.000 The sort of hacker play and SLangs and in video games. 41:30.000 --> 41:33.000 And you said something about music. 41:34.000 --> 41:41.000 There are a number of SLangs that use. 41:41.000 --> 41:44.000 Images and that sort of thing to produce code. 41:44.000 --> 41:49.000 I do have a programming language that you write with music. 41:49.000 --> 41:53.000 Which. 41:53.000 --> 41:56.000 If this comes back up. 41:56.000 --> 42:18.000 So this is an asling of mine. 42:18.000 --> 42:20.000 It's trying to load. 42:20.000 --> 42:21.000 There goes. 42:21.000 --> 42:27.000 That you write by whistling code to the computer. 42:27.000 --> 42:31.000 So it's usually hard for me to whistle after talking for half an hour. 42:31.000 --> 42:37.000 But I can I can try to see if I can produce some code here. 42:37.000 --> 42:49.000 There we go. 42:49.000 --> 42:51.000 I have the beginning of something happening here. 42:51.000 --> 42:53.000 I see able to set the route. 42:53.000 --> 42:54.000 I'm starting a. 42:54.000 --> 43:02.000 That statement here. 43:02.000 --> 43:04.000 Okay, syntax error. 43:04.000 --> 43:05.000 Sorry. 43:05.000 --> 43:15.000 Okay. 43:15.000 --> 43:17.000 I'll leave that for you to try at home. 43:17.000 --> 43:19.000 Next question, please. 43:19.000 --> 43:21.000 Name and shame. 43:21.000 --> 43:26.000 What real language would you classify as an SLang? 43:26.000 --> 43:28.000 Real language. 43:28.000 --> 43:30.000 I don't know, love you. 43:30.000 --> 43:36.000 So I'm definitely not somebody to discourage people from using SLang's in production. 43:36.000 --> 43:46.000 But so the question is really about language is that sort of cross that line between sort of why general use that feel asceteric. 43:46.000 --> 43:49.000 I mean, the kind of famous example is Pearl. 43:49.000 --> 43:57.000 A lot of people consider regular expressions in general and Pearl as asceteric. 43:57.000 --> 44:03.000 But you know, for me, for me, it's really JavaScript. 44:03.000 --> 44:10.000 You know, I think that like, you know, there's already dialects of JavaScript. 44:10.000 --> 44:14.000 I don't know if people have heard of Jay as fuck. 44:14.000 --> 44:23.000 This was created by Martin Clappy who realized that you could write valid JavaScript using just six punctuation signs. 44:23.000 --> 44:28.000 And this is a way of this whole thing translates to overt one. 44:28.000 --> 44:35.000 It really comes from basically creating truth values and adding to them to create numbers, 44:35.000 --> 44:41.000 could bring them into strings and so on, that you can basically reproduce all of JavaScript this way. 44:41.000 --> 44:46.000 And what was sort of amazing, so this is more of a asceteric dialects, I guess, of JavaScript. 44:46.000 --> 44:52.000 I also have a couple of my own asceteric JavaScript dialects in the book. 44:52.000 --> 45:02.000 But I think Jay as fuck is really one of the things about this language is that while he created it for sort of a kind of creative play. 45:02.000 --> 45:11.000 For a little while people were using this to get around malware filters until they started checking for Jay as fuck. 45:11.000 --> 45:18.000 So yeah, anyway, this is sort of, yeah, I would put JavaScript as the top of my list. 45:18.000 --> 45:24.000 One, two, three. After this we just take another two questions. 45:24.000 --> 45:31.000 How did you get so into this? How did you get so into this? How did I get into this? 45:31.000 --> 45:37.000 Yeah, so basically I was working as a programmer. 45:37.000 --> 45:47.000 The first thing that I saw that really drew me into this was when I read a paper that showed that mind sweeper was turning complete. 45:47.000 --> 46:06.000 And I became very curious about that, and I started that I found Pete, and I made sort of an answer language to it, which was the original version of the loto, which is not involving whistling, but MIDI files, sort of a musical version of Pete, where you write code as notes. 46:06.000 --> 46:15.000 And I was doing this for fun, then I went to art school for photography, and when I got there, I realized, oh wait a minute, this thing I've been doing for fun is we can think of this as an art context. 46:15.000 --> 46:26.000 Maybe this is what I'm more excited about, and so that's when I started the interview series. 46:27.000 --> 46:38.000 Do you notice that as these SL lines evolve, they've come from brain folk or something, and they eventually kind of fork off into their own dialects and things? 46:38.000 --> 46:49.000 Do you find it similar to human linguistics, how these lines would just change over time, or how they kind of are built off one another? 46:49.000 --> 46:55.000 Does somebody kind of repeat that question for me? I'm sorry, it's very hard to hear it down here. 46:55.000 --> 46:57.000 Is something about linguistics? 46:57.000 --> 47:11.000 Yeah, so do you see how these SL lines kind of evolve from one another? Does it kind of look similar to how human linguistics works, where languages kind of diverge and build on top one other? 47:11.000 --> 47:24.000 So there's something about languages diverging and linguistics. So one thing I want to say, we have with AI prompting right now, right? We have this sort of weird collision of natural language and code. 47:24.000 --> 47:39.000 But that's not the only way to bring those two things together, and there are a lot of SL lines that sort of explore the connection between natural language and code and try to bring it in other ways that sort of invite more ambiguity. 47:40.000 --> 47:57.000 There is a language called Prasa, which uses a South Indian language. It doesn't use the language itself. You actually write it in English, but uses the rhythm of the Southern language and how it plays off that rhythm is the way that code is written. 47:58.000 --> 48:15.000 And then there is a language called Love Language by a student at Carnegie Mellon where you can write sentences in English and the syntactic breakdown of the sentence. The syntax tree gets turned into brain fuck. 48:15.000 --> 48:26.000 So it's actually using linguistics that way. So there's people are finding more sort of interesting ways to bring those two things together. 48:26.000 --> 48:40.000 And it's something that I sort of explore quite a bit in the book, which is sort of interesting because the book kind of came out right before the AI prompting became such a huge thing. And in some ways feels like an answer to that, even though it was written sort of before a lot of that was happening. 48:40.000 --> 48:44.000 So hopefully that answered your question. 48:44.000 --> 48:50.000 So, and with that, thank you so much, Daniel. Give him another round of applause. Thanks.