CppCast - JUCE

Episode Date: October 21, 2015

Rob and Jason are joined by Julian Storer to discuss the JUCE library. Jules has been developing audio and library software in C++ for over 15 years, and is the author of the JUCE library, the... most widely used framework for audio applications and plugins. Music tech company ROLI acquired JUCE in 2014, and as well as continuing work on library itself, he helps to guide ROLI's other software projects. He also created the Tracktion audio workstation in 2002, which is still going strong and being used by thousands of recording musicians around the world. He lives in London, and likes to escape from the world of music technology by playing classical guitar News CppCon 2016 Call for Class Proposals Bjarne Stroustrup on the 30th anniversary of Cfront Do you prefer fast or precise? Julian Storer Julian Storer's GitHub Links CppCon 2015: Julian Storer "The Projucer" JUCE @JUCElibrary ROLI Tracktion

Transcript
Discussion (0)
Starting point is 00:00:00 This episode of CppCast is sponsored by JetBrains, maker of excellent C++ developer tools including CLion, ReSharper for C++, and AppCode. Start your free evaluation today at jetbrains.com slash cppcast dash cpp. Episode 31 of CppCast with guest Julian Storer recorded October 21st, 2015. In this episode, we talk about the 30th anniversary of the first C++ compiler. Then we'll interview Julian Stork, author of The Juice Library. Julian will tell us about the history of for C++ developers by C++ developers. I'm your host, Rob Irving, joined by my co-host, Jason Turner.
Starting point is 00:01:21 Jason, how are you doing today? Doing all right, Rob. I just submitted a talk proposal for accu in bristol we'll see how that goes really okay yeah that's coming up in april april okay what about meeting c++ you think about going to that one too uh no no december in germany is not a great time for us right now okay i, I understand that. We'll have to look into ACCU. I'm not sure if I can make it over to Europe this year, but I'm definitely excited for next year's CPPCon.
Starting point is 00:01:52 Yes. Yeah. Well, at the top of every episode, I'd like to read a piece of feedback. This week, Patrice Roy was sending us some messages on Twitter. Patrice is on his way to Kona for the ISO C++ meeting, and he was listening to CppCast on the way. It looked like he listened to the Anthony Williams, Kate Gregory, JF Bastion, Sean Perrin, and James McNallis episodes.
Starting point is 00:02:17 He says, way to make a trip interesting. Some good ones. Yeah, some very good episodes. So we'd always love to hear your thoughts about the show. You can email us at feedback at cppcast.com follow us on twitter at twitter.com cppcast and like us on facebook or you can always review us on itunes as well and we always really appreciate the itunes reviews they help us get more listeners so joining us today is julian storer julian has been developing
Starting point is 00:02:43 audio and library software in C++ for 15 years and is the author of the Juice library, the most widely used framework for audio applications and plugins. Music tech company Rolly acquired Juice in 2014 and as well as continuing work on library itself, he helps to guide Rolly's other software projects. He also created the Traction audio workstation in 2002, which is still going strong
Starting point is 00:03:05 and being used by thousands of recording musicians around the world. He lives in London and likes to escape from the world of music technology to play classical guitar. Jules, welcome to the show. Thank you very much. It's great to be here. So what is this Traction Audio Workstation? Well, I'm actually using it right now to record my side of the audio here so um hopefully your your audience will hear glitch free recording of what i'm saying um it's i mean to anyone who's not familiar a digital audio workstation is um it's a piece of software that does um audio recording it's what you use in a studio to record instruments and to sequence synthesizers and that kind of thing. And yeah, sorry.
Starting point is 00:03:49 So is this a software that's used by like major recording studios for musicians? It's one of the many. It's quite a crowded market. There's probably about maybe 10 really well-known workstations that people use. It's a strange market because unlike word processors where there was only ever really one or two, in this market there's quite a lot of pretty similar competing products. Interesting.
Starting point is 00:04:16 Very interesting. So we had a couple of news items to go through before we talk to you, Jules, but feel free to join in. The first one is that CppCon 2016 is already getting started and they're looking for class proposals. Now, Jason, did you go to the CppCon 2015 class that they had? No, I didn't. That was like the day before the conference started
Starting point is 00:04:38 and I showed up the next day. Okay, but I guess they're looking for more content similar to that. Did you hear anything about the class at 2015? I actually didn't. I didn't even, like, it didn't really hit my radar. I didn't think to ask about it. I'm sorry. I don't have anything interesting to say.
Starting point is 00:04:55 It's okay. Well, if you're a C++ instructor, then reach out to the CppCon committee, and maybe they'll be interested in having you give your class for 2016. The next article is this interview with Bjorn Struestrup because we just hit the 30th anniversary of the first C++ compiler, Cfront. And it was a really interesting article interview with Bjorn kind of about how that came to be in the writing of the c++ book that was released on the same day as the first compiler jason what were your thoughts on this one well largely i thought the uh the reddit conversation was interesting and i
Starting point is 00:05:38 you know sometimes i tend to bring it back to reddit here but uh here, but it's a fun conversation because you've got Bjarne actually talking and sharing on Reddit. And people are like, whoa, wait, I didn't know you were on Reddit. And it just makes some good discussion, conversation, feedback. It's neat. Yeah, absolutely. How about you, Jules? Do you have a chance to look through this? Yeah, it's 30 years, eh?
Starting point is 00:06:06 It was really interesting, actually, at CppCon to see Bjarnas' talks and the new stuff he's pushing for. That made quite a big impact on me and the guys, and we're going to try and push as much of the kind of stuff he's saying into Juice, into our library as we can. Yeah, one interesting thing in the interview is he was asked if he ever tried leaving C++ or went to go build a second language. And he said he was tempted to at some points, but C++ kept pulling him back.
Starting point is 00:06:36 And I'm definitely very glad that he's still in the community, still working to make C++ better because this new work with the GSL just seems great. Yeah, really cool stuff. Yeah. So the last one is from the Visual C++ team, and they're actually looking for some feedback here. Apparently, there are two flags to decide how floating points are handled from the compiler. There's either FP fast or FP precise. And they're basically asking what the default should be,
Starting point is 00:07:11 fast or precise with floating points. And currently it's precise. And I don't know about you guys, but I kind of feel like precise should remain the default. We always want speed, but I don't think we want speed at the sacrifice of precision. I would agree with you until you get to that point
Starting point is 00:07:30 where they point out that FP-Fast can use some of the vectorization parts of the CPU, which actually results in more precise results, even though it's faster. So, that's the end of the counter under the counter example heading in there
Starting point is 00:07:46 interesting to read yeah this is this is quite an interesting one for the kind of work that i do because in audio we always seem to end up turning on fast um and it was interesting that i'd actually argue the opposite way about defaults because if you start with something that's precise, if you write quite a large app with precise, and then you enable fast, you can actually end up with some very subtle errors creeping in that you don't notice. So everything might seem good,
Starting point is 00:08:19 but then you'll have some weird edge case where a number will go wrong because of the fast flag. But if you kind of started the other way around and everything was fast by default, you'd get those surprises straight away. You'd see these errors creeping in when you write that bit of code. And then if you find that something isn't precise enough, you'd say, well, I'm precise, and everything slows down,
Starting point is 00:08:41 but nothing will actually go wrong. So I don't know. It's a difficult one. I can see the dilemma there. Really interesting way to think about it. And I've got to say, too, reading this article, something just kept bothering me the whole time. They kept saying there are two types, float and double, float and double, and ignores that long double was added in C++11.
Starting point is 00:09:02 There are three floating point types in C++. Do you know if any of the other compilers have similar options with regards to floating points? I know GCC has some, but I've never played with them myself. Never had a need to. No, we sometimes will tweak a few around and see what effect they have on performance when we're really pushing on something,
Starting point is 00:09:27 but I've never dug deeply into what the possibilities are there. Interesting. Okay, well, Jules, let's start talking to you about Juice. Could you start with an overview of what Juice is? Sure. It's a big C++ framework. It started off as um an audio framework but then you find that when you're writing audio apps you actually tend to do more than just audio and you end up needing graphics and gui stuff and all sorts of support classes so over the years
Starting point is 00:10:02 juice has gone from um something very small to to being something a little a little bit like the cute framework or wx widgets that kind of that kind of um uh spanning that that is this kind of areas so um it's it's very heavily used in the audio industry because that's where my background is and the library itself spun out of traction which was an audio workstation so it got taken up by a lot of people we knew who were developing audio plugins and became pretty dominant in that area but probably only 10% of the library is actually audio code the rest is a big GUI framework, basic container classes, network, cryptography, a whole range of different support tasks. And the idea is that you can build most audio apps or audio plugins
Starting point is 00:10:57 or kind of multimedia apps without really needing any other libraries. And it's cross-platform, is that right? It's cross-platform, is that right? It's cross-platform, yeah. It runs on Mac, Windows, Linux, iPhone, and Android. And we're also planning on working on a bare metal version of it to run on bare metal Cortex processors in the new year. What do you mean by that? Actually, being able to run it
Starting point is 00:11:25 without an operating system. So, yeah. It's broad enough that we could do that. One of our little side projects at Roli is working on a little embedded board with a very bare metal processor on.
Starting point is 00:11:41 Being able to actually build juice apps. So you can test an app running on your desktop machine but then recompile it to run on this bare metal board with no operating system and get as much functionality as we can out of that interesting and sorry i interrupted what you were saying a minute ago if i don't know if you remember what it was or not what your train of thought was there uh no sorry that's all right so it started off um in the audio world are there a lot of applications you know of outside of audio and multimedia frameworks that are using juice we have a few um i mean we don't know what everybody's doing with it because it's open source and people are out there using it for
Starting point is 00:12:21 all kinds of things um and we yeah we we've we've had a few people get in touch who have used it for things like games. I'd love to see it being used in more games because it'd be a great framework for that. But at the moment, our kind of core basis is in the audio world. So having used a lot of cross-platform GUi toolkits i really do not envy you for having developed your own i'm curious what's some of the more interesting challenges that you've come across or roadblocks or pains or anything any stories you'd like to share yeah well the most to be honest over the years the most painful bit wasn't the GUI stuff. It was the plugin framework. So for people who aren't familiar with audio plugins,
Starting point is 00:13:10 the way a lot of audio software works is you have a host program, and then you have little plugin effects units or synthesizers, and there are thousands of these out there. And you'll take a synthesizer, you'll have another plugin, which is some sort of reverb or effect. There are different formats for writing these plugins. There are about three different formats that are commonly used, and we support all of these in Juice.
Starting point is 00:13:41 They all run on all different platforms. We have several plugin formats. Multiply that by several platforms multiply that by maybe uh 20 different host programs that can be loading these and then bear in mind that these formats were written uh quite not designed with too much thought a number quite a few years ago and that over the years you know that you had the hope that people writing the hosts and people writing the plugins not quite agreeing on what the protocols are um so having written a framework that people used to build the plugins and a framework that people used to build the hosts and building my own host. And this combination of possible places for things to go wrong has been crazy.
Starting point is 00:14:29 So, yeah, over the years, that's definitely been the biggest pain point. Doing the GUI framework, by contrast, has actually been really quite good fun and pretty easy because that's all quite self-contained. You know, you write a button. Okay, you have a lot of people asking for hey i would write the button that does this that and the other but it's quite straightforward you know get the pixels in the right place get the mouse clicks in the right and deal with them it's fine but um dealing with all the third party interactions has been the the worst thing over
Starting point is 00:14:59 the years so are these like compiled binary plugins or Absolutely, yeah. So if they go bang, they go bang and take the whole application down. Now, if you have an x86 compiled one, you can't run it on your Android port, I assume. No, no. And when Android does support plugins, which I'm sure they will do pretty soon, I think that might use sandboxing or something to communicate between the plugin and the host as if they're different apps.
Starting point is 00:15:33 But on the desktop machines and the way most things are used at the moment, the plugins are basically DLLs. They get loaded into the host address space so they get free reign to destroy as much memory as they like which is which creates some fun situations and it it's also means that if you're a plugin developer and you launch a plugin and it crashes the host it seems like if you if
Starting point is 00:16:01 if you launch the plugin and it crashes the host the users complain to you but if you write the host and someone else's plugin crashes your host it seems like the you launch the plugin and it crushes the host, the users complain to you. But if you write the host and someone else's plugin crushes your host, it seems like the users still complain to you somehow. Right. You always seem to get the blame, no matter which side of the fence you're on. Do you have any favorite tools or anything for debugging what this Blackbox plugin you've got is doing?
Starting point is 00:16:24 Yeah, guesswork, mainly. Okay. And reaching for an email and writing to the people who actually wrote the plugin and saying, guys, please run this and debug it. Because quite often you simply have no idea what's going on in there. That's interesting.
Starting point is 00:16:42 And the number of edge cases, even with a simple API for a plugin, are really enormous. When people don't quite know what thread they're going to be called on, and they write it expecting this function to be called before that function,
Starting point is 00:16:59 it's just a crazy number of possibilities for people to test. So they don't. Wow. Okay. I wanted to interrupt this discussion for just a moment to bring you a word from our sponsor, JetBrains. C-Line is a cross-platform IDE for C and C++ from JetBrains.
Starting point is 00:17:19 It relies on the well-known CMake build system and offers lots of goodies and smartness that can make your life a lot easier. CLion natively supports C and C++, including C++11 standard, libc++, and boost. You can instantly navigate to a symbol's declaration or usages too. And whenever you use CLion's code refactoring, you can be sure your changes are applied safely throughout the whole code base. Use Subversion, Git, GitHub, Mercurial, CVS, Perforce via plugin, and TFS with a unified interface for all of those. Run a terminal inside the IDE and install one of the dozen of plugins like Vim Emulation Mode, for example.
Starting point is 00:17:57 Download the trial version and learn more at jb.gg slash cppcast dash clion and use the following coupon code to get a 20% discount So this might be jumping ahead a little bit, but you're describing this big problem with all these different platforms and different plugin specifications. Does Juice do anything to try to help this problem for the plugin developers? Well, yeah. I mean, we I mean, that's why a lot of, most of them use
Starting point is 00:18:33 our libraries because it takes a lot of that mess out of there and they write that plugin with one with just two hour API and then we wrap it in the different third party ones and we try to take the pain away but
Starting point is 00:18:49 we still can't stop plugin developers doing silly things inside their code and causing problems we do our best the one good thing we do though is that we have both the host and the plugin API so
Starting point is 00:19:04 and it's all open source. So we can always say to people, hey, if your plugin seems to be crashing a host, then try it in our open source host, and you can see exactly what's going on at every level. So have you considered any of the esoteric sandboxing or emulation environments like Chrome uses to sandbox its plugins from the web browser?
Starting point is 00:19:31 Yeah, interaction actually, we've been investigating that fairly recently and some of the other workstations do seem to manage to host some plugins in a separate process. But with audio, this is a real pain because with audio, the problem is all about latency. You're playing these tiny audio buffers and each one has to be filled within maybe a millisecond or two. And the slightest overrun will cause a really nasty audible glitch
Starting point is 00:20:05 that people will complain about. So, you know, that's a hard problem even when you're running one process with all of your plugins running in the same address space and a function call is simply a function call into that plugin. But once you move some of that functionality out into a separate process and you have to communicate with it through shared memory with signals, and automatically you're on separate threads and these threads are running in different process spaces, that latency problem becomes very, very nasty because if you have a chain of say a hundred plugins, which isn't unusual and you have,
Starting point is 00:20:45 um, a time of maybe, uh, three or four milliseconds in which to send a piece of data to each of those plugins and wait for it to process it and then respond and then pass the, pass the result onto the next plugin. This becomes like ridiculously, um,
Starting point is 00:21:03 hard to achieve without things going wrong. So people have got sandboxing working. We've been looking at it, and it's actually one of the most difficult problems I've actually tried to solve. I can imagine. Yeah, the hard real-time side of it is very, very nasty. So the Juice library was originally
Starting point is 00:21:26 developed kind of solely by you. Is that correct? And just over the past few years, you moved into the open source world? It's always been open source. Okay. It kind of branched out of the traction, the workstation I was writing back in the early
Starting point is 00:21:41 2000s. Because back then, there wasn't really a good library to use, so I started writing my own little bits and pieces, ended up getting carried away writing a whole GUI framework and then branched that out. But as soon as I branched this out, I took it open source. So it's been open source for more than 10 years now. And it was just me working on it until last year
Starting point is 00:22:03 when Rowly got involved and um and now we have a little team of um five of us do you get contributions from outside of roly um people the most useful thing people send are bug fixes um occasionally we we get people contributing a little snippet of code that helps them do something they were trying to do. We don't take pull requests because it always needs rewriting. So even the best code we get, it's kind of never quite right.
Starting point is 00:22:36 So we always review and rewrite. So you have a major release coming up soon, right? Yeah, it? Yeah. It's interesting. Juice version 4 is going to be the first one where we've actually held back some functionality, and then we're going to say on a certain date, hey, it's released. The way I always did this in the past was
Starting point is 00:22:58 that everything I ever did just went straight onto the Git repository. And at some point, I would decide that, hey, that feels like it's about a release candidate, and then I'd tag it. So this time we're doing things in a slightly more grown-up way, and we've actually got a bunch of features that we're doing on branches, and we'll merge them all in on the day that we decide it's the G4 release day. So are there any features you would like to highlight?
Starting point is 00:23:25 Yeah, we've got a few good ones. I mean, the big one for us is the producer, which is our... I hesitate to call it an IDE. It's a live coding tool, sort of a playground-type exploration tool. It'll take your code and compile it, and then it can instantiate classes on their own
Starting point is 00:23:51 and run them in Windows and let you change the code and see the results in real time while it recompiles in the background. It's very hard to explain without showing it, but it's something I've been working on for more than three years now. I first demoed it about three years ago,
Starting point is 00:24:10 and we're finally going to get this out to the public. So I've been going around talking about it a lot and showing it to people, but yeah, it's finally going to hit the shelves next month. So I saw a brief demo of this at CBPCon. Yeah. So you can, maybe for our listeners, if they can visualize this, you can have whatever, a widget on the screen,
Starting point is 00:24:31 and change a number in your code for the size of the widget, for example, maybe, and have it immediately show the effects in your running live code. Is that correct? That's right, yeah. Yeah, we do it with an embedded LLVM compiler and some cunning tricks. So things like when it's compiling, it'll replace all the literals
Starting point is 00:24:58 with special secret global variables that can be changed while it's running. We also use tricks like it'll compile as little of the program as it can get away with, so you can have turnaround times of about a second, even if it has to actually syntactically recompile stuff. So it was inspired years ago by this demonstration that a guy called Brett Victor did, which made a big hit.
Starting point is 00:25:30 And he was showing this equivalent kind of thing, but using JavaScript, where he changed things in LiveCode and you could immediately see the results. And I basically tried to have a go of doing that in C++, and this is the result. So we're not really expecting people to use this as a full-blown IDE, but it's more for when you're working on one little piece of code, and maybe you're trying to get a piece of graphic design correct,
Starting point is 00:25:58 or synthesize an algorithm correct, and you're just fiddling with one little piece of code repeatedly. And rather than having to sit and wait and recompile and restart your app and go and find that page again in the app and see what the result is, you can just leave a window up at the side, and as you're changing the code and tweaking it, you'll see the results changing until it looks right.
Starting point is 00:26:21 And, yeah, we've already been finding it pretty useful internally. It sounds incredibly powerful for the GUI application development. Yeah, for GUIs it's a really big deal. But also now we've got some audio stuff going as well. It's also pretty useful for that. And it's extendable enough that people will probably find other uses for it. And is Projuicer also open source? It's not.
Starting point is 00:26:49 It's based on our other tool, the Introducer, which is open source, but the Projuicer itself isn't. Mainly because the actual build process involving LLVM is quite complicated, so it makes more sense for us to keep it closed source and distribute that like a normal, regular old-fashioned app. Okay. So what other features are there in Projuicer? It's really all about live coding.
Starting point is 00:27:21 I mean, the other things that it does are in the open source introducer, which are the project management functionality that it has. It's basically, I mean, this tool's been around in Juice for quite a few years now, but it lets you manage a whole project and export it for different IDEs so that you manage one set of files and one set of settings and then you can export that for Visual Studio, Xcode, and different compilers. We use this in all our teams at Roli and Traction
Starting point is 00:27:56 for managing our cross-platform builds because when you're actually targeting four or five platforms and you add a file, it's just a real pain in the neck to go through all of those projects and keep them all in sync. So people use things like CMake. We've got our visual tool for that.
Starting point is 00:28:15 So that's the main thing that people use this for. Okay. I saw there's also a new module being added to Juice with this release, the OSC module. Can you tell us about that? Yeah, OSC stands for Open Sound Control, I think. I think that's right. And it was originally intended as a replacement for the old audio MIDI standard,
Starting point is 00:28:38 which is the format that's used for communicating with synthesizer keyboards and things. And OSC is a very generic data transport mechanism. You can send just changes in named parameters across network connections. So, yeah, it's pretty widely used in music and also in things like live control of interactive graphic displays and this kind of thing. So, yeah, it's been a feature that people have requested quite a lot for years.
Starting point is 00:29:20 So we finally implemented it, and we're pretty proud of it because it's, I think ours is the only really fully, fully featured implementation that actually meets all the standards. Um, we looked at lots of others. Um, yeah, we tried to, it was a really nearly API so that we covered everything that the standard says, but also did it in a really usable way kind of sounds like now that you've got some corporate backing of your project in the last couple of years you've managed to you're able to roll out new features faster maybe yeah it's nice to be able to parallelize a bit yeah i can send send off a few threads and then they will come back and i join them and
Starting point is 00:30:02 and review all the changes and it's working pretty well. That sounds pretty nice actually. I could use that. Use a couple more Jasons? Or something. It's good. And with a project like G Suite we have so many different sub-features.
Starting point is 00:30:20 It's a problem that parallelizes pretty well. Is there anything else you'd like to brag on about the new upcoming release or the project in general? I don't want to harp on about it too much. People, I'm sure, will discover it. Yeah, no, I hope we get a few more non-audio people who hear the podcast and check it out, to be honest,
Starting point is 00:30:42 because, yeah, we're good for audio people, but I'd love more games people to discover it and more people doing sort of general apps in other fields. Come and check it out and tell us what you think of the projects and where you think we should go. You know, I personally make a point of following cross-platform libraries whenever I see news about them. I want to follow up on them.
Starting point is 00:31:05 And I don't know how, but Juice had completely missed my radar until I heard about it at CppCon. Right. You see, I hear that a lot, which is strange, because in our little world, it's really well-known. But you go outside the audio world, and somehow it's not hitting people's radars. Interesting. world and somehow it's uh yeah it's not hitting people's radars interesting um is the gui toolkit in juice pretty expansive like with the types of controls you can build with it um is there any shortcomings with what you can and can't build with the gui kit it's um it's pretty expansive
Starting point is 00:31:42 i mean the thing the thing about um audio stuff is lots and lots of audio tools have really customized GUIs. You see these really people come up with these crazy interfaces for all of their weird synthesizers and weird effects. So actually probably most of the things you see written in Juice don't look like Juice interfaces. They're things that people have completely customized down to the pixel level. So we try to make sure that's possible. Cool.
Starting point is 00:32:14 I also see this thing on the website about high-quality C++, how you intend for every class to be an example of best possible coding practices. How do you live up to such a high standard? Obsessively. Yeah, no, it's one of those things like when you're doing a public project list and you're getting people looking at your code, it forces you to take more of a pride in it so um and and one of the compliments i've had over the years is that people people say once they
Starting point is 00:32:52 once they've learned their way around the toolkit they kind of know where to find things they know they know what to expect something to be called because they kind of get the overall personality of it so this is something that while we are parallelizing and trying to get more people generating code for it, we're trying to keep that overall consistency and the overall personality of it the same by me really obsessing over every line that goes in, every character, every space in particular. But yeah, we do try to not just write code
Starting point is 00:33:26 that works and works efficiently, but which is a good example and a good example for people to follow. Is library... It's really important. I'm sorry. Is library using the latest compiler version, C++14? Oh, I wish we could.
Starting point is 00:33:41 Oh, okay. We can't even go to fully C++11 yet. We have a user base where we've still got that little portion who are stuck on the old C++03 compilers. Okay. And at some point, we're going to have to give them some hard love and say, sorry, guys, move on now. And we've obviously incorporated some C++11 stuff
Starting point is 00:34:04 with if-defs around it to make sure that it'll only be used and available on people who do have C++11. But the whole team are really looking forward to the day we can say, right, delete the old code. And we're going, it's all C++11 from now on. Because the library actually predates a bunch of stuff. It obviously predates things like the standard threading
Starting point is 00:34:28 and the atomics and some of the new nicer containers we've got. So, Juice actually contains all that stuff that I wrote a long time ago because we needed it. And it'd be really nice to be able to ditch that and move on and use the standard stuff that comes with all the compilers now. Yeah. So the Juice Summit is coming
Starting point is 00:34:49 up soon. Is there anything else you wanted to share about that? Yeah, we're really excited. This is going to be our first actual Juice event, conference. We've got, it's a two-day conference on November the 19th and 20th. It's in London
Starting point is 00:35:05 near our Roli's trendy East London offices and we've got some great speakers, a really packed program for two days, we've got some terrific speakers in, we've got a bunch of the guys from Google's Android team who do the audio actually the real coders
Starting point is 00:35:22 so they're coming in to talk to us about that, we've got um a guy called pete goodliffe who if you go to acc you'll probably see him there he's one of the the regular keynote speakers from that and he works as akai and um writes books about good programming and he's just a really great sort of inspiring speaker we've got um we've got a special guest not sure we can announce yet um and we've just been and this week we've just had in our submissions from users and we've had um i can't remember how many maybe 15 really great talks like wow on that so we it's gonna be two days of really packed um packed uh packed schedule.
Starting point is 00:36:06 It's mostly audio related, but we'll just have to see who turns up and what they want to talk about. Very cool. Well, is there anything else you wanted to share before we let you go, Julian? No, that's good. I've plugged my library in our event, so
Starting point is 00:36:22 that's terrific. Okay, well, where should people go to find more information about juice itself and more information about you juice.com is the place to start um juice that's juice without an i that's j-u-c-e and uh or roly.com and from there i'm sure you'll be able to find find your way to to me or to any other resources you need okay well thank you so much for your time. Thanks very much. Thank you.
Starting point is 00:36:49 Cheers. Thanks so much for listening as we chat about C++. I'd love to hear what you think of the podcast. Please let me know if we're discussing the stuff you're interested in, or if you have a suggestion for a topic, I'd love to hear that also. You can email all your thoughts to feedback at cppcast.com. I'd also appreciate if you can follow CppCast on Twitter and like CppCast on Facebook. And of course, you can find all that info and the show notes on the podcast website at cppcast.com. Theme music for this episode is provided by podcastthemes.com.

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