Speaker 1: M hmmm.
Speaker 2: Hello and welcome to another episode of Adventures in dot Net.
Speaker 2: I'm Sean Klobo and with me today is your co
Speaker 2: host Wylou And happy birthday, Caleb. Since you're not here,
Speaker 2: you're not having fun, So it's not gonna make it today.
Speaker 3: Dressed up today, he's got to get dressed up.
Speaker 2: Well, at least he can go out. You know, he's
Speaker 2: got vaccinated and all that kind of stuff. So hopefully
Speaker 2: everything getting is good down in New Orleans.
Speaker 3: Another thing untill I dressed up, and it also have
Speaker 3: to wear a suit.
Speaker 2: I no, no, I met his wife really to say,
Speaker 2: you know, is he gonna make you know? How how
Speaker 2: fancy is a dress up gonna be tonight? So it
Speaker 2: depends on all.
Speaker 3: The traditions in New Orleans? Maybe yes, anyway, so.
Speaker 2: They got weird traditions in New Orleans. So it's strange,
Speaker 2: right right, Caleb. Oh yeah, you can't tell me. So
Speaker 2: why today on this show? I think we're going to
Speaker 2: go back to school. I heard what we're talking about.
Speaker 2: Notebook notebooks, you know, I remember those in college or
Speaker 2: maybe that. Maybe it's not that kind of notebook today.
Speaker 2: Notebook computers now not notebook computers why don't welcome our guest,
Speaker 2: Eric Potter. Welcome Erek, Thanks guys, great to be on
Speaker 2: the show.
Speaker 1: Looking forward talking to you guys.
Speaker 2: What kind of notebooks are we talking about today.
Speaker 1: Let's start with a little background, because this is one
Speaker 1: of those concepts that became big in another part of
Speaker 1: the developer world and is starting to make its way
Speaker 1: into the dot net world. But there was this idea
Speaker 1: that really started in the Python space with a tool
Speaker 1: called Jupiter Notebook notebooks, and the idea is that you
Speaker 1: can have an interesting mix of code and text, so
Speaker 1: you can have a document this this Jupiter Notebook document
Speaker 1: where you can alternate back and forth between having text
Speaker 1: in marked and your Python code. And the code is
Speaker 1: actually organized into these little cells, and each cell is
Speaker 1: defined independently, so you could just have like eight lines
Speaker 1: of code and you could run those eight lines of
Speaker 1: code independently. And in the Python space, this kind of
Speaker 1: became big in the data community because you might have
Speaker 1: a few lines of code where you pull in a
Speaker 1: bunch of data from a CSV and then you take
Speaker 1: that data and run it through a charting library, or
Speaker 1: maybe just want to blow it out and filter it
Speaker 1: in a table, or maybe you want to do some
Speaker 1: aggregations on it, but as you're doing it, you can
Speaker 1: be documenting what you're doing, and then that documentation either
Speaker 1: then lives for you or lives on for someone else
Speaker 1: to take over this notebook in the future. But either way,
Speaker 1: we now have a way to have a much more
Speaker 1: interactive experience than a historical Python programming experience where you
Speaker 1: would write the Python file and then just execute it.
Speaker 1: So this concept is making its way into the dot
Speaker 1: net space with these dot net notebooks. And so there's
Speaker 1: a couple of terms here. There is the Visual Studio
Speaker 1: Code notebooks, which that is what allows you to have
Speaker 1: these notebooks in visual studio code, and then there are
Speaker 1: a couple of different variations on that. So there you
Speaker 1: can have the c sharp sharp and JavaScript notebooks. There's
Speaker 1: actually another kind of notebook for SQL, and so you
Speaker 1: can have these different interactive environments right in Visual studio code.
Speaker 1: It used to be, I think in Python you kind
Speaker 1: of had to have a larger tool called Anaconda installed
Speaker 1: to be able to create Python notebooks or Jupidter notebooks,
Speaker 1: and there had been an earlier version where you could
Speaker 1: run sea sharp in an Anaconda notebook but now they've
Speaker 1: got it, so you can do it all in visual
Speaker 1: Studio code with the visual Studio code extension for dot
Speaker 1: net notebooks.
Speaker 2: So go ahead.
Speaker 3: Why so it actually runs the code it so it's
Speaker 3: kind of a white to I guess, start notepadding, stop
Speaker 3: documenting something, but by putting code that actually runs.
Speaker 2: Yeah.
Speaker 1: So let's say that you are exploring or documenting something
Speaker 1: in a new Newgate package, so maybe something like system
Speaker 1: dot text dot Jason, and you want to see how
Speaker 1: that serializes your objects. First of all, there is a
Speaker 1: special syntax for pulling new GET packages in, so you know,
Speaker 1: with one line of code in your notebook you can
Speaker 1: pull down a new GET package and start working with it.
Speaker 1: And so then you could define your object and then
Speaker 1: you could serialize and de serialize it right in the notebook,
Speaker 1: and you could see the string output that you're getting
Speaker 1: when you serialize it. And if you want to play
Speaker 1: around with the different serialization options, right, you just have
Speaker 1: a blocker code that's like setting those options differently. You
Speaker 1: can run it like, okay, I want to see what
Speaker 1: happens when I serialize it with this option on. Okay,
Speaker 1: now I want to see what I'm going to change
Speaker 1: the option. I want see how serializes with this set
Speaker 1: of options. And so it's very interactive in terms of,
Speaker 1: you know, having chunks of code that that you can run.
Speaker 1: Most developers that I know, especially C sharp developers, have
Speaker 1: some folder somewhere on their hard drive that has like
Speaker 1: console application one, console application, two, console application seventy five,
Speaker 1: you know, right, because there's always those things where it's like, oh,
Speaker 1: I just I need to be able to drop in
Speaker 1: some C Sharp cod and see what this does. Well,
Speaker 1: the nice thing about these notebooks it's like, oh, I
Speaker 1: could just drop in here and see what happens in
Speaker 1: visual code. Visual studio code obviously opens really fast, so
Speaker 1: it's a really nice way to quickly get in there.
Speaker 1: But then the nice thing about it is that these
Speaker 1: notebook files have an extension of ip y and B,
Speaker 1: which is a Python holder. So Python holdover from Interactive
Speaker 1: Python Notebook. So I P y and B and that's
Speaker 1: still the extension even if you're using C sharp.
Speaker 3: So any language would have still be the same extension as.
Speaker 1: Far as I know, and C sharp is the one
Speaker 1: that I've done the most with. I mean, that's just
Speaker 1: the language I work in the most I've seen really
Speaker 1: interesting demos with f sharp. I know it supports JavaScript
Speaker 1: as well, and those are all the same extension. But
Speaker 1: I could you know, take that ip y n B
Speaker 1: file which is just a Jason file and you know,
Speaker 1: check it in, or I could email to my teammates
Speaker 1: and so maybe I want to document like, hey, here's
Speaker 1: how we're going to use the serialization technique on our project.
Speaker 1: And instead of just like writing up an email and
Speaker 1: sending it to them like hey, here's this, here's this
Speaker 1: interactive bit. You try it. See if you know, see
Speaker 1: if you agree with my decision.
Speaker 3: So can you put in like different libraries and things
Speaker 3: like that or is it just that is the context
Speaker 3: just whatever your coding on local variables?
Speaker 1: No, So you can reference assemblies that are on your machine.
Speaker 1: So if you have a you know, a class library
Speaker 1: that you're using in whatever project you're on, you can
Speaker 1: reference that right from your hard drive. Or like I said,
Speaker 1: if there is a new get package and you can
Speaker 1: pull that down to okay, yeah cool.
Speaker 2: So is it like a like a wiki with executable
Speaker 2: stuff in it.
Speaker 1: That's a really interesting way to think about it, because,
Speaker 1: like a lot of wikis, it does support markdown, right,
Speaker 1: so I could, I could have tables, I could, I
Speaker 1: can actually have images as if I want, you know,
Speaker 1: because markdown has syntax to pull in images. So yeah,
Speaker 1: that's a really interesting way to think about it because
Speaker 1: it is kind of like that it's it's a wiki,
Speaker 1: but you can actually execute the code right there.
Speaker 3: I didn't like stack overflow. I think it has something
Speaker 3: similar to that in which when you pay some code
Speaker 3: in you have the option to run it. If it's
Speaker 3: a certain language, then it actually shows you the output
Speaker 3: as well, if if you quote a block of tech
Speaker 3: block of code. So yeah, I can see it myself
Speaker 3: using it as well, because like for me, like now
Speaker 3: you're going on about developers using the console app on
Speaker 3: two free, and I'm really big on documenting literally everything
Speaker 3: I like on a program. Maybe like twenty five percent
Speaker 3: of my time is this going back in every by
Speaker 3: error message or or whatever. Or even if I solve
Speaker 3: a problem certain way, I'll just I'll just we've helped
Speaker 3: one note and just document it, you know, just s
Speaker 3: beeacause I I've got got a bad memory, and like
Speaker 3: the so many times going oh I fixed this problem before,
Speaker 3: and it's like where do I look kind of thing. So,
Speaker 3: so yeah, I can really see myself using this and
Speaker 3: then just kind of putting in code that would just
Speaker 3: run for me, you know, instead of just putting in
Speaker 3: a block of code that may not may not run.
Speaker 2: So yeah, so how do you get started? You know,
Speaker 2: what's it? What's it take to get started? And what's
Speaker 2: a good place to start at for somebody that hasn't
Speaker 2: done a notebook before?
Speaker 1: All right, So in Visual Studio Code, if you go
Speaker 1: to the extension library, then there is an extension you
Speaker 1: can search for called dot Net Interactive Notebooks, and it
Speaker 1: is still listed as a preview by It's really working
Speaker 1: pretty well. I've had it installed for a couple of
Speaker 1: months now. But if you install the preview then you
Speaker 1: can start creating these notebooks. There's actually some new commands
Speaker 1: that they have in the Visual studio Code command bar.
Speaker 1: Looking at the documentation here, you do obviously have to
Speaker 1: have Visual studio Code installed, and you have to have
Speaker 1: dot Net five installed. I guess I was at this
Speaker 1: point it's kind of a safe assumption that all developers
Speaker 1: have Visual studio Code installed. That's becoming very ubiquitous. You
Speaker 1: do need the five SDK installed as well, apparently.
Speaker 3: So what about if you said you could just copy
Speaker 3: these new get files to the developers, Like, if you've
Speaker 3: got new get packages, do the nu get packages kind
Speaker 3: of come or at least the references come with the
Speaker 3: file or it's just an assumption that would have it installed.
Speaker 1: So there is actually a special syntax for pulling down
Speaker 1: new get packages. So, again sticking with the example of
Speaker 1: system dot text dot json, if I have near the
Speaker 1: top of my notebook file pound are quote new gut
Speaker 1: colon system dot text dot json quote right, so that
Speaker 1: line of code, when I execute that line in the notebook,
Speaker 1: then it will install that Newgate package. And so what
Speaker 1: I could do, you know, in the case you're talking
Speaker 1: about where I if I email you my notebook, you
Speaker 1: would have to execute that block. But then once you
Speaker 1: had done that, then you would have the new get
Speaker 1: packages downloaded and installed. Now, obviously you can use that
Speaker 1: pound our syntax to reference assemblies that are on your
Speaker 1: hard drive and so like if if I was just
Speaker 1: like referencing something that the path was like c colon
Speaker 1: users e Potter, right, then that wouldn't be on your machine.
Speaker 1: But you know, if I was actually using the Newgate
Speaker 1: reference then then you could download it yourself.
Speaker 3: So what use cases do you see for this, Like,
Speaker 3: I mean, I think identify that for me, it would
Speaker 3: be mainly for documentary in my own stuff, But do
Speaker 3: you see any other use cases that might be useful?
Speaker 1: So, yeah, documentation, I think is a big one. I
Speaker 1: think the one that the Python community is really embraced
Speaker 1: is this idea of data exploration. And you know, I'll
Speaker 1: include code exploration in that too, But a lot of
Speaker 1: times we're working with a large data set and you know,
Speaker 1: we could query it in you know, simple server management studio,
Speaker 1: but I don't know, maybe maybe it comes from a
Speaker 1: CSV or you know, some other data source, And what
Speaker 1: we want is the ability to look at some data,
Speaker 1: do some kind of aggregation on it beyond what we
Speaker 1: could just do in SQL, maybe generate some charts or
Speaker 1: generate some other kind of visualization, and I could do
Speaker 1: that really quickly. One of the things that Microsoft kind
Speaker 1: of touts with their Notebook extension is that it's got
Speaker 1: good support for a library called xplot dot plotly, so
Speaker 1: what you could do is you could have some data
Speaker 1: source that you're going to pull in and then render
Speaker 1: a visual using xplot and all that right in the notebook. Now,
Speaker 1: the nice thing is that because it's interactive, you know,
Speaker 1: you could be maybe tweaking your filters and then tweaking
Speaker 1: your visualization or tweaking your data source, and you can
Speaker 1: kind of it it. You have this really fast feedback
Speaker 1: loop of you know, being able to really tweak the
Speaker 1: experience that you want and tweak the visual you want
Speaker 1: really easily. So yeah, there's that whole exploration. So I'd
Speaker 1: say that's probably the second big use case. The third one,
Speaker 1: and maybe this is a little more specific to me,
Speaker 1: is actually with teaching. So I spend a non trivial
Speaker 1: amount of time mentoring developers at my employer. I work
Speaker 1: for a company called a Pair of Software, and we're
Speaker 1: really big on teaching and training and empowering our younger developers,
Speaker 1: and so I can see myself documenting some like fundamental
Speaker 1: concepts and handing this over to them. I also sometimes
Speaker 1: teach as an adjunct at a local university, and having
Speaker 1: the ability to have this interactive teaching tool I think
Speaker 1: is really powerful. One of the challenges that I've always
Speaker 1: had in the past, no matter where I'm teaching, is
Speaker 1: that which mechanism do I want to use to teach
Speaker 1: about code. So I could just have C sharp code
Speaker 1: with comments that explain the concepts as we're trying to
Speaker 1: go through. But that has some limitations. There's there's no graphics.
Speaker 1: I can't like have an image that's that shows up
Speaker 1: in comments in a C sharp file. You know, a
Speaker 1: lot of teaching historically has done with PowerPoint, which in
Speaker 1: power you have the opposite problem where you can have
Speaker 1: all these really interesting visualizations, but then the code is
Speaker 1: maybe just a screenshot and so that it's not interactive
Speaker 1: at all. I think having notebooks becomes this really powerful
Speaker 1: teaching tool where I could say, okay, here's the concept.
Speaker 1: Maybe I've got some graphic that represents what conceptually is
Speaker 1: trying to happen. But then I can have the code
Speaker 1: and they can run it from themselves and they can
Speaker 1: change it and they can explore and see what the
Speaker 1: code does. I think the other thing that could be
Speaker 1: really interesting is that you could almost have like interactive
Speaker 1: problems as you go, so you're explaining a concepts and
Speaker 1: be like, okay, now you write the ten lines of
Speaker 1: code that generate this output. And so you could learn
Speaker 1: in a much more interactive way without having to subject
Speaker 1: yourself to the limitations of only code or only PowerPoint
Speaker 1: or whatever.
Speaker 3: Yeah, that's really cool. So can you embed it into
Speaker 3: a like a web page? You think that's one. I'm thinking,
Speaker 3: like the professor puts an assignment up and yeah, you
Speaker 3: literally you know, it has the description and mockdown and
Speaker 3: shots and all that stuff, and then they're just still
Speaker 3: in the code bit.
Speaker 1: So I think from the things that I've read, and
Speaker 1: I don't have any special knowledge here, but I think
Speaker 1: that it's something they would like to get to. But
Speaker 1: you do have a challenge there in that if it's
Speaker 1: running on a web page somewhere, you have to run
Speaker 1: the C sharp compiler.
Speaker 3: Yeah, so you'd have to back in. Well maybe you
Speaker 3: could use assembly web assembly something.
Speaker 1: Yeah, maybe there's a really interesting potential there that, like
Speaker 1: could you run roslin in in Blazer. I don't know
Speaker 1: if that's the thing that you can do or not.
Speaker 1: Maybe it is. I know that one of the things
Speaker 1: I think they were doing with the try dot net website.
Speaker 1: I think maybe with that they were actually shipping the
Speaker 1: code back to some server for it to be compiled,
Speaker 1: and they would send the assembly forward.
Speaker 2: They switched that over to Blazer.
Speaker 1: So yeah, okay, so maybe and maybe that's the thing,
Speaker 1: is that these notebooks will eventually be able to run
Speaker 1: right in Blazer. The best solution I've seen right now
Speaker 1: is that there is a website again from the Python
Speaker 1: community called Binder, and you can post notebooks on Binder.
Speaker 1: And Binder does support the dot net runtime, so you
Speaker 1: can run your c sharp notebooks on Binder if that's
Speaker 1: how you want to share them.
Speaker 3: But you said it also supports jss R.
Speaker 2: Yeah.
Speaker 3: Yeah, yeah, maybe that part of it you could. But
Speaker 3: but you said it's also just in previews, so maybe
Speaker 3: it is just a feature that that haven't got through yet. Yeah,
Speaker 3: is this a Microsoft created thing or yeah.
Speaker 1: The extension I was going to double check. Yeah, the
Speaker 1: author on the extension is Microsoft COO.
Speaker 2: So is it is it limited to like console type applications.
Speaker 2: You talked about xblot, but that's not really like a
Speaker 2: gooey type of thing, so where you can build forms
Speaker 2: or do some sort of interactivity.
Speaker 1: So one of the things they have built in is
Speaker 1: a display method, So if I have an object, I
Speaker 1: can display that object and it will render all of
Speaker 1: the properties and their values in a table. So there
Speaker 1: is a little bit more that's graphical than just you know,
Speaker 1: standard console output. I don't. It's just not something i've
Speaker 1: run into. I know that there's different HTML output options
Speaker 1: you can do. I can't speak authoritatively to those, and
Speaker 1: I did just see on Twitter very recently someone from
Speaker 1: the community added a plug in that could render Razor,
Speaker 1: and so then you could have a notebook that could
Speaker 1: render all kinds of different Web outputs with anything you
Speaker 1: do with Razor, you could do in the notebook. Again,
Speaker 1: that's on my list of things to investigate. I haven't
Speaker 1: looked at at what they've done yet, and I don't
Speaker 1: know how stable that package is, but I am very
Speaker 1: excited about it.
Speaker 3: So it displays the output of the code you run.
Speaker 3: So I'm guessing that then it assumes that the code
Speaker 3: that you run has to have a determinant output. Like
Speaker 3: you couldn't just put like a mass dot random path
Speaker 3: in there, because it would just be a line in
Speaker 3: that that would just give you a completely different output
Speaker 3: every time we run it. What would happened then, I.
Speaker 1: Mean, you could certainly have random outputs, right is, if
Speaker 1: you had a random number generator and you wanted to
Speaker 1: run the code block which they call these blocks cells, right,
Speaker 1: so you can just execute the cell over and over
Speaker 1: again like any programming thing. You wouldn't want your cell
Speaker 1: to get stuck in some kind of infinite loop. But
Speaker 1: assuming assuming that your cell does run the completion in
Speaker 1: you know, the same amount of time, then yeah, I
Speaker 1: would display the output.
Speaker 3: So does it run at it every time you open
Speaker 3: the file or does it run it once and then
Speaker 3: store the output?
Speaker 1: So each cell can be executed individually. So there's actually
Speaker 1: a little graphical play button. So let's say I've got
Speaker 1: three lines of code in one cell and I hit
Speaker 1: the play button, execute it. Or there's a keyboard truck two.
Speaker 1: But I could then have my markdown that explained what
Speaker 1: just happened. I have another cell and I could execute
Speaker 1: that one. Now all of these cells execute in the
Speaker 1: same scope. So maybe I want to define a class
Speaker 1: in one cell and then you have some explanation and
Speaker 1: then instantiate an object of that class in a cell
Speaker 1: that's down lower. Then you could totally do that. Like
Speaker 1: I said, I was teaching a local university and I
Speaker 1: was trying to explain the concept of inheritance and overwriting, right,
Speaker 1: and so we had this notebook where there was a
Speaker 1: class at the top that had some virtual methods, and
Speaker 1: then there were cells down below that had various iterations
Speaker 1: or you know, various versions of how you override methods
Speaker 1: and what that looks like down below. So I think
Speaker 1: there is also an option to just like execute everything
Speaker 1: in the file if you just want to jump right.
Speaker 3: To the end. Yeah, I can see my folf. Do
Speaker 3: you think it quite a lot for presentations and things
Speaker 3: of that. I run a local meet up as well,
Speaker 3: so it it'd be a really good way to illustrate
Speaker 3: the code that you're trying to run, just by running
Speaker 3: it one bit at a time and then putting some
Speaker 3: nice mock down, you know, describe what you're doing.
Speaker 2: Yeah.
Speaker 1: I imagine that going forward, that when I'm you know,
Speaker 1: in a user group scenario or just explaining something to
Speaker 1: my teammates anytime when in the past I would have
Speaker 1: thought like, oh, I just dropped this code into PowerPoint, Like,
Speaker 1: I think probably going forward, I'm just going to use
Speaker 1: these notebooks.
Speaker 2: Yeah. So I've typically used like link pad for making
Speaker 2: my little one off test applications and things like that.
Speaker 2: This sounds like a better way to be more organized
Speaker 2: with multiple you know, test apps and things like that,
Speaker 2: you know, with documentation.
Speaker 1: So that's a really interesting comparison, right because link pad
Speaker 1: is a wonderful tool, and I don't want say anything
Speaker 1: bad about it, but it has a little bit of
Speaker 1: a different goal because you can't have markdown right, So
Speaker 1: it's a great link Pad is a great way to say,
Speaker 1: here's these thirty lines of code or these fifteen lines
Speaker 1: of code, and I just want to execute that. But
Speaker 1: can I hit the data base, the night pad stuff,
Speaker 1: link pad, notebook? Yeah, because again you could pull in
Speaker 1: a new get packaged, right, so there's no reason why
Speaker 1: you couldn't use enterity framework or in one of the
Speaker 1: micro rms, whatever you want to do. But yeah, getting
Speaker 1: back to the link pad, I love link pad, but
Speaker 1: it's more that's more of like a like I just
Speaker 1: want to try it as a small stiput of code.
Speaker 1: If I want to try it out and document that,
Speaker 1: I would lean towards notebooks and the other tool in
Speaker 1: this space that I think is one of the best
Speaker 1: kept secrets in the dot no space is c sharp Interactive.
Speaker 1: You guys ever played around with the c sharp interactive environments?
Speaker 3: No? What's that?
Speaker 1: The lat no so live share is also delightful. That's
Speaker 1: a whole another thing. Right, So, if you have visual
Speaker 1: Raudio twenty nineteen installed, if you open the developer command
Speaker 1: prompt and type CSI, you will be dropped into an
Speaker 1: interactive sea sharp environment, right. An environment that is, you
Speaker 1: know what are often called a repel, a read de
Speaker 1: val print loop. Right, so you have the ability just
Speaker 1: at the command line to start banking around with different
Speaker 1: C sharp code snippets, you know, which can be really useful.
Speaker 1: The two things that I end up using it for
Speaker 1: are more sophisticated version variations of what you can do
Speaker 1: with string dot format, right, because there's always that thing like, oh,
Speaker 1: I know there's a way I can format the state,
Speaker 1: and I can't remember the exact syntax if you want
Speaker 1: to specify how many decimal places you want after a
Speaker 1: number and string dot format, like, I can never remember
Speaker 1: the exact syntax, and I could google it, or I
Speaker 1: could just open C sharp Interactive and try it right there.
Speaker 1: And then there's also a C sharp interactive window in
Speaker 1: visual Studio, so if you already have visual Studio open,
Speaker 1: you can drop in and check out you know, just
Speaker 1: small all snippets of C sharp code so again that's
Speaker 1: not exactly what I was here to talk about. But
Speaker 1: if you're not, that's cold. Yeah, if you've never played
Speaker 1: around with C sharp Interactive, which, like I said, the
Speaker 1: command line is a CSI. If you have Visual Studio installed,
Speaker 1: you already have it installed, and so yeah, absolutely check
Speaker 1: that out too.
Speaker 2: That seems like something to be should be more prominent
Speaker 2: in the in the idee to discover it rather than
Speaker 2: have new to go to developer command prompt and then
Speaker 2: type CSI and then do all this stuff.
Speaker 1: Well, and you can get to it in Visual Studio too,
Speaker 1: So if you go to the Visual Studio tools window,
Speaker 1: I apologize for not having open like if I think
Speaker 1: if you just go to visual Studio, was it like
Speaker 1: view or views? You can find c sharp Interactive right
Speaker 1: in there. It's pretty cool. It's hugely underutilized.
Speaker 2: All right, so you go, oh, go ahead if you
Speaker 2: got a question.
Speaker 3: Yep, Like with vision Study, I can kind of understand
Speaker 3: that it is such a big application. There's totally things
Speaker 3: that I worked on a v and I probably haven't
Speaker 3: discovered that it can do, to be, So.
Speaker 2: What else should we know about notebooks? You know? It
Speaker 2: just sounds like something that maybe a lot more people
Speaker 2: should be messing around with and posting things or letting
Speaker 2: people know about this because I've heard about notebooks, but
Speaker 2: I didn't really understand it until now. So you you've
Speaker 2: done a great job, but explaining you how I can
Speaker 2: you know, start using them?
Speaker 1: I don't know if there's a whole lot else to say,
Speaker 1: just because there's you know, once you get into it,
Speaker 1: it is a pretty straightforward thing, like like on it's
Speaker 1: very obvious where you'd want to have code and where
Speaker 1: you would want to have marked down? Do you ays
Speaker 1: really intuitive? I just encourage people go and play around
Speaker 1: with it.
Speaker 2: So how do you organize there's notebooks so it's each
Speaker 2: file called a page, or how do you how do
Speaker 2: you organize lots of different things together?
Speaker 1: I've never really that's an interesting question because I've never
Speaker 1: really had to think more hierarchically. Most of the notebooks
Speaker 1: I've personally created kind of makes sense as a standalone thing,
Speaker 1: like you don't really have a project file of notebooks,
Speaker 1: you just have the notebook file. That is an interesting idea, though,
Speaker 1: I would be curious to know if if there's a
Speaker 1: better story for that of like.
Speaker 2: How would you organize multiple notebooks that are all related. Yeah.
Speaker 1: Yeah, and the if you look at the the GitHub
Speaker 1: project that Microsoft provides that has their notebook examples, you know,
Speaker 1: it's just a it's just a folder with a bunch
Speaker 1: of these I, P, N, Y, and B files in it,
Speaker 1: but they're not necessarily organized into a project.
Speaker 3: I wonder if they get to a stage where like
Speaker 3: the features of the notebook could be used in a
Speaker 3: normal like CS file, you know, like just like I
Speaker 3: wondered that, you know, instead of just being to comment
Speaker 3: things can be putting in mop down and thinks of
Speaker 3: that and to you just your normal source code. I'm
Speaker 3: not sure if it's a good idea or not, but
Speaker 3: I'm just wondering, and it is.
Speaker 1: An interesting idea where you could have a CS file
Speaker 1: with an image in the comments. Yeah, yeah, definitely. I've
Speaker 1: definitely worked in situations where the code was maybe documented
Speaker 1: as a flow chart in visio before it was ever implemented. Right,
Speaker 1: And could you just like have a screenshot of that
Speaker 1: that video diagram, like, hey, here's here's the decision tree
Speaker 1: that we're working from. Or I suppose the other thing
Speaker 1: of being stating one of my clients does a lot
Speaker 1: with CAD, and so a lot of times we're writing
Speaker 1: code that manipulates objects that started somewhere in CAD. Like
Speaker 1: you could have an LSE case. It's like this LSE
Speaker 1: case exists to cover this this diagram or you know
Speaker 1: this modeling concept. That'd be interesting. I'm sure there's good
Speaker 1: reasons to not bring images into CS files, but it
Speaker 1: does seem like it.
Speaker 3: Was probably like thought control looks a bit weird if
Speaker 3: you have you know, thought control its designed for text, right,
Speaker 3: so it's not putting images make it a wonky. It's
Speaker 3: how to use, but yeah, it's it's safe to talk
Speaker 3: about that. You don't know what the consequence is are
Speaker 3: but because it is so once you open that can
Speaker 3: and you know you can do so much. People putting
Speaker 3: in videos into your SOS code.
Speaker 1: Well, in some of the languages have opened that can
Speaker 1: because they now allow emojis and variable names.
Speaker 3: Oh gosh, how would you do that?
Speaker 1: I if memory serves, I think Swift allows you to
Speaker 1: have emoji named variables, which I could in some cases
Speaker 1: see would be really powerful and expressive. And in some cases,
Speaker 1: like someone used three of the poop emoji, is this
Speaker 1: variable name?
Speaker 3: Like how different to communicate that your you know, dead
Speaker 3: meeting is that variable here with two foods and two
Speaker 3: free one? You know, like that's not a signed you know, like, yeah,
Speaker 3: that's just.
Speaker 2: And then everybody's going to agree with what the name
Speaker 2: of what that emoji is you refer to it. It's
Speaker 2: gonna be you know some some people can call it crap,
Speaker 2: the other ones call it poop, you know. You know. Yeah,
Speaker 2: so I did find it in the ID. It's underview.
Speaker 2: You have to go to other windows. There you go
Speaker 2: and you have C sharp interactive and there's F sharp
Speaker 2: interactive as well.
Speaker 3: Mm hmm.
Speaker 2: So it is like one note, can you do these
Speaker 2: types of notebooks in one note? That might be a
Speaker 2: way to organize them together.
Speaker 1: As far as I know, there's no way to do that.
Speaker 1: But I also love one note, so I would be
Speaker 1: thrilled if that was the thing that one note could do.
Speaker 2: Yeah, that would be cool.
Speaker 3: I think could if one note supported markdown Actually, that
Speaker 3: would be the would step forward for them because yeah,
Speaker 3: a lot of times I'm pasting code of the reformat
Speaker 3: it and all stuff first.
Speaker 2: So cool.
Speaker 1: Yeah, and you think about formatting code. It is worth
Speaker 1: noting that the VS code notebooks extension does have syntax highlighting,
Speaker 1: it has intel a sense and yeah, so it looks
Speaker 1: like proper C sharp code.
Speaker 3: And you can debug line by line and I'm guessing.
Speaker 1: Mine, No, there's not a debugger for it.
Speaker 3: Yeah, you can't step for it. I would fought for
Speaker 3: an educational tool you, but maybe it's the saying that
Speaker 3: they will I'll put in eventually.
Speaker 2: Yeah.
Speaker 1: I think the workflow would be more something where you
Speaker 1: would I think instead of debugging, what you would do
Speaker 1: is you would just have three lines of code and
Speaker 1: display some output and have another couple of lines of
Speaker 1: code and displace.
Speaker 3: Yeah that's right.
Speaker 2: Yeah. Cool. Well I think I'm really, you know, kind
Speaker 2: of kind of anxious to get out there and play
Speaker 2: around with this a little bit. So that acceptable.
Speaker 1: We should stop the show, stop recording so we can
Speaker 1: go play with the code.
Speaker 2: Yeah, I like it. Or let's at least move on
Speaker 2: to picks. Let's depicts before we stop the show. All right,
Speaker 2: Why what do you have for your pick this week?
Speaker 3: Okay, so my pick is a little bit different this week.
Speaker 3: It's not a fun thing that we usually do. So
Speaker 3: it's actually I wanted to Oh cool, I want to
Speaker 3: give a shout out to cloud Flares DNS Caravada. So
Speaker 3: I mean people probably know because we're program it here,
Speaker 3: but the Internet's how the Internet's design is actually like it.
Speaker 3: It's actually been fairly broken. It's it's never really been
Speaker 3: designed for privacy. And although these days almost every website
Speaker 3: uses ACTVS, that's really that's a really good step forward,
Speaker 3: but that's actually not completely hiding all of the things
Speaker 3: you're doing. One thing that one way that people can
Speaker 3: I guess listen on what you're doing is using your
Speaker 3: DNS lookups because DNS usually isn't encrypted and then just
Speaker 3: you know, it's usually your DNS provider is usually just
Speaker 3: with your I s P and there's no I guess
Speaker 3: you'll have to check whether your IP is logging or
Speaker 3: your DNS lookups and they are then essentially all of
Speaker 3: your all the website you're going to is essentially stored
Speaker 3: against your your IP address. So cloud Flag has actually
Speaker 3: provided like a like a public DNS provider which you
Speaker 3: can I guess point your DNS look ups to and
Speaker 3: that they've built it I guess with priority in mind,
Speaker 3: so it's all encrypted the traffic and they're guaranteed to
Speaker 3: not log your traffic for longer than twenty four hours
Speaker 3: and things like that. So yeah, I thought more people
Speaker 3: should should do it. It's really easy to set up.
Speaker 3: Just point your DNS look up to one point one
Speaker 3: point one point one and I had a bit of
Speaker 3: read about their their business model, and it seems really legit,
Speaker 3: like they're not The reason they're doing it is to
Speaker 3: improve their services because they're I think they're like a
Speaker 3: CDM company. They're all about trying to make their clients
Speaker 3: were pages faster, and this allows them to essentially improve
Speaker 3: that improve that offering things for to say.
Speaker 2: So, probably Google's eight dot eight dot eight dot eight
Speaker 2: is probably not so private.
Speaker 3: Well, I guess it depends on which company you trust.
Speaker 3: I don't know, Like I probably shouldn't go too much
Speaker 3: into that, but yeah, like I think cloud I read
Speaker 3: I read Cloud Justification and I was like, okay, cool,
Speaker 3: you're not You're not going to take my DATEA I
Speaker 3: can't see you wanting to do that for But also,
Speaker 3: I think the cloud fled thing, the offering it's independently
Speaker 3: ordered by tap the MG so I'm not sure what
Speaker 3: that means, but I'm guessing it's it makes it more independent.
Speaker 2: Okay, So my pick this week I is a little
Speaker 2: bit different because it's something I don't think we've ever
Speaker 2: had as a pick before. I don't think ever anybody's
Speaker 2: ever picked music or a band. We've got on for
Speaker 2: over over a year now, maybe year and a half
Speaker 2: or something like that, and nobody's ever had a band.
Speaker 3: I think I did the Smashing Pumpkins once, I.
Speaker 2: Did Allow No. So so one of my favorite bands
Speaker 2: growing up was the band Rush, So kind of shows
Speaker 2: my age a little bit. He's kid things like that. So,
Speaker 2: you know, recently the drummer of the group died, but
Speaker 2: he was like one of the best drummers I've ever
Speaker 2: heard in the world. He just just very artistic. He
Speaker 2: wrote a lot of the songs and the music somethings
Speaker 2: like that. So you know, back to some of their
Speaker 2: greatest albums, so like Moving Pictures or twenty one to twelve,
Speaker 2: things like that. So if you want to hear a
Speaker 2: good rock band, you never heard Rush. They're actually from Canada,
Speaker 2: so check it out.
Speaker 1: All right, Eric, I'm going to stick with the technical
Speaker 1: pick and apologize for not having something more creative vibe.
Speaker 1: Recently been reading the concurrency in C sharp cookbook by
Speaker 1: Stephen Cleary, and it is not a thick book, but
Speaker 1: it's got some really great technical detail. I thought I
Speaker 1: understood a sink and a weight in C sharp, but
Speaker 1: I have learned so much reading this book and it's
Speaker 1: a lot of information that's very practical. So I should
Speaker 1: check it out.
Speaker 3: Books.
Speaker 2: So, yeah, a sink, a weight. Yeah, if you dove
Speaker 2: into that, that's the state machines and all that kind
Speaker 2: of stuff can get really funky and really complex. You
Speaker 2: really grasp the entirety of it and make sure everything
Speaker 2: is working, the whole stack, all the way up being
Speaker 2: a sync of Wait.
Speaker 1: Yeah. The actual use case that got me into it
Speaker 1: was Project I'm on. Had a kind of squirrely situation
Speaker 1: with cancelation and realized I had a lot to learn
Speaker 1: about how to properly cancel async and away tasks, and
Speaker 1: so I picked up that book and it did not disappoint.
Speaker 2: Cool all right. So, Eric, if people have questions and
Speaker 2: they want to reach out and get in touch with you,
Speaker 2: what's the best way.
Speaker 1: Probably the easiest way to find me online is on Twitter.
Speaker 1: My handle is at Potter Eric. All the Harry Potter
Speaker 1: fans ate up all the good. Potter handles right away
Speaker 1: on Twitter, So I'm at Potter Eric, not eat Potter
Speaker 1: or anything like that. My blog is humbletoolsmith dot com
Speaker 1: and I've got some content up there, both on c
Speaker 1: sharp Interactive and on the dot net notebooks. And if
Speaker 1: you want, you can find me on LinkedIn. I hang
Speaker 1: out on there sometimes.
Speaker 2: So thanks Eric. Great show. If our listeners want to
Speaker 2: reach out in touch to us, we'd love to hear
Speaker 2: your feed. Let us know what we can do better.
Speaker 2: They can reach me at Twitter. I am at dot
Speaker 2: net superhero all right. And Caleb who's not here, he's
Speaker 2: at Caleb Wells Codes. Thanks Eric, great show. Glad to
Speaker 2: have you.
Speaker 1: Yeah, thanks so much for having me on. This has
Speaker 1: been a fun conversation.
Speaker 3: Thanks coming on great all right.
Speaker 2: We'll catch everybody on the next episode of Adventures in
Speaker 2: dot Net.