 OK, can everyone hear me now? That's a little bit better, I think. OK, well, I want to thank everyone for coming. I don't really want to thank JSFoo for having me. There are a lot of really cutting edge progressive talks here. We have talks about progressive web apps and web components and people from very impressive companies like Google. This talk, you know, all those talks, those have like cutting edge information. You're probably going to be able to take home and use in your work or use in your personal projects. My talk, I'm not so sure. So on that third column where you check off whether you're going to use in your work, you can already just check a one right there. I don't mind, I won't be offended. So anyway, my name is George Mandus. Like they said, I am from Portland, Oregon. I am from Portland, Oregon, the US. I'm a freelance web developer. I've been doing it for over a decade now. One of the earlier slides during the first talk, they sort of showed the evolution of front end development. It kind of made me cry on some level, because I remember each one of those stages so well. And there's still a lot of pain involved in learning all that. It feels like a very long time, some days. Before I do all that, yeah. So I'm here today to talk about three things, sort of. Primarily JavaScript, MIDI, and tiny computers. And I'll get into what all these things are a little bit later here. So let's go through these. Some fun facts. I think it's nice to sort of humanize developers a little bit. You may or may not remember some of the things I say, but if I say a couple funny things up here, you might remember that. And then you might remember something else I said right after it. And so I kind of use it as a way to help people learn things or maybe help take away something from my talks. This is my first time in India. It's a fact. I don't know how fun that actually is for you. It's fun for me. I lived as a digital nomad in 18 different countries for over a year. It was kind of an interesting story, like to throw that up there. I was born in Saudi Arabia, which is a long story, kind of interesting. I forgot I put that on the bio, but I once unintentionally cheated while running a marathon in North Korea. I cannot advocate cheating in general, but if you're going to do it, I would suggest picking a more lenient country. My most known project is a really frivolous one called KonamiJS. I always ask, has anyone heard of it? I'm curious. Are there any hands? OK, I see like five hands. It's like maybe what I expected. And I'm guessing you found it because you googled my name, because you saw that I was talking. You wondered who I was, maybe, but that's OK. It's a really frivolous Easter egg project. I started over a year ago. I don't know, I'm sorry, almost 10 years ago. My claim to fame with that project is for about five minutes I crashed Marvel.com, because they were using it, and I pushed some changes to GitHub, and they were linking directly to the file. And Newsweek decided to use it to make all of the articles on their website turn into articles about zombie attacks and other weird things. Like I said, it was a very frivolous piece of open source software, and I'm kind of proud that my most known contribution is really pretty silly. And so in keeping with that, I'm going to talk about more silly things with MIDI today. So I'd like to start with an experiment here. So I'm going to pull up a website. And if there's anyone out there with a laptop, maybe a few people, feel free to pull up this website. I'm going to wait a moment. I have a lot of demos I've learned over the course of giving this talk. I probably have too many demos. So I may skip a couple as we go down the line, but if you are interested in this stuff, if you think it's fun, you want to see more and talk more about it, come meet me downstairs later, and I can show you some of the demos I'll probably end up skipping over. OK, so hopefully a couple of people have had a moment to get there. I say, OK, I see four people who joined so far. That's probably enough. So make sure your audio's up. I want to do just a little interactive demo here to start, just to see how things go. And this has been occasionally hit and miss, but let's see how it goes. So let's see how it goes. Oh, who's that? Could you raise your hand? Oh, there we go. There we go. Yeah, so what's happening now is I'm playing on a little keyboard up here on my stage, which just in case you want to see what my stage looks like right now, it's kind of a mess of many things here. And what happens is every time I play a new note, it comes out on a different computer out here in the audience using WebRTC. OK, here we go. Oh, and now that I've got 71 of you in here, I think I could actually play some chords. Anyway, I just like to start up something kind of fun. Well, that one went pretty well. I think it's just fun sometimes to, before you delve into the code or even instead of delving into the code these things, it's just sort of fun to sell the fun outside of the box interesting things you can do with these things that we're talking about. OK, so I have one more interactive demo. Let's see how this goes. You kind of know the drill by now. There's the website. So it's a little bit different. And I'll try to rush through this here. Hope we've had a chance to see the domain and type it in. So once you get there, you should see a little page. Just join the symphony. Go ahead and click on that button. It'll look different than my screen. This one I'm a little less optimistic about working at the moment just because I'm noticing my web font isn't loading. So something might be a little, you know what? That's one you can come back to then. Oh, oh, and grok shut down. That'll do it. OK, well, let's move on. OK, so like I said, today we're talking about three things. We're talking about JavaScript. Obviously, it's a JavaScript conference. We're talking about tiny computers. And what I mean by tiny computers are things like arduinos and raspberry pies, aspirinos, basically single board computers and single board microcontrollers. A quick show of hands. How many of you have played around with any of these? Like arduinos and things like that. OK, so maybe close to half or third to 40%, I can't say. Really mad at judging crowd, pants. And lastly, MIDI. I'm curious, how many people are familiar with MIDI and think they know what it is? Your hands. And how many of the same people have put up their hands on musicians? They're pretty good at overlapping, but not everybody. OK. So we're talking about these three things. And the reason I like these is, in combination, you can make some really fun kind of outside of the box things using JavaScript tiny computers and a really old protocol called MIDI. I'm going to get into that here. So why JavaScript? I don't really have to spend a lot of time on this, but JavaScript is everywhere. It's on the client side, it's on the server side. You can use it for everything. The aspirino, like I talked about earlier, is you can actually write JavaScript that runs on the hardware directly. It's a really cool, pretty thing. Basically, JavaScript is literally just about anywhere you can think of when it comes to computers and programming. And yeah, like I said, it's basically everywhere. It's also where the people are. There are so many JavaScript conferences and so many projects. And there was a joke earlier about you go to NPM, you type in the words thinking, looking for the package you think you know that you want and you get like 64 suggestions and you have to figure out which one you want to use. There's just so much traction in the JavaScript community. It's just a really good place to be right now. The asynchronous nature of JavaScript is a really good fit with MIDI. So I'm gonna talk about what the MIDI protocol actually is. But MIDI is also an asynchronous, well, it's an asynchronous protocol and it's asynchronous nature makes working with it in JavaScript really easy. It's very familiar and is like almost any other sort of web-based or any browser API you might think of. So why tiny computers? To be perfectly honest, I probably could have done this talk without that but I just think they're so cool. I think they're a lot of fun. They also kind of remind me of sort of the hardware answer to the open source movement in some ways or something just very freeing about being able to buy a computer and to own the entire thing and be able to put things on it. In this day of like serverless technologies and cloud computing, it's like for all the wonderful, beautiful things that those can bring, they're kind of owned by three big companies at the end of the day and it's kind of nice to do something that's a little bit removed from anyone else's jurisdiction I think. And just for those who don't know, we have a Raspberry Pi and Arduino chip computer. Is anyone familiar with chip? I'm curious. Yeah, they're not as popular but I think they're really fantastic. I really recommend looking into them. Oh, and by the way, at the end I have a website that has links to a lot of the stuff so don't worry too much about tracking what I'm saying. And lastly at the bottom I have an Esparino. So this little clicker that I'm using is actually an Esparino. It's a, hey, it's a tiny computer that I programmed to operate as a MIDI controller and I'm using it to control my slides right now. I can go forward, I can go back and if I don't feel like there's enough pause, I can do this and I get a little bit of a pause. I have to make myself laugh sometimes. Okay, so more outside of the box and interesting so far. So why MIDI? What is MIDI? MIDI, well it's an acronym. It stands for Musical Instrument Device Interface. That's kind of opaque, I mean sort of. It's a protocol invented in 1983. That's the other thing I think is really interesting about playing with JavaScript in MIDI. It's a very old protocol that works with the latest technology that we're using and it's funny how nicely they talk together and it's funny how I would say there are more interesting things you can do with MIDI now than you necessarily could say 10 years ago. Or you should say it's easier to do those interesting things now. And it's just funny how technology has a way of being a little bit cyclical. We like to reinvent wheels, old things become new. And MIDI is just kind of a funny outlier that sort of struck a chord with me when I was thinking about that. It's also a standard. It's actually, as I'll get into in a minute, there are certain companies and bodies that maintain what the MIDI standards should be. And I just think it's an interesting parallel with our own industry with what W3C standards and other open standards and how those are decided and dictated. It's kind of similar. It's also a file format. And I feel like this is probably where most people are familiar with it. I think if you were, depending on your age, if you're growing up in the 90s or early 2000s, like if you were on the internet in the days before MP3s made streaming audio very easy, you might have downloaded really chintzy sounding MIDI files like this. Or this. I won't play all these, I'll take two more. But, and I, you know, at least between a lot, with a lot of people I know, this sort of these chintzy fake instruments sort of became synonymous with, oh yeah, MIDI. That's MIDI, right? MIDI is that sort of cheap sounding music. And I mean, it's not 100% wrong, but it's funny how that, you know, that's synonym. Because the file format, the standard and the protocol are all just called MIDI. There's a lot of confusion surrounding like what exactly that means. And it's definitely not this either. I think all of these came with like Windows 95 back in the day, but I'm not sure. All right, this one definitely is actually. Okay. So, talking a little bit about sort of what MIDI is, it's a lot of different things. MIDI, the protocol, this is, it is what allows electronic musical instruments like keyboards to talk to other electronic musical instruments and computers. They describe common things you might associate with a musical performance like, is this note on? Is this note off? You know, is this note being bent in a particular way? And a bunch of other sort of musical things. Yeah, it's, you know, this was all back in the days before, I mean, the first MIDI instruments were communicating like sort of directly with one another and not necessarily with computers like we would today. And so it's really interesting to see how they came up with this protocol that still works like very well. There's MIDI the standard, like I said, it's maintained by a body, similar to other open standards. And there's MIDI the file format, like I said. And all that really does is describe a sequence of MIDI events. Like I said, the notes that are on and the notes that are off, things like that. I always think of a piano roll kind of like this. When I think of a MIDI file and how that works, I just threw that in there. And at the last conference I gave this talk at, on stage, you know, I feel like Guitar Hero is probably a much more modern example for what I was trying to convey here. Anyway, okay. So again, why am I talking about MIDI in this talk? MIDI is asynchronous like JavaScript. It talks to hardware, which is interesting. That opens up a world of interesting possibilities and the ability to hack on and create interesting things. And it's incredibly easy to use, as we'll see. Oh, the other thing that's really interesting. So JavaScript can talk to MIDI via node. There's a lot of MPM packages and things. But the thing that really piqued my curiosity in all this was when Chrome shipped a couple years ago with MIDI support, you can plug a MIDI capable device into your computer and Chrome will see it. And you can start interacting with JavaScript with that MIDI device without any crazy extensions or plugins or any other like, you know, witchcraft. It just kind of works out of the box. Like I could take these MIDI controllers and plug them into all of your computers out there and we could start hacking on it and making interesting hardware, JavaScript, collaborative things. And so by extension, like I said, so does Chrome OS, Chromium and Electron, which is really interesting if you want to make a standalone piece of software that operates with a piece of hardware that maybe speaks MIDI. And I was curious the other day and I looked at can I use to see what browsers support it and it's really only Chrome. But I guess technically we have 59% global coverage which is a lot better than I would have guessed. Not that I expect to use that information for anything. Okay, so when I'm talking about MIDI controllers, we're talking about like the things I have up here on the podium like I showed you a moment ago. So there's pre-existing USB ready controllers. You can actually buy controllers and keyboards and things from the mid-80s and buy an adapter and plug them into your computer and start talking with hardware that was invented before. Probably some of you were born, honestly. And you can even build your own, giving back to the tiny computers. I have, I don't have it up here, but I can show you downstairs if you're curious. I've built a little MIDI controller using an out-of-fruit Arduino-based sort of a thing and the possibilities for just creative things you can build really open up when you start dabbling with actually making your own hardware and getting it to talk to the web. And here's some photos of some of these things I was talking about. I've actually got this one up on stage. I've got this one down by my feet. I don't bring that one because it's heavy. Let's see. Oh, and yeah, so, you know, so far I've mostly talked about things like keyboards, like things that have buttons, but what's also interesting is there's like, you know, other types of sort of outside of the box controllers out there, like this one is a breath controller. It kind of looks like a flute or some sort of wind instrument, but it's able to detect how hard you bite on it, how hard you blow into it. This one I also have up here, it's an accelerometer that translates the accelerometer signals into MIDI signals that the browser can interpret and then start doing things with. So there's just a lot of different ways to like interact with the physical world once you start delving into the different kinds of hardware that's out there. And then this guy, this guy was like, does anyone know who Future Man is? I'm curious. We have one Baylor Fluck fan in the audience. I see, yeah. Anyway, he built his own MIDI controller like in the 80s and was way out of his time and was kind of out there. And I just, I just want to throw that in there. Like I said, you can build your own. This is a video I shot at home of a MIDI controller that I didn't build, but someone else built using Arduino and I was experimenting with it a little bit, doing an interactive website and hardware demo here. There's no extra plugins or anything. I just plugged it to Chrome. I wrote a couple of really, you know, simple lines of code and I made this, this kind of fun interactive thing. Sadly, I dropped this one and it broke so I haven't been able to take it around. So let's talk about what a MIDI message entails. It's, at the end of the day, you get three numbers. You get three bytes and you have only two types of messages within those bytes. You have one called a status byte, which is supposed to tell the controller what kind of a message we're sending. Like is it a note that is on, is a note that is off, is it something called a control change, which is a sort of reserved word for a different type of interaction. On the other two, tell you what sort of data to associate with that type of message. You know, I have links to websites to explain this more in depth. You probably don't want to do this. You probably just want to see some of the demos and some of the code samples to get a little more inspired by like what we can do with this. So I'll skip through a couple of these. Really, what all this boils down to is that we get three numbers in an array kind of like this. And although the MIDI standard sort of dictates what those messages are supposed to mean, like this one, for example, is supposed to be, it's supposed to tell me that a particular note is pressed on on this keyboard, like I think G maybe. You know, that standard, at the end of the day, it's just three numbers and it can mean anything you want. And so if you want to start using MIDI hardware to create your own contraptions, all you have to keep track of is, hey, you know, when I hit this button, it gives me these three numbers. If I send these three numbers back at the controller, it reacts this way and so on and so forth. Okay, so what does it actually look like? If you're using Chrome, you may be familiar with this. You can, you know, if you want to make a webpage that requests a location or wants to use the webcam or send notifications, you have to ask the user for permission. MIDI is kind of similar. It's kind of a funny one. It probably never pops up because there are not many, you know, websites asking you for MIDI access when you arrive for the most part. But if you, you know, pull up any website, look at it right now, you should see it at the bottom. And asking for requests to the MIDI access object looks more or less the same as it would to ask access to the geolocation API or something like that. You know, you ask for access. If it gives you access, you give it a function to run. If it successfully gives a function to run, if it fails, and then there are a few other sort of specialized aspects of the API to handle messages as they're sent back and forth between your device and the page that you have set up. I have some examples here of iterating through a bunch of, like up here on stage, I have one, two, three, four, five, six, seven MIDI controllers, I think, plugged into my computer right now. And so this is just a tiny example of how I have a little function or a little loop that iterates through all of the available controllers, looks at them by name and maps them to particular places so that I'm not, you know, down the line looking at, like, what was MIDI controller one? What was MIDI controller two? I really don't remember. Is it this little clicky thing in my hand or is it the keyboard? I can't remember. And then, you know, handling a message. Like I said, you just get an array that has three numbers. There's some other event data that comes with it, but the three numbers and the data are really the only thing that are important towards interacting with it. And yeah, so there are some existing libraries that make working with it a little bit more easily, especially if you want to work with it in a purely musical context. Like I said, there are links to this on the website I have at the end, but WebMiddy.js does a very good job of, you know, helping you write code that more clearly describes, hey, we're listening for a note that is going to be played. We want to send a note to this device. Whereas the built-in WebMiddy API has more sort of opaque methods when it comes to interacting in that way. So here we have some, oh yeah, midiutils.js is a good utility for taking these MIDI messages and converting them to notes and frequencies if we want to, again, create a more musical interactive kind of experience with our MIDI controllers. And that's not it for the presentation. That's it for talking about midi. And so quick, we mostly talked in these demos about the client side. I'll touch real briefly on the server side. It's very similar. The only difference is we don't really have to request permission. Latency can be more of an issue depending on how you're trying to use midi. I could talk more about that downstairs if you're curious. Working with midi files is much, much easier. Some of the front-end libraries that I just went through WebMiddy and midiutils.js will also work on the server side, which is very nice. And you can do more interesting system-level things. One of the interesting things I'm playing with right now is you can actually create virtual midi instruments on your machine using Node. And when you create a virtual midi instrument in one instance of Node, you can fire up another one and it'll see that midi instrument and you can start sending messages back and forth. And I've yet to think of a good outside-of-the-box way to use this, but I'm open to suggestions. We can talk about it more later. Yeah, and there's just an example of the server side JavaScript and using midi on the server side. Using a MPM package called appropriately enough midi. We listen for input from the midi object when we get a message, we log it to the screen. I don't know if you can read that, but I just put parenthetically or commented out an example of the array that it usually spits out. Okay, so now it's demo time. Let me show you a bunch of the interesting things I made and why I think this is a really good platform for creative computing and creating sort of hardware JavaScript hybrids and thinking about user interfaces in a way even outside of the computer that might be fun. So one of the things, well, I'll skip that one actually, that was not as much fun, this one's more fun. No, no, I gotta do it, I feel, I gotta do it. Okay, so this piece of, this little page that I threw together, it is, all it is doing is finding all of the midi controllers that I have plugged into my system right now and it is listening for messages and it is spitting out the numbers that it sees when messages are sent from this controller. So if I start playing notes on my keyboard, it's telling me, okay, when I push this button down, I get those three numbers from my nano key to keyboard controller. If I push this button over here, I get those three numbers from my launchpad MK2 controller and when I release, I notice I get another number that, that third number sort of changes between zero and 127. And the whole reason I'm demoing this is sometimes if you delve into the world of building your own controllers or buying controllers off of like Aliexpress, like I like to do, the company no documentation, you have to learn how those controllers are built and how they work. And so this can be a good way to just sort of explore how the controller is set up and what messages get sent when you hit different buttons. Okay, so here's a quick musical example again. You know, we basically just did this in a more fun interactive way, but all I'm doing is playing this keyboard up here. You know, pretty easy. You can find a lot of different MIDI WebSynth demos out there. Under the hood, we're using the WebMini.js library I talked about, the MIDIUtils.js library and Pizzicato to actually generate the sine waves. There's more fun with Web Audio here. I'm using a different controller here to trigger sounds and let's see, there we go. So all I did was trigger sound, obviously. And now, if I turn these knobs, I can alter the pitch, I can alter the time. I'm playing with different aspects of Web Audio which is a fun thing unto itself and worthy of a talk. You know, and that's just one example of a sort of audio-based demo here. Interactive piano recital is the thing I started at the top of the talk with. This one, which I will show people downstairs if they are interested. And so, okay, let's look at the things that are not musical. I should have enough time to get through a fair number of these now and then take a few questions, I hope. So one of the interesting things I've tried to build is ways to interact with different like CSS3 properties and things like that. Here is something, let's see. This is just a basic color mixer, let's see. Ah, there we go, okay. And so using the knobs and the same control I showed you here, I can mix different component, I can mix different levels of red, green, and blue to use it kind of like a color mixer. I don't know if it's the most practical sort of thing, but it's kind of a fun, interesting way to play with this. See if I can get a little bit of green in there. There we go. Again, under the hood, I'm using Web MIDI JS again on this because I just felt like it for some reason and I saw a library called TinyColorJS to mix the colors and things. This is an interesting one I made a long time ago. I called it my interactive poetry box. And so the easiest way is just to demo it. All it's doing is it's creating random poems using existing texts from Gutenberg, the Gutenberg project, and open source video from archive.org and also random audio snippets from audio.org to sort of create a mash of these different things. And this was actually the project I made this a few years ago for a band I was playing in. We wanted some interactive visuals behind us while we played. And so I just came up with this idea. I realized, oh hey, I could use these MIDI signals. I don't have to use them for music. I could use them for something interactive and kind of interesting. So I made this. And all I'm doing, you can't really see it, I realized from down here, but I have three little buttons on the stage I can step on. And when I step on them, it triggers just different aspects of this page I made. So when I hit this button, it gives me a different randomly generated poem, which sometimes they seem kind of profound and sometimes they really don't. And if I hit this middle one, we should get a random video playing in the background. There we go. And if I hit this third button, okay. And so what you get is sort of this really interesting, interactive kind of art project, just using MIDI to trigger different things on a web page that I threw together. And this project was actually kind of an impetus for 5.0. There's probably a lot more interesting stuff that we could do like with MIDI and JavaScript out there. I'll close this and kind of sail through here. If you want to know how I made the random poems and things, we can talk more about it later. It was kind of an interesting conversation. Okay, a quick show of hands. Who's seen the movie, The Goonies? Okay, there's a few more that I expected. I might actually skip this one just because of that. I'll skip through to the next one here. For those who are not familiar with the movie, it's a really, it's an old movie from the 80s. A lot of people my age growing up in the US probably saw it. And there's a scene in the movie where the kids who are trying to escape these bad guys come across an organ that is made out of bones and they have to play the music correctly in order to open a gate so they can keep going through this place that they're trapped in. And I was looking into microcontrollers in JavaScript and MIDI and I realized, hey, with a couple of servos and stepper motors, we can actually build that thing. And that would be sort of a fun project. And I made sort of a fake version of it here. And I'm gonna skip it though for now because it's not as interesting if you don't know the movie, to be honest. So let's move on. Okay, this is what I was talking about. So here is an example of a bunch of microcontrollers hooked up to servos and motors. And this guy, the plane? No, it's not a plane. This guy is using a MIDI controller to trigger the servos and have them turn. So what I want to build basically is a fake organ that could eventually open up a door or something else kind of interactive and strange. CSS filters, I showed you the one where we're mixing colors earlier. I also did one where we can play with different CSS three filters, which is kind of fun. What's sort of fun about this context is I can mix multiple filters at the same time just to sort of see how they all look in combination. Again, it's not super practical, but it's a way to sort of try something new and outside of the box and use your brain in a slightly different way. Someone pointed out to me that this could be a very cheap and sort of ineffective alternative to the Microsoft dial. And I, you know, I suppose it could be. Drawing a simple image. So this is a pretty simple one. I have something up here called a launch pad. You can sort of see. And so I can just click it right now and sort of light up these buttons like so. Try to launch the page. Anyway, there we go. And so now I can sort of use the launch pad as a way to draw simple pictures. If I had a larger one, I think it'd be a fun way to like draw like a favicon or something like that. Oh, this one's a little more interesting. So this one's actually using the accelerometer controller I talked about at the top. Turn it on though. That's more helpful. There we go. And so this little guy, now if I move it, I get the X, Y and Z axis Cs are mapped to the red, green and blue values of the colors. And I thought this is just kind of an abstract way to maybe, you know, mix colors or make some sort of interesting demo. You can also change it to HSL, let's see. Yeah, so now I'm in HSL mode. And that's a little more interesting because if you keep it level, it's perfectly white. If you move it up, we get sort of a red color. Down we get that same red or a different sort of red. Oh, and this is a twist on that same idea where, let's see. I'm gonna go, I'm gonna go two more minutes and then I can take some questions here. Actually, let me skip. Well, let's see. Yeah, I'll skip forward here. This one, so my mind always turns to games when I'm trying to think of new ways to explore things and just make them interesting for myself and other people. And so I made this recreation of a whack-a-mole game like I remember playing as a kid using this guy right here. So I've mapped these different pads to the different moles that pop up on the screen here. And when they show up, I always have to remember which one this is. When they show up, I can try to hit them. Anyway, but because the pads are also velocity sensitive, you can factor in different components to the game. It's kind of an interesting, fun way to reuse these controllers. One of the first programs I made as a kid was an interactive ball that bounced on the screen. I remember doing that when I was about 10 years old and like quick basic or something like that. And so it dawned on me that might be a good sort of first program to try to use for one of these MIDI controllers to create a new sort of interactive thing. And so, let's see. So I hit this button here. It's sort of, it's funny. This has sort of become like my personal hello world to like learning a new language, particularly one with a visual component. I like to just make a ball bounce on the screen. It's a good way to sort of learn how to do something already familiar with how to do, but in a new sort of paradigm. Skip that one for now. I have to skip that one too, I'm afraid. And the last one I'm gonna show you that's sort of interesting is, who's familiar with the game Go? Are there any Go players here? Okay, good number. This is like a good sort of like developer Go overlap I've noticed most of the time. And so I was trying to think of a way to repurpose this eight by eight board that I have up here. And although it's a little bit small, I found I was able to recreate a game of Go. And in combination with one of these tiny computers, one of the things I have at home is a self-contained and very impractical Go board with a tiny computer which I can connect to a battery and then connect to this controller up here and you can play a game of Go. So I'll play for a couple minutes or a second year on the screen just to sort of demonstrate what I'd say. I'm also terrible at Go, just so you know. Anyway, so I just wanted to demonstrate this. This is another sort of outside the box application of MIDI and JavaScript here. So I've sort of reached the end of the talk. This is an installation up sort of near where I live in Seattle, Washington. It's outside a museum called the Experience Music Project. And what they've done is they've taken giant girders and billiard balls and steel cables and created this sort of beautiful like interactive musical thing that you can play. And it's really, you know, it sounds beautiful and it looks beautiful. And I just kind of thought to put this up here. Oh, I turned my sound down, that's right. Anyway, I thought to put this up here because it sort of made me think, you know, what they've done there is they've repurposed non-musical things to create this beautiful musical installation. And what I'm trying to show here is that we can take something that is originally just a tool for communicating about music and repurpose it to do all kinds of interesting things with JavaScript and hardware and create unusual interfaces in creative ways. Thank you. That's the end of my talk. I'm happy to take a few questions. We have some time for questions. Have you heard of what? I'm sorry? More questions. Yes, and I've seen that one and yeah, yeah. More questions? Yeah, at the back. Is there someone? Question there? What you showed is really awesome and almost freaking. I have a question. Do you get any industry-level projects with this API implemented? Do I get any what for this API? Industry-level project or any industry-level implementation? Industry-level projects, that's what you asked about. Any entry-level projects? Industry-level projects. Industry-level projects. I do not personally, but if you'd like to work on one, I'd be happy to talk to you. Shantika. Thank you. Sure. So, MIDI is a really old protocol, right? Right. Can you hold it closer? So it's a really old protocol back from 1983 and it used to work on old phones which had less space and they needed ringtones. So does it solve any practical purposes even today and does it solve any problems? It's still very effective for communicating musical signals and it's still very effective for musical applications. Are there any bands that just release on MIDI? Are there any what? I'm sorry? Are there any bands that just release their albums in MIDI or something like that? Bands that have adopted MIDI? I mean, honestly, any electronic music, any electronic musician working today has probably adopted MIDI. I will say, I just thought of an example to answer your question. There is an old game from the mid to late 80s, an old computer game that used MIDI across a network to communicate with other, it was like an old Atari game or something like that and it would use MIDI to communicate two player games because they didn't have any other way to network and so that's, I mean, that's kind of an interesting. I'm really eager to get to lunch but if you could leave silently, that would be very polite. Thank you. Yeah, any more questions? Hey. Hi. So how broad is the spectrum of MIDI? Like I'm trying to understand, sir, there's of course the sounds that we can hear as humans, right? Sure, right. Does MIDI also go beyond things that we can't really hear? MIDI does not actually by itself dictate the frequency necessarily. I mean, the MIDI standard suggests that, oh, when these numbers are thrown out there, that should be this note on a piano, right? So there is a MIDI signal for the highest note on a piano but there's nothing that would stop you from writing a program that, for example, took a keyboard and moved everything up into a spectrum that humans could not hear. So you could make like a symphony for dogs or something if you wanted. I'm wondering if this is a good data transfer protocol which happens silently. It's like in transfer data, I can send a text to you on your phone with music that we can't hear but probably our microphone can still catch. I think there could be an interesting application there. I mean, what you're delving into at that point really if you want to stay in the web-based world, we're delving into web audio and we just have to generate frequencies that are in that register and then we have to set up a microphone to listen to it but you could use MIDI to describe a sequence of frequencies, like describe a message, like it could be a good protocol for that. Maybe. One last question we have. So this is pretty fascinating. So I assume I want to get a bunch of hardware for it and then maybe look up some code and get started. Where do you point into it? Yeah, I tell you, if you go to my website, I have a lot of links to that and if you want to talk to me downstairs, I can make some more suggestions because I have a lot of things I need to fix up there. Perfect, perfect. Cool. Okay, sounds good. Thank you, George. Thank you.