[00:00.000 --> 00:12.720] Great pleasure to be here. Can you all hear me at the back? Can you? Yeah, thank you. [00:12.720 --> 00:17.400] Yeah, wow. What was them? Thank you to the organizers and for the staff for inviting [00:17.400 --> 00:23.920] me here. It's a great pleasure to be here. And yeah, if you asked me a year ago, would [00:23.920 --> 00:29.800] I be here? I'd be like, no, because I hadn't actually heard of FOS. Apologies at that point. [00:29.800 --> 00:34.200] If I'd be told that I'll be talking about Rose Garden, which is something I've not [00:34.200 --> 00:43.760] worked on myself for a very long time, not contributed to, I'd be doubly surprised. However, [00:43.760 --> 00:49.000] I think it's important to look back sometimes. And I've called this talk a slumbering, yeah, [00:49.000 --> 00:52.960] Rose Garden a slumbering giant. And I thought, I didn't really think when I was putting this [00:52.960 --> 00:56.200] submission in as well. So I thought a slumbering giant, that made sense to me at the time. Who [00:56.200 --> 01:02.840] knows what slumbering actually means? Okay, I should explain that, because I was thinking [01:02.840 --> 01:07.360] about maybe changing. So slumbering actually means not quite sleeping, but also not quite [01:07.360 --> 01:11.360] awake either. And it's kind of in relation to the fact that Rose Garden has been around [01:11.360 --> 01:16.440] for a very long time. Maybe just as a show of hands as well. How many people have used, [01:16.440 --> 01:23.400] okay, let's start off simply. How many people have used computers to make music? Okay, so [01:23.400 --> 01:27.200] we've got about 20 maybe. That's pretty good. Keep your hand up if you use Linux to make [01:27.200 --> 01:34.600] music. Okay, that's actually more, I think. That's weird. Okay. About the same maybe. [01:34.600 --> 01:40.160] So how many people have heard of Rose Garden? Okay, it's not bad. Not impressed. Okay, good, [01:40.160 --> 01:52.160] good stuff. So Rose Garden started actually longer than 20 years ago. Let me show you. [01:52.160 --> 01:59.160] So this is the kind of current Rose Garden. This is how it looks now. And if you're familiar [01:59.160 --> 02:06.480] with Linux, sorry, with music software, by the way, I've got a pointer. Can you see it? [02:06.480 --> 02:10.320] Yeah, it's cool. I usually just use it to torture cats, but this is the first time I've [02:10.320 --> 02:16.400] actually used it on a presentation. So yeah, if you're unfamiliar with digital audio work [02:16.400 --> 02:22.240] stations, I'll give you a little tour. So we have down here some instruments, and you [02:22.240 --> 02:27.120] can map to those tracks, and they're either MIDI tracks, which is musical instrument, [02:27.120 --> 02:32.600] digital interface tracks, or you can have audio tracks too. And this is how Rose Garden [02:32.600 --> 02:37.840] essentially works. It allows you to compose. It allows you to record into it from a digital [02:37.840 --> 02:52.120] instrument, or from an analog instrument, and then you can edit it on the screen. Just [02:52.120 --> 02:56.400] to go back to the beginning, the talk today as well is going to be about the history of [02:56.400 --> 03:02.760] Rose Garden. It's going to be about how I believe that good engineering practice could [03:02.760 --> 03:10.800] talk, is interesting talk, the last talk from Brian about using the latest tools and technology [03:10.800 --> 03:14.640] to understand how open source software can be better. So as part of this talk, I'm going [03:14.640 --> 03:19.120] to look at how Rose Garden was put together in the first place, and why I believe it's [03:19.120 --> 03:22.440] still around because of the way it was put together, and because of some of the design [03:22.440 --> 03:30.400] decisions that we made during the creation of it. Oh yeah, if I didn't mention, there's [03:30.400 --> 03:33.120] a QR code here. If you want to scan that, you can go to a page where there'll be some [03:33.120 --> 03:41.680] links. I'll also share this at the end. Rose Garden was really a kind of a labour of love. [03:41.680 --> 03:46.560] It was almost an accidental success, but it was kind of done deliberately in a way. That [03:46.560 --> 03:51.760] doesn't really make any sense, but Rose Garden came about originally from a university project. [03:51.760 --> 03:56.960] So it's actually a lot older than 20 years. It's almost 30 years old. In fact, it's over [03:56.960 --> 04:07.400] 20 years old. And then it became something of its own thing. So just diving back into [04:07.400 --> 04:12.760] how it looks these days again. So we've got a piano roll editor on one side and a notation [04:12.760 --> 04:15.520] editor on the other. And this was one of the great powers of the original Rose Garden, [04:15.520 --> 04:23.800] as well. It had both notation editing and MIDI editing too. And this is the current Rose [04:23.800 --> 04:29.040] Garden homepage where you can download it and you can see how often it's raced. So up here, [04:29.040 --> 04:36.880] you can see there was a release in December. The current maintainer, Ted, works very hard [04:36.880 --> 04:42.440] on these. And when I'm talking about the engineering processes that go behind it, you'll see towards [04:42.440 --> 04:46.560] the end of the presentation that there's a lot of manual work involved still. So some [04:46.560 --> 04:51.960] of the best practices that we get through our day jobs can actually help us understand [04:51.960 --> 05:00.760] how we can make software like this more maintainable and easier to release. It's not untypical [05:00.760 --> 05:10.280] as well for large and old software products like this to have quite slow release cycles. [05:10.280 --> 05:14.840] And typically, once it's released, it goes into the usual repositories where it can be [05:14.840 --> 05:24.040] created and packaged for download on various different distributions, Linux distributions. [05:24.040 --> 05:29.400] It's been translated into around 20 different languages, including Chinese, Japanese, Italian, [05:29.400 --> 05:42.400] Spanish, Finnish, German loads. And over the last 20 years, it's been downloaded all over [05:42.400 --> 05:49.880] the world, as you can imagine. And this is some stats. So interestingly enough, we're [05:49.880 --> 05:56.360] still on SourceForge. That's down to the developers having a certain way of looking at things. [05:56.360 --> 05:59.840] So SourceForge is the preferred way of looking at things for a lot of the developers because [05:59.840 --> 06:03.000] they've been involved in it for a long time. And perhaps they're a little bit behind the [06:03.000 --> 06:08.680] times. So they like to dig their heels in sometimes when it comes to what is acceptable [06:08.680 --> 06:13.320] in terms of the technology that is being used. So the good part about it is that we have [06:13.320 --> 06:18.440] all the stats from the beginning of time, basically, all the way to today on how many [06:18.440 --> 06:21.800] times it gets downloaded. And this is source packages only, essentially, as well. So it's [06:21.800 --> 06:29.000] not bad. I mean, its height, it was 5,000 source package downloads per month. And even [06:29.000 --> 06:33.880] with the last release, it was still around 2,000. So if you add that into the mix with [06:33.880 --> 06:40.080] all the pre-packaged stuff that happens for the distributions, then it's pretty tidy [06:40.080 --> 06:52.000] amount. So who am I and why am I here? So I worked on Rose Garden between 95 and 2004-2005. [06:52.000 --> 06:56.440] I'm now independent consultant. And I kind of specialized mainly in software delivery [06:56.440 --> 07:03.960] and customer focus. And that means that over the years, as a professional software engineer, [07:03.960 --> 07:07.560] I've learned various techniques which has helped me understand, OK, well, maybe we could [07:07.560 --> 07:13.200] do things slightly better. And I'd like to talk and write about this right now. And this [07:13.200 --> 07:23.880] is how this talk, I suppose, kind of came about because I was thinking, what is the [07:23.880 --> 07:28.320] project that gave me the most pleasure over these years? And when it comes down to it, [07:28.320 --> 07:36.080] undoubtedly Rose Garden was the thing. And some of the takeaways I believe that we can [07:36.080 --> 07:44.640] get from this is to understand how open-source software becomes important and how it stays [07:44.640 --> 07:59.160] important as a social enterprise. So this is really a story about motivation and why [07:59.160 --> 08:11.760] we do things the way we do. And how open-source software becomes something that can take [08:11.760 --> 08:17.880] over our lives as well. So just to expand on that a little bit, I've kind of broke [08:17.880 --> 08:22.880] it down to three areas, which I believe are the core components of how open-source kind [08:22.880 --> 08:29.640] of gets good, how open-source projects become a thing in the first place and how they then [08:29.640 --> 08:38.680] sustain themselves. And it's mainly, spoilers, mainly around the social exercise. We do it [08:38.680 --> 08:43.960] because we kind of want to. We're driven to do it. Of course, we do it as well because [08:43.960 --> 08:48.680] we can't do it by ourselves. So that's number one for me, is the effort that it takes to [08:48.680 --> 08:54.440] build something. So when you look at something like Rose Garden or any other huge open-source [08:54.440 --> 08:58.680] project, you end up with hundreds of thousands of lines of code and lots of contributors [08:58.680 --> 09:07.000] from all over the world doing various different things, either writing code themselves, becoming [09:07.000 --> 09:11.960] different, doing translations, helping out the website with documentation. And this is [09:11.960 --> 09:15.680] a snapshot from the Rose Garden website of the contributors that have been involved over [09:15.680 --> 09:31.800] the years. Secondly, you can't do it without effort, you can't do it without support. This [09:31.800 --> 09:40.920] is a picture of the time that's elapsed between when I stopped working on Rose Garden and [09:40.920 --> 09:47.400] pretty much today. This is my son, Sam. He was one when I took a photo of him and put [09:47.400 --> 09:58.600] him on this poster to kind of be used at one of the sound expos that we did in 2004. And [09:58.600 --> 10:05.360] this is him last year as he graduated from high school. And this was probably the reason [10:05.360 --> 10:13.800] why I stopped contributing to Rose Garden this time because I went off to have a family. [10:13.800 --> 10:20.240] And of course the family is important for support, so they have to keep you going, maintaining [10:20.240 --> 10:35.320] your energy to be able to do stuff. In addition to that, we also see how the working world [10:35.320 --> 11:02.680] comes into play, one second. So after university, I went into, sorry. It's out of the working [11:02.680 --> 11:08.320] world shape, our experience and our perception of what goes on in the open source land. So [11:08.320 --> 11:14.480] after university, basically after Rose Garden first came out, going into engineering and [11:14.480 --> 11:17.920] becoming a person who would actually grow as an engineer and then be able to feed back [11:17.920 --> 11:35.280] into that project. So this is taking, this is the start, basically, of Rose Garden. So [11:35.280 --> 11:40.880] I went to Bartholomew University between 1990 and 1994. Rose Garden started as a university [11:40.880 --> 11:47.560] project by a couple of friends of mine, Chris Canham and Melissa Wilson. And they did it [11:47.560 --> 11:52.400] for a final year of projects at Barth, and it was written for John Fitch, who was one [11:52.400 --> 11:58.560] of the computer science professors there. His idea to come up with a UNIX sequencer and [11:58.560 --> 12:03.340] notation editor. I think it was the combined thing that he came up with together. So Rose [12:03.340 --> 12:09.240] Garden itself was born of a university project in around 1992. And the name is a bit strange. [12:09.240 --> 12:12.720] So Rose Garden, where does that come from? It's actually, thanks to these guys, these [12:12.720 --> 12:20.640] were a band called Bow House, who come out of Northampton in the UK from 1978. And Chris [12:20.640 --> 12:26.200] Canham, one of the lead developers, the originators of Rose Garden, he was a big fan of Bow House [12:26.200 --> 12:31.760] and he had one of the songs called Rose Garden, Funeral of Sores, which is actually a song [12:31.760 --> 12:39.280] by John Kale. And he, being a bit of a wag, thought, it's probably going to be crap, this [12:39.280 --> 12:46.320] notation editor. So we'll call it Rose Garden after Funeral of Scores, haha, Scores Notation, [12:46.320 --> 12:55.440] get it? So yeah, that was the origination of the name. So 1992, it was written on UNIX, [12:55.440 --> 13:01.880] it was written on SGI originally, under Erics, with the Athena widget set. It was a modified [13:01.880 --> 13:08.560] Athena widget set, written in C. And it looked pretty good. I mean, I think Chris did a pretty [13:08.560 --> 13:12.640] good job, actually, despite the fact he thought it would be terrible. This is actually Rose [13:12.640 --> 13:19.400] Garden 1.0, the source code. However, I believe this screenshot comes from Rose Garden 2.1, [13:19.400 --> 13:25.200] which is the first Linux port of that source code. And as you can see, it's got a piano [13:25.200 --> 13:33.640] roll editor, an event editor. It's also got the notation, oops, and it also works together [13:33.640 --> 13:38.480] on the same screen like that. So it was pretty advanced. And it worked via the Erics device, [13:38.480 --> 13:44.520] so it would actually send out to a MIDI device from the SGI, the Silicon Graphics workstation. [13:44.520 --> 13:50.320] That was it, number one. That was done for a final year project. So what happened next? [13:50.320 --> 13:54.360] Well, what happened along the side of that was that we ended up spending a lot of time [13:54.360 --> 14:01.960] mucking around. So in 1992, 1993, I was still at university. Chris and Melissa were peers [14:01.960 --> 14:07.080] of mine, friends of mine too, and we used to hang around in the Spark Labs as they were [14:07.080 --> 14:11.960] called at Barthie University, and we played too much X-Tank. Anyone know X-Tank? Yes, [14:11.960 --> 14:19.800] very good. Too much fun, and too many late nights. And that was the thing about coding [14:19.800 --> 14:24.080] at the time as well. It was a social enterprise. It's exactly the same these days as well. [14:24.080 --> 14:31.920] I look at my son. I say to him, okay, why have you not learned? Okay, so now he's going [14:31.920 --> 14:38.240] to university. He's starting to learn computer science at university. And when I was growing [14:38.240 --> 14:42.240] up, I had a computer. I probably liked some of you here. I started coding because I was [14:42.240 --> 14:45.680] interested in it. He was absolutely zero-interesting coding until he got to university. It's all [14:45.680 --> 14:49.520] been gaming. I've been like, well, why don't you build a website? I was like, no interest, [14:49.520 --> 14:55.120] but yet he goes on to study computer science. Annoyingly, he's really good at it, and he's [14:55.120 --> 14:59.560] picked it up in no time at all. So now I'm getting WhatsApp saying, Dad, what about this [14:59.560 --> 15:05.560] node problem? How do I fix that? Okay, fine. But to be honest, looking back, it's exactly [15:05.560 --> 15:11.160] the same now as it was then, because we just mucked around too. We spent a lot of time [15:11.160 --> 15:16.000] in the Spark Labs playing X-Tank. We spent a lot of time learning command line or learning [15:16.000 --> 15:22.440] about Unix processes, how they work. We learned stuff off each other. So at university, I [15:22.440 --> 15:28.640] learned Unix command lines solely from mucking around. I learned C and X11 from doing some [15:28.640 --> 15:35.640] university courses, some of my minors. But the majority of it was from, yeah, just hanging [15:35.640 --> 15:45.200] out with people, exchanging information. So that was Rose Garden 1. And then we left university. [15:45.200 --> 15:51.800] We went off into the working world as a peer group as well. So I ended up in London, eventually, [15:51.800 --> 15:57.280] as did Chris and Melissa. They were working for the same company, actually. And we ended [15:57.280 --> 16:05.000] up hanging out. And somehow, I don't know quite how this happened, but we got to a point [16:05.000 --> 16:13.560] where Linux was a thing. You know, I think I've got a picture next. Where is it? Okay. [16:13.560 --> 16:17.720] So I've been working for a little bit. I've just skipped ahead. I'll skip back. I've been [16:17.720 --> 16:21.000] working for a little bit. I managed to save a bit of money eventually, and I bought my [16:21.000 --> 16:27.960] first PC and it was one of these Gateway 2000s. Came in a cow box. I can't forget it. And [16:27.960 --> 16:31.320] it was so exciting because I just never had my own PC before. And the first thing I did [16:31.320 --> 16:42.840] with it was buy Slackware 3.0 and put that on it. And that came out of, yeah, workings. [16:42.840 --> 16:47.680] I'll go back to this picture. The working world. And that was really where things started [16:47.680 --> 16:54.200] to kind of fall into place. Because when you're working in a proper company, you have responsibilities. [16:54.200 --> 16:59.160] And that was the one thing that work really taught me. You're not just mucking around [16:59.160 --> 17:02.920] in the Spark Lab anymore. You're not kind of just stay up late to do your coding and [17:02.920 --> 17:07.000] have a lot of fun and then sleep late. You've got to, well, you end up doing that anyway [17:07.000 --> 17:11.200] when you're a young engineer sometimes. But if you're working for a company like this, [17:11.200 --> 17:17.640] like I was, a telecoms company, and we had responsibilities, so we created network management [17:17.640 --> 17:23.960] software and also software for multiplexers. And my first boss, she was great. She sent [17:23.960 --> 17:29.640] me out on a customer visit straight away. She said, okay, get in the car, go up to Sheffield [17:29.640 --> 17:35.240] in Yorkshire in the UK, and go and be on site with Yorkshire Telecom whilst they're upgrading [17:35.240 --> 17:39.040] their multiplexers and they're upgrading the software with our new network management [17:39.040 --> 17:45.200] software. And for something like that, as a young, just out of university graduate engineer, [17:45.200 --> 17:48.800] it was incredible because it finally gave you that connection between all the stuff that [17:48.800 --> 17:55.480] you do, all the hours that you spend on a piece of code and the customer themselves. [17:55.480 --> 17:59.960] Because if one of these cabinets fell out of the network or the upgrade didn't work, [17:59.960 --> 18:04.080] then some would have to be sent out in a van. So the street cabinet to reboot it and then [18:04.080 --> 18:08.480] you have to watch it in the control room to make sure it came back up again. And that [18:08.480 --> 18:18.400] was, yeah, the real kind of visceral connection. So this is the first you might call it a learning [18:18.400 --> 18:27.560] that I had. I didn't even realize it at the time, of course, you don't do. It was the [18:27.560 --> 18:32.440] fact that you need to serve somebody with everything you do. Well, I felt that anyway. [18:32.440 --> 18:36.440] Because sometimes you might just want to write some code for the hell of it, but unless someone [18:36.440 --> 18:49.440] is using it, where's the point? I felt that really, really keenly. So yeah, cow box. Actually, [18:49.440 --> 18:54.320] just to get back to the last one as well. So the cow box arrived. I got a P75, I think [18:54.320 --> 18:59.720] it was 95. So Pentium P75. It wasn't particularly flash. It wasn't top of the range, but I [18:59.720 --> 19:03.720] installed Slackware 3 on it. And then there was a tar ball of the Rose Garden source code [19:03.720 --> 19:08.080] knocking around. And I think Chris and myself knocked it together. It might have been Melissa [19:08.080 --> 19:15.680] as well, knocked it together into the first kind of release on Linux of Rose Garden. And [19:15.680 --> 19:32.760] then just after that, one second. So it was kind of the heyday of music software, really. [19:32.760 --> 19:37.040] Even got very exciting very quickly. So I bought my first PC. I was working. I was working [19:37.040 --> 19:43.520] too hard, but having fun. But after a while, hard work became too much like hard work. [19:43.520 --> 19:48.560] I was on pager duty and back in those days, it was actually a pager as well. And I remember [19:48.560 --> 19:52.360] the first night I was on pager duty. I was lying there in my bed and I put the pager [19:52.360 --> 19:56.480] right next to my head and I was just staring at it for the whole night. I couldn't go to [19:56.480 --> 20:00.840] sleep. I was just so scared in case it went off. What would I do? I had my own hardware [20:00.840 --> 20:09.200] at home. I had my PC. But it was, I'll come to this, it was on a 14.4 modem which I had [20:09.200 --> 20:13.480] to ask someone to buy for me at work. They wouldn't even, otherwise I'd have to drive [20:13.480 --> 20:16.400] into the office. I'd have to have a car. So it was basically, you were trying to offer [20:16.400 --> 20:22.720] support to a global product from a very basic setup whilst being on pager duty. And the [20:22.720 --> 20:26.120] pager duty lasted for a whole week as well. So you'd have a week on and then maybe two [20:26.120 --> 20:32.160] weeks off. And that was really stressful. So between that and working and everything [20:32.160 --> 20:36.200] else and probably parting a little bit too much, I just felt burnt out after a year and [20:36.200 --> 20:40.080] a half of this. So I kind of moved jobs a couple of times. I bumped up my pay a little [20:40.080 --> 20:44.280] bit and I got to a point a couple of years later where I could actually take some time [20:44.280 --> 20:49.320] off. So I thought, oh, God, let's relax. The first thing I did was buy some music software [20:49.320 --> 20:53.640] because it was the thing I wanted to do. So I've been building software and I've been [20:53.640 --> 20:56.840] getting into being an engineer. But what I really wanted to do was make some music and [20:56.840 --> 21:03.600] be a rock star. So seriously. So I bought a load, well, I say bought. I probably ripped. [21:03.600 --> 21:10.680] I definitely ripped a load of stuff and put it onto my Windows PC like Logic Audio, Cubase, [21:10.680 --> 21:15.080] Rebirth and Reason, all these great tools that were available at the time. Digital audio [21:15.080 --> 21:19.880] workstations, which meant they would record audio. You could put plugins into them. They [21:19.880 --> 21:28.840] would make great sounds and also things like Rebirth, which was like a TB808 simulator, [21:28.840 --> 21:36.160] emulator, whatever. Lots of fun. Lots of squelchy fun. So I spent a couple of years understanding [21:36.160 --> 21:44.480] these tools and having fun with them and recording. And what I didn't realize I was doing was [21:44.480 --> 21:50.800] I was learning the domain. And if you kind of look back from where we are now and you've [21:50.800 --> 21:56.880] kind of studied OO, object-oriented design, and you've maybe read Eric Evans' book or [21:56.880 --> 22:02.440] listened to Vaughan Vernon speak about DDD, domain driven design, you understand that [22:02.440 --> 22:06.280] that's what you're doing is you're learning the language, the ubiquitous language of music [22:06.280 --> 22:11.000] software and then you're learning to talk and feel the way that musicians do when they [22:11.000 --> 22:31.000] use this software. So around the same time, so around the same time, we had Rose Garden [22:31.000 --> 22:37.120] 2.1 already, but we hadn't moved on since 1992. This was about 1998 at this point. We [22:37.120 --> 22:42.440] did kick around a few ideas. So mainly Chris and myself and also Guillaume, a French developer [22:42.440 --> 22:47.440] who came on board, I think off the back of the 2.1 work. Again, it was a bit hazy. We [22:47.440 --> 22:50.440] started kicking around some ideas. We want to rewrite this thing. How are we going to [22:50.440 --> 22:56.080] do it? So I got this domain knowledge. Chris was an amazing software engineer and still [22:56.080 --> 23:04.760] is to this day and still works in audio software. And me piggybacking on his genius and also [23:04.760 --> 23:09.760] Guillaume's genius was a way to understand how we could build a whole new version of [23:09.760 --> 23:16.720] Rose Garden because it was an itch we wanted to scratch. And we discussed a few things [23:16.720 --> 23:22.320] and technology was quite fluid at the time. So we were like, could we do it in Java? Not [23:22.320 --> 23:29.160] really. There was no sound system or there was a very basic API. To be fair, the Linux [23:29.160 --> 23:33.240] sound system was not particularly advanced at that time. I was just about coming out [23:33.240 --> 23:37.760] but it was mainly OSS before that. So Rose Garden 2.1 just used open sound system, which [23:37.760 --> 23:42.280] was just a device, essentially. So you could, there was no internal routing of media events [23:42.280 --> 23:47.800] or audio. It was all straight out onto the device. Java had the same problem. It was [23:47.800 --> 23:51.480] kind of slow in catching up. It wasn't slow. It was just the fact that it hadn't been written [23:51.480 --> 23:58.480] yet. A lot of these interfaces, there was, I think, a media API for Java, but Java was [23:58.480 --> 24:04.640] never my forte. Didn't like it. Didn't like the stack traces. We also discussed IPC quite [24:04.640 --> 24:12.120] a lot with interfaces communication. We discussed Cobra. Anyone remember Cobra? Yeah. Anyone [24:12.120 --> 24:17.400] forgot Cobra? Yeah. Terrible. Well, the time was very exciting. There was that alien book. [24:17.400 --> 24:22.600] You read it and you thought, what the hell is this? It was really complicated. So it [24:22.600 --> 24:26.000] was too heavyweight. But I think actually Rose Garden 3, the missing number between [24:26.000 --> 24:33.000] 1, 2, and where we are now with Rose Garden 4 was kind of IPC, a Cobra-based thing. We [24:33.000 --> 24:36.040] might have even written in Java or something. It was crazy. Anyway, that didn't last very [24:36.040 --> 24:42.720] long. It was back of a fag packet type stuff, as they say in the UK. But we had a few other [24:42.720 --> 24:46.880] ideas. And we thought, well, it wants to be, we want to build it on Linux. It has to be [24:46.880 --> 24:52.680] on Linux. We're both quite pretty proficient in C++. Let's do C++ maybe. Let's build a [24:52.680 --> 24:59.000] nice data model. And also, we saw that Elsa was emergent. Jack, which is the Jack Audio [24:59.000 --> 25:04.280] Connection Kit, is still, I don't think it was invented until a couple years later, until [25:04.280 --> 25:10.600] maybe 2000 or so. But that was also a flexible audio routing system, which is very cool. [25:10.600 --> 25:15.880] And we eventually implemented. But we knew another thing, that the UI was going to be [25:15.880 --> 25:25.400] vital. Having worked on X11 and a thing of a very basic X11 widget set, there were two [25:25.400 --> 25:31.400] very exciting Linux alternatives coming up, JTK and all the various wizards, all the various [25:31.400 --> 25:38.720] parts of it. And KDE based on QT. And the debate probably didn't take that long, but it felt [25:38.720 --> 25:47.240] like it went on forever. But eventually, we decided, I think, as a kind of a three of [25:47.240 --> 25:52.240] us, on taking the most pragmatic attitude, and that was, we're going to go with KDE. [25:52.240 --> 25:59.480] And initially, we decided to go with KDE because it seemed to be slightly more mature. And [25:59.480 --> 26:05.200] I think we all like QT as well. We didn't know QT particularly well at that point. The toolkit [26:05.200 --> 26:20.960] that KDE is built on. So we come to the KDE years. So this was the real start of the [26:20.960 --> 26:26.040] real build of Rose Garden 4, the thing I showed you at the top. So we finally got here. From [26:26.040 --> 26:32.440] what I say here, KDE 3 was released in April 3, 2002. And I think what we'd done between [26:32.440 --> 26:37.000] then is we'd started probably in 2000, and we'd started writing some stuff. And eventually, [26:37.000 --> 26:41.080] we got to a point where we had to kind of go with the major upgrades. And KDE 3 felt, [26:41.080 --> 26:43.840] for the first time, I think, when we were finally kind of getting there. It felt like [26:43.840 --> 26:52.320] it was good. We were using a little bit of, have you ever seen that picture? Yeah, I'll [26:52.320 --> 26:57.160] just stick on here. So we were using a little bit of de-cop, I think it was, which was the [26:57.160 --> 27:05.040] communication interface for Rose Garden. We were running two separate processes, the Rose [27:05.040 --> 27:13.520] Garden sequencer and the Rose Garden itself, Rose Garden GUI, basically. And they communicated [27:13.520 --> 27:18.400] via, well, we were going to use the KDE mechanism. We didn't in the end. I think eventually, [27:18.400 --> 27:24.640] we ended up on a memory map file, which was suitably good for both processes to access [27:24.640 --> 27:30.680] at that time. So yeah, as you've seen, we ended up with a quite a flexible architecture. [27:30.680 --> 27:35.240] So this kind of maps the core. I'm not going to go into the core of the core of Rose Garden, [27:35.240 --> 27:39.280] but I can point out a few things. So there was the two processes, which underlaid it [27:39.280 --> 27:46.840] behind. The GUI communicated with the shared memory map file. The sequencer did actually [27:46.840 --> 27:51.040] all the running of the stuff, the in and the out and the whatever. It was all controlled [27:51.040 --> 27:57.880] via the transport down here. And it had quite a flexible mapping, so that we had the, any [27:57.880 --> 28:01.840] instrument here could be mapped to any of these instruments there. And they could be [28:01.840 --> 28:06.800] a MIDI device or an audio device. And we kind of created an abstraction layer there, which [28:06.800 --> 28:15.280] would allow us to map those as well onto either MIDI devices, which users could create called [28:15.280 --> 28:23.440] device files, which allowed our users to actually get involved with creating specific configurations [28:23.440 --> 28:29.000] for their own setups. So if you had a particular type of keyboard or a MIDI device somewhere [28:29.000 --> 28:34.120] else, then you'd be able to create a device for it and be able to map those sounds to [28:34.120 --> 28:41.760] your Rose Garden setup. Similarly, the segments themselves. So these blobs are all segments [28:41.760 --> 28:45.080] and you could slice those up and they don't have parameters associated with them too. [28:45.080 --> 28:51.400] So there was design obviously going on underneath the covers. And that was from quite an early, [28:51.400 --> 28:59.000] quite an early time as well. I believe that we didn't actively sit down and plan it all, [28:59.000 --> 29:02.800] but we spent a lot of time refactoring. And that was one of the biggest pain points I [29:02.800 --> 29:08.280] think we felt whilst we were working in the early 2000s, was there was all these great [29:08.280 --> 29:15.640] tools available. Coming out of working in industry where you had all the compilers essentially [29:15.640 --> 29:19.760] before then, the end of the 90s or mid to end of the 90s, it was typically you'd have [29:19.760 --> 29:24.680] to buy a compiler. So you had to buy a license for something. You'd have to buy your library. [29:24.680 --> 29:29.000] So the standard template library for C++ wasn't, it was still kind of getting there. You'd [29:29.000 --> 29:32.480] have to buy boost. I think it was or whatever it was called. There were the various things [29:32.480 --> 29:40.520] you had to pay for. GCC and G++ were still getting there as well. G++3 I think came out [29:40.520 --> 29:48.800] around the same time. So the tool set was shifting. There was also the shifting media [29:48.800 --> 29:56.120] layers as well in Linux. So we were talking to people on various main lists basically [29:56.120 --> 29:59.280] about like when is the new version of ALSA coming out? Were the stuff that we can use [29:59.280 --> 30:03.280] to actually get some real-time stuff working on ALSA? So all of these layers underneath [30:03.280 --> 30:08.560] we were waiting for. Plus the tooling was a little bit kind of getting there too. Plus [30:08.560 --> 30:14.360] all of the UI toolkits were also growing. So we were kind of growing alongside all of [30:14.360 --> 30:19.760] this stuff and it made it quite difficult. We didn't have any CI. We had like a couple [30:19.760 --> 30:25.840] of machines. We had some basic source control in Sourceforge which was probably CVS at the [30:25.840 --> 30:30.880] time, not even Subversion at that point, which worked. But typically even with three of us [30:30.880 --> 30:35.280] working on it, there would be breaking changes the whole time. We didn't have any tests per [30:35.280 --> 30:39.400] say. We'd just be downloading the latest bit of source code and building it at some [30:39.400 --> 30:46.960] break. So when you're refactoring our core area, even with three people and you've got [30:46.960 --> 30:52.080] all of these dependencies moving, it makes it very difficult to get anywhere. So we struggled [30:52.080 --> 30:57.040] to be fair. I was working for a couple of years. Well, it probably felt like a couple [30:57.040 --> 30:59.840] of years. It probably wasn't. It was probably more like six months. I did take some time [30:59.840 --> 31:04.080] off and I worked on it full-time in a little basement with multiple computers, with this [31:04.080 --> 31:08.560] CC running on various computers to try and speed up my builds and stuff. And it was a [31:08.560 --> 31:13.880] real struggle, mainly because we were refactoring and breaking stuff, but also because we had [31:13.880 --> 31:22.200] a kind of an unstable base. Still, through much effort and through much time and through [31:22.200 --> 31:28.680] much dedication from not just a core team, a growing team the whole time, but also some [31:28.680 --> 31:32.760] really passionate users who came along quite early and have stuck with us the whole way [31:32.760 --> 31:36.840] through. So we've still got people who have been using it for 20 years who just love it [31:36.840 --> 31:41.760] because they can't think of any other way of working with it, basically. It's brilliant. [31:41.760 --> 31:44.920] They'll compile it and they'll run it on their own kernels, or they'll download it as part [31:44.920 --> 31:48.440] of a package, or they'll have a machine which they haven't touched for years purely because [31:48.440 --> 31:54.240] they want to run Rose Garden. There are other alternatives. Of course, there's plenty of [31:54.240 --> 31:59.000] other alternatives, but what we've done is we kind of found our people, I suppose, through [31:59.000 --> 32:04.080] the way that we'd built it, through the way that we'd gone about building it, maybe, [32:04.080 --> 32:08.480] as well. The thought we put into it and the love, maybe, we've kind of built something [32:08.480 --> 32:13.480] which is stuck around. And as you can see here, it does, this is it doing some audio [32:13.480 --> 32:18.600] and it also plugs into this thing I mentioned called the Jack Audio Connection Kit, which [32:18.600 --> 32:23.520] is a way of routing audio around internally on Linux and various other platforms, too. [32:23.520 --> 32:29.480] So it's actually like an audio bus. Here's a virtual synth as well, which you can route [32:29.480 --> 32:45.680] to it. So it works with virtual synths, external synths, et cetera. So what we saw was an emergent [32:45.680 --> 32:50.360] architecture. As I mentioned, various things. I need to speed up a bit, so I'm going to [32:50.360 --> 32:54.360] go through a little bit faster. I've also mentioned the Rose Garden Studio Concept. So this was [32:54.360 --> 33:00.720] the thing about the device files. And I think this is another powerful feature of Rose Garden, [33:00.720 --> 33:03.800] one that's still used to this day. So we've got over 100 device files, so people have [33:03.800 --> 33:08.520] gone off and they built them for, I don't know, Yamaha synths, for Roland synths for [33:08.520 --> 33:11.240] various different types. And you can just download those and install them into Rose [33:11.240 --> 33:17.080] Garden. And you can map all the set, all the voices basically straight into it. Additionally, [33:17.080 --> 33:23.880] we've got the, as I mentioned, the Jack integration, the support for Ladsper and also DSSI plug-ins, [33:23.880 --> 33:29.760] which are native plug-ins for Linux and other platforms, as well as the VST plug-ins, which [33:29.760 --> 33:38.480] are the standard music, more standardized music plug-ins, audio plug-ins for Windows [33:38.480 --> 33:43.480] and other platforms. Additionally, of course, notation markup and printing using Lilypond [33:43.480 --> 33:50.240] as well. So a very high quality score export from Rose Garden, which has been very much [33:50.240 --> 33:59.200] appreciated by some of our users, too. So with all that rambling, this is one of the [33:59.200 --> 34:04.400] learnings that I found, was that just the architecture itself is difficult because of [34:04.400 --> 34:09.240] various reasons, communication, mainly, but also what do we want to build? Secondly, organization [34:09.240 --> 34:12.080] around that is difficult, too. And we saw that with the refactoring, that we had to [34:12.080 --> 34:17.560] suffer, essentially. Maybe with better tooling or maybe with more stable platforms that we [34:17.560 --> 34:22.680] were building on, it would have been simpler. And in hindsight, it seems almost, yeah, trivial, [34:22.680 --> 34:32.880] but at the time, it felt very difficult. Secondly, this is something which really stuck [34:32.880 --> 34:39.440] a lot in the claw, in the throat, which is everyone has an opinion on UI, everyone. Users, [34:39.440 --> 34:45.120] developers, even developers who don't profess to be UI or UX experts have an opinion because [34:45.120 --> 34:51.320] we all use the software, right? And if you change anything, then you break a workflow. [34:51.320 --> 34:55.720] And that's a difficult lesson to learn. You may be a great coder, but again, it becomes [34:55.720 --> 35:02.240] the social angle between what are we trying to build and how do we keep people happy? [35:02.240 --> 35:05.440] Because you could, and it's even happened on the Rose Garden developer list in the last [35:05.440 --> 35:13.360] couple of days. Ted's released a new version before Christmas, but he's released a patch [35:13.360 --> 35:17.600] version in the last week, and he changed one of the theme setups, so it defaults to something [35:17.600 --> 35:23.840] that no one likes. So there's a little mini uproar going on. [35:23.840 --> 35:29.560] On the flip side, when you do get it right, when you do spend the time getting your architecture [35:29.560 --> 35:35.480] right and you're thinking about your code and your core, then sometimes big features [35:35.480 --> 35:40.320] that you might have thought impossible even a few months ago are almost trivial to implement. [35:40.320 --> 35:44.520] But suddenly, those points, you go, oh, thank God, we got it right, and you actually feel [35:44.520 --> 35:48.920] that that is something that was worth spending the time on. It doesn't happen all the time, [35:48.920 --> 35:57.080] but sometimes it does, and it feels great. And yeah, fourthly, in this little block, [35:57.080 --> 36:00.400] literally all you need is a small number of users, and there needs to be loyal users [36:00.400 --> 36:05.800] to keep you going. So even though you're not getting paid for it, if you've got passionate [36:05.800 --> 36:13.280] users, it can mean everything. Okay. Talking of passionate users, we'd spend [36:13.280 --> 36:19.480] some time in basements and online, of course, building stuff, and we thought, we and Chris [36:19.480 --> 36:23.480] thought it would be a great idea to get out there and start showing it. And around the [36:23.480 --> 36:29.720] same time, 2002 or so, there were Linux expo starting to happen in the UK. So through contacts [36:29.720 --> 36:34.520] of ours, we were involved with Linux user magazine. I wrote for them at some point [36:34.520 --> 36:40.000] together, and we managed to flag a stand at one of the first Linux expos, and this is [36:40.000 --> 36:46.680] us looking all ruddy and young and lovely and wearing branded t-shirts. Look at that. [36:46.680 --> 36:50.720] Made that myself. Fantastic. This is my friend Mike, unfortunately, not with us anymore, [36:50.720 --> 36:55.600] but he was a great inspiration and helped us a lot and encouraged us to get set up. [36:55.600 --> 37:02.880] And this is Chris. And this is our fantastic set up, isn't that? Just stellar. But today, [37:02.880 --> 37:09.000] and yesterday, walking around, looking at people sitting behind desks, exactly, not [37:09.000 --> 37:14.120] better, better desks, to be honest, with much more impressive set ups, it really takes me [37:14.120 --> 37:17.760] back to those days when we were doing the same thing. We had our software, we were excited [37:17.760 --> 37:25.040] about it, and we went out there and showed it to people. So, yeah, we were doing lots [37:25.040 --> 37:29.720] of things, writing, went to trade shows, went to conferences. Well, yeah, not hundreds [37:29.720 --> 37:35.880] of them, a few, a handful. We started approaching vendors, so there were people who were building [37:35.880 --> 37:41.480] music, software, PCs, and we talked to them. Maybe they'd be interested. We talked to Roland. [37:41.480 --> 37:47.120] We talked to Yamaha. We talked to loads of people. We talked to AMD. There's a book. [37:47.120 --> 37:55.280] It's in my bag. There's the one second. So, Michael McIntyre wrote this whole guide, which [37:55.280 --> 38:01.760] was published, The Rose Garden Companion. Yeah, and then we started talking to partners [38:01.760 --> 38:08.400] as well. So, there were people at the same time who were betting their careers and their [38:08.400 --> 38:14.080] livelihoods on Linux being the next big platform. Obviously, everyone thinks this year is the [38:14.080 --> 38:21.320] year of the Linux desktop. But there were still people out there, well, then there were people [38:21.320 --> 38:28.000] out there who wanted to build Linux-based hardware as well. We talked to a creator of [38:28.000 --> 38:32.520] keyboards in Italy. We flew us over, and we talked to him. It was a fantastic couple [38:32.520 --> 38:36.720] of days. We met his family, his mother made us lovely pasta for lunch, and we saw his [38:36.720 --> 38:44.000] workshop where he was building these incredible multimedia platforms and keyboards in his [38:44.000 --> 38:52.760] garage, basically, his garage business. Fantastic. So, yeah, we got out on the road. Also, we [38:52.760 --> 38:57.280] launched a product. This was called Studio to Go. So, Chris and I, we formed a company [38:57.280 --> 39:03.800] and we built a bootable CD, which enables you to basically have an entire studio on [39:03.800 --> 39:07.360] your CD. You could put it into a Windows machine, and you could boot it up and boot it into [39:07.360 --> 39:11.320] Linux, and you'd be ready to go, basically. You could also install it on your Windows [39:11.320 --> 39:18.840] machine, too. This is Chris, the year later. So, from the previous photo, this is a kind [39:18.840 --> 39:25.120] of a level of professionalism hire. We look more relaxed, more kind of in the moment. [39:25.120 --> 39:29.520] Yeah, again, I think more relaxed. And then if we look another year further, this is us, [39:29.520 --> 39:35.560] the kind of the high point of our career with Fervent Software and Studio to Go. This was [39:35.560 --> 39:45.520] at the Sounds Expo in 2004, I believe, yeah. So, we weren't in this by ourselves. There [39:45.520 --> 39:54.000] was an organisation called Linux Audio, as well, which is still around, and in fact, [39:54.000 --> 39:57.840] I looked on the website yesterday, and apparently I'm on the board of directors or something [39:57.840 --> 40:01.480] for, anyway, it's not a company, and I'm not on the board of anything there, but it [40:01.480 --> 40:07.080] was like a kind of an open source collaboration group with a guy called Daniel James, as well, [40:07.080 --> 40:18.560] who also I work with in journalism. He was a big proponent of another Linux audio platform, [40:18.560 --> 40:23.440] which is still being sold, I believe. So, working together, we managed to get to a Sounds [40:23.440 --> 40:28.840] Expo where it was not just Linux stuff, it was also Windows and the rest of the event [40:28.840 --> 40:38.480] is there, too. However, at that point, it was getting clear that we weren't going to [40:38.480 --> 40:42.080] make a living out of it, Chris and I. So, we kind of, with a family coming along, and [40:42.080 --> 40:45.120] that's why I mentioned it at the beginning with a photo of my son, it was like a decision [40:45.120 --> 40:48.680] to say, well, what can we do now? Because we tried a kind of business, didn't make enough [40:48.680 --> 40:52.360] money for us, and we didn't really have the insight into what we should do next. So, we [40:52.360 --> 40:56.880] just said, okay, let's call it quits for the minute. I dropped off from Rose Garden at [40:56.880 --> 41:02.680] that point, but loads of people stepped up. One of the biggest things that they did in [41:02.680 --> 41:09.760] the next section, which is the QT years, was to port it from KDE to QT, which meant basically [41:09.760 --> 41:15.840] ripping out the KDE stuff. Sounds simple enough, but took about a year and a half, which led [41:15.840 --> 41:21.360] everyone to understand that major dependency upgrades are very hard. [41:21.360 --> 41:24.960] One of the good things to look at from the source code of Rose Garden now is that of [41:24.960 --> 41:30.520] the source files that we have, about 1400 C++ files, most of them are pretty small. [41:30.520 --> 41:39.840] So, under 500 lines, that's including comments. So, that's a good sign to healthy code base. [41:39.840 --> 41:47.600] So, I'm skipping now from 2008, 2010, and I'm kind of looking towards what's happened [41:47.600 --> 41:52.560] in the last 10 years, but also the future. So, Ted Felix came on board in 2010, and by [41:52.560 --> 41:56.720] his words, I spoke to him in the last week or two, by his words, he said it suffered [41:56.720 --> 42:00.960] from a lot of stability problems. So, this is, we have a GitHub as well, as well as a [42:00.960 --> 42:08.440] source for, and GitHub is downstream, so it allows us to do some nice visualizations. [42:08.440 --> 42:16.040] So this was around the first bit of work that we did to stabilize the initial Rose Garden. [42:16.040 --> 42:22.480] This was around the studio to go time, lots of work there, and then this was around the [42:22.480 --> 42:27.920] KDE to QT port, so lots of work went in there, too. After this, when Ted came on board, [42:27.920 --> 42:31.400] he said basically he spent a lot of time stabilizing, basically getting rid of bugs and making sure [42:31.400 --> 42:35.480] that there was adequate performance, and doing that, I think, I don't know, it was not unaided [42:35.480 --> 42:43.320] for sure, but focusing on that a lot. And you can see this also represented in the way [42:43.320 --> 42:49.160] that Chris and Gio were very involved here, and Ted was involved later, and this is my [42:49.160 --> 42:58.320] contribution. And also, we see, again, from GitHub, the churn that was going on around [42:58.320 --> 43:03.160] the same time, so studio to go product, QT port, and then stabilization after that. [43:03.160 --> 43:11.700] But if you then look at, I'm just comparing us to Musa, which is another Linux audio work [43:11.700 --> 43:18.480] station as well, and this goes up to 40 on this axis and up to a bit higher on this one. [43:18.480 --> 43:24.000] So in terms of contributions, we're not far off what Musa is doing as well, which is really [43:24.000 --> 43:28.960] encouraging to see. So I would say the product is pretty healthy, it's been stabilized, it's [43:28.960 --> 43:34.960] still being used by lots of people, you don't hear about it a lot, but it's still there. [43:34.960 --> 43:41.120] And I'm going a bit faster now because I need to wrap up, but the number one thing has got [43:41.120 --> 43:48.040] to be people, and that's what I mentioned at the front of this talk. People to do the [43:48.040 --> 43:51.880] work, of course, people to support you whilst you're doing the work, and the expertise that [43:51.880 --> 43:56.920] you build together when you're designing something. So that's why I see Rose Garden [43:56.920 --> 44:03.840] now is still surviving, and still something that we can contribute to. [44:03.840 --> 44:13.720] So top five things. For open source, basically, I would say this as well. So good architecture [44:13.720 --> 44:20.880] and good toolkit choices are super important, and they help with defining your quality and [44:20.880 --> 44:24.960] defining how far you can go with any one thing. And if you're not getting anywhere down a [44:24.960 --> 44:28.960] certain path, then just rip it up and start again, or refactor, or think really hard about [44:28.960 --> 44:35.120] your design. Also, Ted's jumped in with some stuff here. As he's mentioned that stringent [44:35.120 --> 44:40.000] requirements are merging, so making sure that you don't allow anything to merge, and in [44:40.000 --> 44:43.400] fact, recently there's been a fork of Rose Garden because one of the developers has got [44:43.400 --> 44:46.440] a bit annoyed that he's not getting his stuff reviewed, and it's fair enough, everyone's [44:46.440 --> 44:49.480] doing it in their spare time. It's still a labor of love. [44:49.480 --> 44:56.760] Also, I mentioned earlier, refactoring and unit testing, and I did actually run the unit [44:56.760 --> 45:04.400] test code coverage, the other day on Rose Garden, and it's 8%, which is not good. Okay, there [45:04.400 --> 45:09.360] are some challenges with a UI-based, whether with a GUI, but it should be higher than that. [45:09.360 --> 45:13.600] So I imagine one of the things that I might be looking at as I dip my toe back in a little [45:13.600 --> 45:20.800] bit is to maybe write some more tests. So number one, quality. Number two, coding is [45:20.800 --> 45:24.200] social. I mean, that's one of the things that we don't realise is that we think we're going [45:24.200 --> 45:28.880] to OSS, we can just hide maybe online or do some coding by ourselves, but increasingly [45:28.880 --> 45:33.960] it becomes social. It's a different type of sociability maybe to working in an office. [45:33.960 --> 45:38.480] But open source, I believe, is much more social than working in office because working in an [45:38.480 --> 45:44.000] engineering job or software job in an office because you can just focus in on the one [45:44.000 --> 45:48.440] thing that you're doing. You don't have to be maybe told that you need to be more interactive [45:48.440 --> 45:52.800] in a certain way of working, but in OSS, you have to be. There is no question about it. [45:52.800 --> 46:01.840] You've got to be able to defend your ideas and maybe persuade other people to. Also, [46:01.840 --> 46:08.360] related to this as well, it's the social side of the customer engagement. It's the fact [46:08.360 --> 46:13.480] that you do have customers or end users, however you define them, and they will have opinions, [46:13.480 --> 46:17.040] whether you like it or not. So you're putting yourself out there. [46:17.040 --> 46:22.720] Thirdly, and this is something I've come across in the last year or so, this guy called Seth [46:22.720 --> 46:30.080] Godin. He's an American marketing guru and his approach, I really like his approach, [46:30.080 --> 46:39.520] he's got a great podcast called a Kimbo, A-K-I-M-B-O, you should check it out. He writes and he [46:39.520 --> 46:45.160] speaks really well, really pithily on lots of subjects about marketing and he's not like [46:45.160 --> 46:50.280] a slimy kind of marketing dude, whatever kind of feel. It speaks to me as an open source [46:50.280 --> 46:55.680] person. One of the things, one of his key phrases is this, people like us do things [46:55.680 --> 47:00.000] like this and I think that's what it means to connect with your audience, to find your [47:00.000 --> 47:06.400] audience and to keep connecting with your audience at the right level. So yeah, we might spend [47:06.400 --> 47:13.200] some time arguing about how a UI should be or how we should architect this or if we should [47:13.200 --> 47:18.000] reflect on that. However, it's worth it if we connect with each other and we connect [47:18.000 --> 47:24.080] with our customers well at the same time. And also, he talks about audience, importantly, [47:24.080 --> 47:28.440] because you don't need to solve all the problems in the world, all you need to do is solve [47:28.440 --> 47:37.240] a few problems for a few people. Fourthly, use all the tools, so we are just so lucky [47:37.240 --> 47:42.560] these days, we've got all these amazing tools, we've got GitHub, we've got Co-Curve, we've [47:42.560 --> 47:49.480] got Cloud, whatever it is, lots of stuff, you know, Sonar Cloud, etc., all these great [47:49.480 --> 47:57.720] things that we can use, Sonar type. So use them. Use CI, use unit testing, use TDD, [47:57.720 --> 48:01.040] use all of the great engineering advances that we've come up with over the last ten [48:01.040 --> 48:11.440] years to make our code better. And finally, don't take it too seriously. One of the reasons [48:11.440 --> 48:16.160] that I got involved in OSS was that I could do it from, well, we could do it ourselves, [48:16.160 --> 48:20.720] you know, we could put our little imprint on the world or do something fun. And that's [48:20.720 --> 48:25.320] the point, it needs to be fun, it needs to be enjoyable. So when it stops being enjoyable, [48:25.320 --> 48:44.040] don't do it anymore. And that is it. Thank you very much. Any questions? [48:44.040 --> 49:06.320] Are there any questions? Oh, yes, there are. Please raise your hand. Okay. [49:06.320 --> 49:15.040] Hi, thank you. I can't wait to give the software a try when I get back home. I might install [49:15.040 --> 49:23.920] it later. But was there any possibility of you like playing a bit of music, maybe? No [49:23.920 --> 49:37.560] demo today, I should have said that at the top. Thank you. Any other questions? Okay, [49:37.560 --> 49:55.000] thank you very much. A big round of applause.