James: 00:08 Frank, Frank, Frank, we flew drones today and it was James: 00:11 great. Frank: 00:13 Yeah, there was a three hours of sunlight here in Seattle and we took advantage of every minute of them. We went right up to the big clouds rolling in. James: 00:23 It's very true. I mean by the end of the day we just saw those clouds roll in and we're like, we got to go get inside now. But it's very true. I mean I was very sad because I got this Maverick mini and the holidays and it's for all intents and purposes, rained every single day. And when you work a nine to five job and the sun goes down at four, you can't really be flying that drone around at night too much. I mean, you could, but I don't think I could to be honest with you. Frank: 00:50 You know, hilariously, when I've built my very first drones, I was working on them in the wintertime and when I finished them it was dark and it was rainy and I took my creations off the table out into the dark in the rain and I flew them around because it's Seattle. That's what we get. And whatever. Uh, so I, I don't mind, uh, torturing my little drones. But it's nice that you actually take care of yours and you actually look at the conditions outside. I just look at, as you know, it's going to land in a tree. It's going to land in a tree. Who am I to stop it? James: 01:22 Yeah, it's a free spirit. You do you a drone. But I will say I want to, before we get into our topic today, I do want to thank you because you made me invest, you know, 20 bucks here and there and these small little nano drones that we had talked about on the pod one with an another without the auto stabilizer. Keep in place mechanism. What's that thing called? Frank: 01:47 Uh, I don't know. Just call it like high level controls, position hold altitude, hold position hold. That's kinda some drones I call manual. You have to do all the fussing to kind of keep it in the air. Whereas other ones the computer is doing all the fussing. James: 02:03 Yeah. And I bought one of each and I, I trained on both of them and I, I really believe it really helped me. And then you gave me one of your home built drones and that didn't have any of the things and I think I did pretty okay. Frank: 02:15 Yeah. Let me actually compliment you on air publicly, so I don't regret this later. You did a great job. That was fantastic. I built a six propeller beast. It really is kind of a monster. It's, it's over powerful. Um, it's, yeah, I don't know. I love the thing. It's cut me a lot. It's injured me a lot. I used to have a controller on it and it would act randomly. And so you had this like giant weed whacker flying at you from the air. So I've learned over the years to be intimidated by it. But you just picked up the controller and you flew it like a pro and that was awesome to see. So fantastic work flying the beast. James: 02:55 Yeah, it was, uh, it was, it was a joy. And you can see some of our coverage on personal Twitters. Frank: 03:00 I tweeted out some photos. So definitely go check those out. If you're interested in the Joan [inaudible], you know my footage is mediocre drone footage. So the only good one is the one that I press a button and it just magically does a bunch of cool things. And you know what else I like to do, Frank? I love to write code and have some editor or IDE do magical things to make me more productive. And there's this thing out there that I know nothing about that you keep telling me to give a try cause I can write some C sharp in it. It's called Jupiter notebooks. Frank. That's right. That's right. James. That was a smooth transition. I'm not going to tramp over by even mentioning it. Uh, yes. Uh, let's talk about Jupiter notebooks. I've been wanting to talk about these for a while. Um, as a little bit late to the game myself, they've been around kind of forever. Frank: 03:47 They're a big technology and the Python space. So it's totally understandable why you haven't personally used them in a while. But I think that there are pretty awesome. And so yeah, let's talk about, um, uh, where to begin. Um, I don't know. You tell me. Well, the first place that I can imagine is what would I be doing in that? Like why do I need them? What, what, what is this? Why do I need it? Why? Right. So, boy, it's, it's kinda hard because it's one of those technologies that you kind of have to use to fully kinda grok and understand why it would fit in. But let me do my best to kind of describe it. If you've ever used an interactive development environment, that's funny. That's what IDE stands for, isn't it? I meant I meant it like using adjectives though. I can interactive one where, uh, your code is running at the same time that you're executing. Frank: 04:40 So this could run rebel. A rebel. A rappel. Yep, exactly. But ripples are so 1970s, like rebels are, here's a teletype and let's type in one line at a time. Like raffles are fun in the beginning, like basic had a rebel, but they're not fun. You can't write real code in them. It's annoying. So what do we have instead? We have giant, big text editors and then we write code, we run it, we see the results. So the question was, are there middle grounds between these two? Can we keep it interactive? Uh, and can we still have a code editor? So I have an app out there, James Kalka, you used Calco right. I have used Calca. Koch is really great because it allows me to do mathematical equations if for like any, so it's like a calculator, hence Kalka but you create sort of variables and methods and other things such as plots that help you visualize your data or just kind of help you create, um, a file, sort of a, uh, a, a file, maybe a, a notebook of, of, of data. So an example of what I would do in Calca is, um, maybe I want to figure out some mortgage James: 05:58 of a house, for example, and there's mortgage calculators out there, but you might have different, you know, how many months is it, how many years is it, what's your down payment? And then you can kind of just do equations like you were writing them in an IDE. Uh, but Calco will execute them in line. So that allows you to easily come up with these different little formulas that are there. And if you did payments over time or we're seeing like interest over time, you could plot that onto a, a very beautiful Frank: 06:29 chart. Thank you. That was a great promo there. I'd even pay you for that. That was great. Um, the part that I was going for there was that you could see the results of your code kinda as you're typing it in. So I'm trying to bridge that gap between, you know, the typing of the code and the execution of the code. And so Jupiter notebooks are another technology kind of playing in that same area. Like Calca they take documentation very seriously. So it's these long markdown documents. I mean, physically what a Jupiter notebook is is you're running a tiny little web server on your computer and you're using a web app running on that web server. That's what a Jupiter notebook really is. So let's start there. The concrete stuff. You run this Jupiter program and it loads up a little, a document editor and that document editor has cells kind of like Excel but not really. Frank: 07:22 Um, and it's all just, um, a vertical list of cell. So number one through a thousand, however much it takes for you to write a program, let's say, and then a cell can be taxed. So I could write Mark down, it could be a picture, I could just drag files in or it could be code. If you type in code, then when you run that South, the output of that code is put there. So you can think of it as kind of just a big hyper media document that also includes code execution. And it turns out to be a really nice development environment. Well, so what type of thing James: 08:02 are you developing and is this real production code? Is this more just a like a, uh, a playground, if you will, that you're Frank: 08:09 exploring? Well, it turns out it works really great in the scripting worlds. Um, so my first, um, I encountered was with, it was with Python and yeah, I was doing machine learning. I think that's where these notebooks have really taken off is in the machine learning world, but they're not at all tied to that problem. They're a general purpose code editor basically. Uh, but yeah, I ran into it using Python and you asked a great question like is this just a playground or not? Because I think that that's the real test here. Um, whether things are playgrounds or not. Number one, um, in some ways it is better than production code and um, because it's a simple document and if you get a, and you get their little Jupiter web server working, you can open the document. It's simplifies deployment, it's single file deployment. So you can check these things into get hub. Frank: 09:05 They're just text documents and you can move them around from server to server. So I think they passed the first test in that there are generally youthful, and let me give a proper example of in the machine learning world, it is so hard to get a machine set up that can actually solve these problems correctly. Getting the hardware set up, getting the OSTP set up, getting the drivers set setup. It's such a pain. And where these notebooks have really taken off is in your cloud hosted environments. So the cloud will put up a crazy machine and you just throw your document on it and it executes the document. So they became really useful in that world. Oh that is nifty. So you could set up the environment locally, but they're cloud enabled. So you could be doing number crunching, machine learning or other things besides machine learning and just let remote magical machines crunch that stuff. Frank: 10:00 Yeah. This is where it's designed as a web server really makes it shine because anywhere that you can run this little web server and it's not like something huge like I asked her, I'm Apache that you have to set up, it's just a little command line, you know, sets up a crappy little HTTP server, just like you know, it's easy to create an.net and it hosts the app through that. This is really another thing that inspired me to create wi because I saw that this deployment model of apps is kind of wonderful because you set up a cloud machine and as long as you can, you know, somehow execute a program on that machine, all of a sudden it's a server. All of a sudden it's a way to talk and interact with that machine. Pretty wonderful. That's pretty nice. So what, what really have you been using it for? You said you did Python stuff. I mean, James: 10:47 I know that you're, I know you're Frank, which means you can write every single code and write for every single platform and magically build drones and you're an electrician and you're in an electro LNG echo, electric genlock engineer and you're an app builder and you're a a wizard and you're a skier and you're, you're all these things. Frank actually don't know if you're all those things, but um, I like it w but the Python like where are you a Python person? Is that what kind of drove it to you? Or where you're like, Hey, I need to do machine learning. And everyone's talking about this Jupiter notebook, like what was your introduction? Frank: 11:21 Well, I'm a little bit lucky because I fell in love with Python many, many years ago. I can totally do the hipster thing of like, I would send a Python before it was cool. I'm totally can do that. But um, that's not really why I use Python for machine learning. You use it because that's where all the libraries are. All the best libraries. All the sample code is written in Python. So sure, I technically have the knowledge and skills to do it in other languages and all that. But you're just fighting the current. It's not good to do that. Just flow everyone else's using Python. I'll use Python. Uh, but the good news is, Oh, and then let me take another step back. I have always been into literate programming. Have you heard those terms before? I haven't heard them together, but let me take a stab at it and be incorrect. Frank: 12:12 So lit literate, is it, is it sorta like the code, like when you're writing the code by reading it back, it self explains it or is that something different? That is a good piece of it. Yes. Um, it has some specific definitions because um, Donald canoe, that art of computer programming, famous computer science guy, you know him, right? He made up the term. Um, and what he was struggling with was he was writing code. Any found kind of by necessity code is more complex than you would like it to be. We can always strive for the Ruby perfection of if you read the code, yo understand it, but it's just not true. Um, sometimes you have to explain something. This is the whole thing, like comments or no comments. I'm generally a no, no comments person, but where I put comments, I come on the heck out of it cause I realized this code is weird. Frank: 13:09 We're looking then it should be, let me explain why it makes sense. That makes sense. Yeah. Yeah. So he was struggling with that problem and he invented this thing called literate programming and he wrote um, tech and what became law tech. And at latex you might hear of it's um, the documentation system that everyone writes. There's papers in. But oddly enough, the program he wrote to process those papers, he wrote in this literate style, which meant he, he mixed the documentation of the code with the code itself. And then he wrote two programs. One program would take that mixed file and output a beautiful typeset book. Another program would take that and output C code [inaudible] stuff could actually compile. So he would author in this mixed environment and then use tools to generate those two artifacts that you actually need in the real world. This is an amazing idea. Frank: 14:02 If you go to Donald Kenneth's site and if you want to be a self studying computer science person like I am, you go to Donald Knuth site and you literally read everything on his website, it's going to take you years, it's fine. Get through it. And what you'll find is the majority of his work ever since he wrote tack and Nortech is written in this literate style, meaning every brilliant thing he's written code for is thoroughly documented in a beautiful English with excellent explanations. I've been in love with that style forever. I did my, uh, parts of my senior thesis in this style. I gave presentations in school, this style of programming. So it's just, it's a good piece of my history and I think it's a, it's a good piece of computer science that isn't lost. And I'll, I'll talk about how Jupiter embraces that, but I want to make sure that it lives on forever. Frank: 14:57 So everyone's homework go to Donald canoes site and read about this stuff. So yeah, Frank, that sounds very familiar to some other concepts that I'm used to even in the world of Don now, like try down Nan and we like Xamarin, like sketches or something and Swift playgrounds, those sort of, we're a hybrid and still are of here's some documentation that visualizes something side by side. The chunk of code that's going to execute is that similar Sana sort of this literate programs? It is. And so I would say all of these tools, everything you just mentioned, even my ID continuous is an extension of, I like to think Donald canoes ideas. So we're all trying to live off to his dreams and because it really is a better way to program. When we were talking about hot reload, um, I mean it's different from documentation but it's the idea of your code in the app can be side by side with each other too. Frank: 15:52 It's mixing all of these ideas, documentation and side by side execution with your code. So what I want to say is Jupiter is just a very well executed version of this that is language agnostic. It works with any programming language as long as it has the right tooling support. Um, and I think it really has shined for exactly the scenarios we talked about before with like the cloud and ease of setup and all of that. If you've never installed a Python program before, uh, you have to install Python first. You get this little package manager called PIP. They, we, we call them, uh, whatever new gets they call them, pit, pit, pit packages. God, I came and say, um, you use PIP and you can just say, um, PIP installed Jupiter and a pit bull and do it. Good job PIP. And then you can type Jupiter notebook and a server will run and this little documentation will start up. Frank: 16:51 You'll say file new. And it'll say, what language do you want? By default, it's only going to have Python installed. But you can start there even if you don't know Python, you know, whatever. Just start hitting buttons and then, um, but Frank, I'm not, I'm not a Python, you know, I'm not going to write Python is not really going to, I mean, it could happen, but you know, over the holidays from my holiday hack, let's just say someone did not. I want, they're going to ask you about that. Okay. So let me tell you, James, about some nice news that came out just recently. November, I guess. So we're a tiny bit late, but I've been excited to talk about this ever since. And that is, um, dot net core now officially supports Jupiter notebooks. And what does that mean? You can use C sharp and F sharp in Jupiter notebooks. Frank: 17:46 Round of applause. Round of applause. Bravo, Bravo. That's cool. So what, so I'm sure you've played with it and you've done all the things already. So this means now if I do some setup when I'd run that Jupiter notebook thing, I'll get a C sharp AF sharp option. And, and, or is it like the same? Can I do all the, the Jupiter II Python is stuff that I can do. Can I do that? And C sharp? Yep. So let me tell you, because we skipped over some of the fancy fun features of Jupiter that I want to talk about because it's good for reasons. Um, let's say I write a function and the function outputs an image and I execute that function in Jupiter. Well, it shows you the image. You know, I don't have to create a window and put an image view in it and then assign the image to the image view. Frank: 18:33 You know, I know it's four lines of code, but I don't want to write those four lines of code. It just does it. And that's nice. Um, if you generate some data, you can tell it, format this as a table and show it to me as a table. So it just has some nice, um, data visualization techniques. So those are fun things that come along with, if you integrate your language into the system. So probably the best thing out of all of this is my F sharp code because F sharp is a perfect little scripting language. It's so terse, you know, no curly braces, no, some I call it, um, it's perfect for scripting. Um, it gets all those features. You know, I, if I output HTML, it formats it as HTML. If I output images, it shows images. So I get all those fancy features from the languages I love. I love Python too, but F sharp is so cool. Frank: 19:29 Well that's also super nifty, especially for people trying to learn. If you were to document it as you go, it's also really nice cause you could share your Jupiter numb book with me and then I could just execute it. And if it's powered by the cloud then I don't have to do anything and I can, if you have done it correct, I assume you can kind of use these as little teaching tools of learning. I mean not just the language but even machine learning, which is why a lot of people use it. But you could use it as sort of a teaching 100% and that's why I think this, that's why I brought up Donald Knuth because I think that's the best realization of his dream so far because his whole point was he wanted to teach and educate people and especially in the machine learning world, some of those concepts are very difficult. Frank: 20:12 And so having a million notebooks around that you can just open up and browse through. Um, when you save these notebooks, they do something I never thought of but they like just, well Calca does this too because eventually I thought of it but have you just put the data right into the file? Even if it's an image and it's a text file, they just base 64 and code it and put it there because they found they want the simplicity of that single file because that's the most important thing and get hub has support for this. So if you go create a repo that has a bunch of Jupiter notebooks and it people can click through and get hub renders them just as well as Jupiter notebooks itself renders them and so it becomes a fantastic documentation aid. I can't wait to like if you have an open source library instead of all your like silly little getting started code snippets that may or may not work because they fall out of date constantly. Frank: 21:10 You should just have a getting started notebook and that renders beautiful Mark down and has code examples and pictures and stuff and that's really nifty. When it is something like this where it's pure logic or falls inside of the constraints of whatever that thing can do. So maybe it's using, you know, some charting library or an email [inaudible] or some other fundamental drawing inside the browser that that makes a lot of sense for a lot of the popular libraries. I can imagine like, you know, obviously all like the timing libraries, the different uh, data visualization, image processing, things like that. You could do a lot of really nifty notebooks. Yeah. You're talking about the, uh, you're avoiding talking about the pink elephant in the room is how do you build user interfaces with it and you can't [inaudible] just period. Yeah, yeah, yeah. This is, um, keep in mind the world that this is coming from is the scripting world. So they weren't, you could build UIs and Python, but it just wasn't a popular thing. These were scripts you execute queued at the command line. So moving that command line world into this crazy free form, hyper media document world, I think is a pretty cool advancement. I almost look at it, it's like a sidestep to user interfaces. Like user interfaces was one solution to the problem. I see these interactive notebooks as a second solution. Frank: 22:41 Yeah, it was really nifty. It makes a lot of sense to me. And now that it is in C sharp, I'm looking at some of the documentation from in blog from Maria. It just sort of, I like that you can just say like here's a person who has a list of people classes and just say display and it just gives you this beautiful little index of things you can just throw any data at. And it just puts it in a grid and that's really nice. Um, cause again it's about visualizing the data and understanding the data and uh, that's really cool. There was a, there was a sneaky little trick they did with Bravo and that they talk about but they don't talk about, but I don't think people fully appreciate well enough yet is that they created a second language, a second version of C sharp and that is the scripting mode of the sharp, where a lot of the language rules that we think are rules, they kind of throw them away to make it a better scripting language. Frank: 23:37 And Rosalyn can be put into that scripting language mode. And I'm pretty sure that's the mode that they're running these Jupiter notebooks. And, and it makes it really a much, honestly just a more fun language to use. Um, because you don't have to worry about namespace namespaces, you don't have to worry about, um, you can have global decorations, global variables, global variables, that's all fine in the scripting version of C sharp, uh, not meant for production use, but definitely works out beautifully in these environments. And yeah, it comes with all that free visualize stations, visualization stuff that has been built into Jupiter for 10 years now. You know, Jupiter is a mature product. That's what's so cool about it. That's really cool. Okay, so we know what it is. We know how you can use it. I guess the final question that I have for you is like why should I use it in general? Frank: 24:32 I mean not like the like there is a why, but I want to know like what is the, what do I fully get out of it? Like what is the end end product in which Frank is delivering and where is the absolute value? The absolute value for me is when I'm exploring new ideas, uh, particularly ones not related to the user interface because of the a four mentioned limitations. Um, but I think about, I work on a lot of things that don't need UIs in the beginning but could hugely benefit from some visualization. So let's just start with, um, I'm thinking about a data model for an app. Maybe this is a good way to store data. I can manipulate it this way. I could update the UI this way. It'll be efficient at this and that. Let's start playing around with that and start typing it in. Frank: 25:22 I don't want to make these sound like playgrounds, like I'm just playing. This is a better way to experiment with code than actually going file new project, making up a crazy project name. Then do you load up, get all these things kind of get in the way of you just wanting to try out some ideas. And that's where I think the shines. Um, so I, I sometimes I use F sharp, uh, scripts sometimes and I use F sharp interactive using tricky key combinations and IDs that works. But I think that these Jupiter notebooks are just us, a much big hair, bigger improvement over that. James: 26:05 I couldn't really see them being very nice too when I'm exploring API APIs all the time. And I just, every time I am exploring a web API, Oh, what do I gotta do? I gotta go spin up an app. I gotta go put a bunch of code and then I gotta debug through it. I got to get the Jason and this one you could just sorta Frank: 26:22 to slap it in. Yeah. Yup, yup. Um, gosh, I, I hope that they do like F sharp. Just got new, get references in the scripting mode so you can like hashtag include, um, Xamarin essentials and all sudden I can just start playing with Xamarin and essentials inside of the thing. Anything that would run in.net core, I should say. This is all dotnet core stuff. Um, yeah. Uh, now the text editor is not nearly as sophisticated as visual studio codes, text editor. Um, mainly because, um, well this was written for Python and they just didn't have the kind of IDs that we. Dot. Netters have taken for granted for 20 years. We have such good ideas. Um, most people don't deal with us, so they have some basic stuff. They have, um, tab completion. So at least you have some form of IntelliSense, uh, where you can start typing in hit tab and an okapi are few options so that, that's pretty nice. Frank: 27:22 But James, here's the real mind. Bender, visual studio code has native support for Jupiter notebooks and they have a refined editing experience within the IDE. Now this is crazy because now we're going to use an IDE to edit no fucks without the web server though. Does that sound intriguing? Oh, okay. It does kind of sound intriguing to me cause I like V S code. It opens really fast. I do a lot of lightweight code editing inside of it. I do a lot of, yeah, I would almost call it almost. That's what I write my scripts. I'm kind of visualizing Jason or I'm opening files and editing them really quick. I'm not doing full apps. You can and not be able to do, but I don't necessarily, so it seems sorta right up my alley a little bit. Well, what it really comes down to is visual studio code's Python support is way better than the text editor built into a Jupiter notebooks itself. Frank: 28:21 And so it turns out the EVs code, the ease extension is way better than Jupiter itself. Uh, but the good is is it uses all the same technology. So all this.net stuff actually works there too. So you get, yeah. So you get the full amazing Rosalind C-sharp editor inside these notebooks. You get the F sharp editor if you're using [inaudible]. I think that's true. I have to check that. But I think you're getting the [inaudible] F sharp extensions. Uh, you're certainly getting the Python extensions. Thank goodness there's so much better. So that's cool because, um, the S code has actually really good C-sharp editing. I'm don't anyone out there who's used it knows it's pretty darn good. And so you can have that in the notebook environment. Awesome. That's pretty rad. Yeah. I mean, yeah, that also seems like the barrier of entry is even lower. You just install vs code hit an extension done. Frank: 29:16 Yeah. I don't even know how that extension works. I don't know if you have to have a Jupiter and I imagine you have to have Jupiter installed for it to work, but I don't know. You know, it's one of those things. Um, but either, either way it's super cool and I just huge shout out to that team because, uh, you know, it's funny, I still use Jupiter mostly because that editor's fine, but sometimes your scripts get big and complicated and you want a sophisticated editor to help you out. And for those times I just drag the file over to vs code and magic happens just for the fact that you can use your theme, you know, and you can use your shortcuts that you're used to. I think that's a pretty nice, uh, addition to, yeah. Uh, it's funny because, uh, they use that cell metaphor, so it's a stack set of cells. Frank: 30:07 It's like a stack view and you edit one cell at a time and the commands to edit those cells are actually the VI commands. So it took me forever to learn how to like navigate around the document using the keyboard until it clicked. I'm like, Oh my God, they bound VI. I'm like, I know VI. I know. Yes. Finally I could use this thing. I'm like, I finally, I understand this thing or as a vs code's a little more friendly. It works the way you want it to. Yeah. Uh, and then I want to just cap this off by saying there was that one last part where I said Donald canoes really got this right where he understood that I've created this artifact, that emergencies two worlds. Um, but at some point I want to generate just plain old C code from it and you can do that too. Frank: 30:56 So from the command line you write out one of these notebooks and you can have it spit out just a plain code file itself. And so I do fancy tricks where I'll be in a notebook and I'll be editing with a notebook. But then at the command line I can launch it on another machine, not as the notebook, but it generates the script first and then executes just the script. And so you're doing a code gen from the notebook itself and so you really could use it in production. Wow. That's pretty cool. That is nifty. Blows my mind Frank. There's always something. I know nothing. I feel like I know nothing. I feel like I knew stuff and then sometimes we talk about something and I know nothing at all and it blows my mind and I'm like, Hmm. I think I think I could use that for something. Frank: 31:42 Even if anything, just to kind of have a fun weekend of exploration where there's really no big hurdle to get up and running and just give it a try. Yeah, and I think this one is a very small hurdle. If you have.net core installed, I think you have to run two more command line command lines and you'll have this puppy up and running. Or if that vs code extension truly is magical, maybe you don't even have to do anything. I don't know. Those guys, code extensions are crazy. I don't know how they work. I have no idea that they are, they are a thing of, of beauty and magic. Yeah. Boggles the mind. So, yeah. All right. Thank you for letting me talk about this puppy. Ivan. I was such a nerd for this kind of stuff in school. I'm still a nerd for it. Frank: 32:31 Now. Again, see my IDE, continuous C Kalka. I'm basically always working on this problem and so it's just wonderful for me to see, um, people really embrace it. And so I hope the dotnet community can start embracing it too. Yeah. I'm going to go give it a try. I got a weekend hack project. I'm excited. So. All right, Frank. Well thanks for, uh, thanks for inspiring me to go learn yet something new again, and I love it. I always love learning stuff, so I'm going to go do that. All right, well, I know I've kept you from your beer for the night, so go off adventure. I'm sure you're hitting up ribbons or something, so it's pretty much life. Yep. All right, well, thank you so much again for flying drones with me. I appreciate it. Maybe we'll get out again in the future, but until we do, this has been yet another merge conflict. I'm James Monson Magno James: 33:20 and I'm Frank Kroger. Thanks for listening. Please.