Coding Blocks - What is GitHub Copilot?
Episode Date: July 19, 2021It's time to take a break, stretch our legs, grab a drink, and maybe even join in some interesting conversations around the water cooler as Michael goes off script, Joe is very confused, and Allen ins...ists that we stay on script.
Transcript
Discussion (0)
You're listening to Coding Box, episode 163.
Subscribe to us on Spotify.
Oh, wait, I forgot.
Joe doesn't like it when I do this part of the intro anymore, do you?
Huh, Joe?
You don't, right?
I gotta like be new with it, right?
You're on mute, by the way, Joe.
I don't know if you wanted to talk to me or not.
Maybe you're mad at me.
Maybe it's because I'm calling you out right now in this part of the show, and you're like,
dang it.
Somebody muted me. I don't know what happened.
But yeah, man, hot intros are everywhere.
Let us know if you like warm intros.
No, no, don't let us know.
Alright, moving on.
You might want to
know anyway.
What?
Did we just
stop here? I don't know what just happened.
Was this the intro? No, we're still going.
Just go with it, and we'll figure it out from there.
All right, Jay-Z, it's your turn.
Well, I don't know now.
Maybe I don't want to.
This is CodingBlocks.net,
where you can find show notes, examples, discussion, and more,
and send your feedback, questions, rants to comments at CodingBlocks.net.
And you can follow us on Twitter at Coding Blocks, where we retweet sometimes.
And every once a month, we might have some original tweet on there.
Or head to www.codingblocks.net and find all our social links there at the top of the page.
With that, I am Alan Underwood.
I'm so confused.
I want it noted for the record that you two couldn't resist doing the normal intro.
I corrected myself and tried it.
It gave you the opportunity to move on.
It needs to be there.
It needs to be there.
This episode is sponsored by Educative.io.
Learn in-demand tech skills without scrubbing through videos,
whether you're just beginning your developer career,
preparing for an interview or just looking to grow your skillset.
All right. So, uh, I guess in today's thing, we're, we're kind of just,
you know,
gathering around the water cooler to talk about different things that are on
our mind. So before we get to that,
we do want to take some time to let outlaw say thank you to those that have,
have put reviews out there on iTunes.
You guys love to try to get me on this.
Huh?
Okay,
here we go.
From iTunes.
We have every Nick is taken 28 58 and mem knock 97. Well Mimnock, 97.
Well done.
Well done, sir.
And one of them said that we pronounced the word niche or niche incorrectly.
I mean, how could that be?
We say it both ways.
That's right.
All the bases are covered.
Maybe it's nish.
We've never done it that way.
Nish?
Maybe it's nish.
Nish, nish. Yeah, I mean maybe it's nash nash nash yeah I mean from the south yeah so but yes
thank you for those reviews that hurts
to just say it that way
it feels so wrong
Joe what about you you got you got a take
on it I'm still I'm still
getting over the intro here I don't
know where I am got my bearings
such a train smash.
A train smash.
Harkening back to the days of Nick.
That's amazing.
Shout out, Nick.
All right.
So Nick doesn't listen.
He hates podcasts.
That's not going to matter.
So, hey, I said, you know, back in January or February that I was going to get the Moonlander review out.
And I did in July.
So, you know, the beginning part of this year was rough and it took some time to get back into not being rough. So that said, if you've been looking forward to,
or contemplating getting one of the ZSA Moonlander ergonomic keyboards,
go check out the video.
We'll have a link in the show notes.
Also have,
um,
the other ergonomic ones,
the Kinesis Advantage 2 and the,
uh,
why can I not?
The Zergotech.
Also,
we did those.
So we'll have those up there.
I wonder what that, uh, Moonlander warranty is. Do you know? It's two those. So we'll have those up there. I wonder what that,
uh,
moon lander warranty is.
Do you know?
It's two years.
It's in the review,
sir.
Okay.
So you've got the first year of warranty.
You got a year and a half left,
man.
It's not a year and a half.
It's not a year and a half.
It has some miles left on it.
You're good.
You're good.
Yeah.
For those that don't know,
it's actually outlaws keyboard that I was supposed to have for a short period of time to review, and it turned into a much longer period of time. So apologies.
Do you realize when I ordered that?
It was in November, right? Or was it October?
It was October.
You didn't get it till November is what it was.
I got it. I got it in November. Yeah.
Yeah. Yeah.
So that's what makes it so humorous.
Yeah. It's been a minute. It's been a minute. Um,
and then, and so some sad news here,
we were all excited.
I think it was actually Jay Z that gave this tip of the week on the HTTP file extension in IntelliJ.
And,
uh,
outlaw,
do you know who wrote us on,
on the show?
Um,
I can find it real quick.
Cause I did read it up.
Um,
um,
but basically, uh, we were written on the show notes on the last episode, which is awesome.
Thank you for sharing.
That only works in IntelliJ Ultimate.
Yeah, it's super sad because it's really an incredible feature.
But just go buy Ultimate.
Did you already know the name and that's why you decided to ask me how I truly don't remember.
No.
Okay.
I'm really going to butcher this one.
I'm going to,
I'm going to put the name.
I'm going to give,
I'm going to share the name.
Uh,
how can I copy and paste this?
Uh,
email isn't playing nicely.
All right.
I'll figure out how to get you a copy of this.
Oh wait,
here we go.
Here we go.
Here's,
here's the name.
And I'm going to try to do my best to pronounce this.
And please forgive me when I butcher this.
And this is going to be full America pronunciation.
Cause I promise.
Um,
thigh.
Yeah.
Good.
Jen.
No,
that can't be right.
No,
that's it.
That can't even be close.
Okay.
Probably.
I think I like yours better,
but also like I'm putting like English sounding letters to the name and I'm
like,
that can't be right.
Well,
regardless,
you could, you can contact us and give us a pronunciation key
and we will pronounce it right next time.
But seriously, thank you for pointing that out
because that was truly sad news to all of us when we saw it.
So yes, if you want to use that, basically the postman
within IntelliJ feature that Jay-Z shared last time,
you got to have ultimate.
And,
you know,
if I will give this as a pseudo tip here,
though,
if you're contemplating buying ultimate,
just buy the IntelliJ all tool toolkit because there's not much more. And you get every one of their tools included in that,
which data grip is one of our favorites.
JetBrains also is a sponsor of the show
and we give away free licenses basically every month
if you sign up for the newsletter.
So we don't get any money from it.
It's just truly a fantastic set of tools.
And when I say sponsor,
that means that they give away free licenses.
We don't get any money from them.
So they're really great.
You can use that free license
on the JetBrains All Product Pack.
No, you cannot.
No, you cannot.
You used to.
No.
It's a single.
You can do it on IntelliJ Ultimate
or you can do it on DataGrip or one of those,
but you can't do it on the entire toolkit,
I don't think.
Because that's where you used to be able to.
Really?
That's the number one customer service issue.
Well, I say customer service, but whenever I send someone one of those and they have a problem with it, it's almost always that.
That they're trying to get the whole kit and caboodle?
Yeah.
I didn't realize that wasn't a thing anymore.
I know.
Well, whatever.
It's a bummer.
But, yeah, speaking of that, we'll be giving those away, uh, just actually in probably around the time that this episode is launching.
So I should join that mailing list.
Cause,
uh,
email's going to be going out with three new licenses.
Oh,
and the BS code extension still works.
No ultimate there.
Oh,
cool.
That's,
that's movie.
Excellent.
All right.
So for this water cooler episode,
we decided to talk about the benefits of drinking water.
Yeah, we didn't.
I prepared for the wrong show.
I'm sorry.
Yeah, that's our exercise.
Get fit developer podcast over on Channel 3.
That's the one.
Yeah.
Go to the bathroom in there.
That's where I could. channel three ah that's the one that's the one yeah yeah go to the bathroom in there all right well speaking of editors ids uh so a topic i brought today is github copilot have y'all heard of github copilot yes um is this the thing where you can like have visual studio code in the browser no okay good so uh so when yes one no um ally i guess you haven't been on twitter
you've been on vacation for a couple days because you've been missing a storm i have
tried to stay off of all social media for a long time now okay well i'll try and distill the hot takes that have been going on. Can you read me your last tweet?
I'll just text you all my tweets from now on.
That would be great.
That would be great.
I'd really appreciate that.
And all your Facebook updates.
Yes.
Okay.
So the deal is Copilot is a VS Code extension put out by GitHub, now owned by Microsoft.
And it leverages machine learning in
order to write code it's currently in limited preview so i signed up i've not been able to
get in yet but you can find all sorts of people putting out youtube videos or gifs or whatever
showing showing action actually the website does a good job showing exactly how it works too
and it uses a a non-profit company called uh open api they have a tool called codex that is
it translates natural language so that you'd speaker type in this case it only supports
english so far translates it into code and github and open api work together and they also figured
out how to get code to kind of translate as well. And what it means is you can do things like write a function name,
like post tweet, and it will start making available,
almost like IntelliSense, the code that would send a tweet.
It'll go ahead and even suggest libraries and modules
that you may want to go add and dependencies you want to take on
in order to do this.
And it does this by first
pulling in all of the publicly available code on github and using that to train up a giant ai or
model or whatever you want to call it and then it based on what you type in either in like docs you
know like java docs or pi docs or whatever they call it or function names
it will go and just you know kind of blast the stuff out based on what it thinks you're trying
to do and it's scary how well it works if you watch the demos i haven't had a chance to try it
so you know i don't know if it's just like you have to kind of stick to certain kinds of functions
and other things don't really work too well but i have seen a good selection of things that people have been doing you know online and uh it's pretty funny
you can get pretty niche and that's kind of problem part of the problem too so we'll get
to the problem uh there's a i saved the contentious bit for the last i just want to kind of like
explain what it is first should i tender my resignation now or do I have a minute or like?
That's the second part.
Oh, okay.
So, yeah.
I mean, do I have to like, like some of the examples I'm seeing though, like, I don't know if it's just coincidence or if it was a requirement where like somebody commented above the function, like what they were about to do.
And I'm like, how often do we do that?
Yeah.
Well, I mean, maybe we're supposed to.
But also I thought we were supposed to have self-documenting code so we weren't supposed
to write those kind of comments well it's kind of funny so part of the you know people things
people talking about like well like if i can you know write out precisely what i want the code to
do like aren't i just coding like wasn't that exactly what coding is supposed to be is like
a precise unambiguous language that could translate into machine code
like that's
you're just coding now you're just coding in english instead of whatever language but as you
know this is really not gonna work out perfectly you know does it have to be english though because
english is such a fluid language that can change meaning so much i don't know if that's the
language we want to be the universal language that we wrote we write programs in that is what they started with um but it also works for so if you look at some examples
um you'll say they'll do like the function name so it might be like function uh reverse underscore
linked underscore list and it'll just blast out a function to reverse the linked list and it will
blast out the one it thinks you want based on like telemetry of what other people have selected
based on you know whatever metrics they use to figure out what's best.
You can also say, I don't like that one kind of suggests another and you can kind of cycle through.
So it's not line by line.
It only does look at the text in the actual file that you're looking at.
So it's not going to look at the rest of your code base.
It's not going to look at your private repos.
So now I have all of my code in one giant file so that it can get more accurate results and i gotta like write comments that
are unnecessary because the function name was already self-documenting yep so now you've hit
on the first point where i'm going to go is basically like how valuable is this and i don't
know i haven't tried it it's interesting especially if you're thinking about someone who's maybe new
to code or what if you're new to a language right and it kind of nice
to say like oh let me just type that you know i don't really do much python i need to do some
mongo let me start typing something you know get user from mongo and now it starts blasting that
out i don't know about code to kind of read that and take the suggestions for a library dependencies
that it took and put in there and maybe just kind of tweak it from there, which is
nice. But what if
there's a whole bunch of developers doing this
sort of thing and using
a Git user for a Mongo
and there's a security
problem or there's a defect in the
way that we're doing this and now
we all maybe have the same defect without
realizing that there's like a pattern of
a mistake across multiple,
you know,
multiple different programming languages.
And,
and so that's kind of weird,
but I guess we all have the same.
We all have the same Linux bug.
Yeah.
And so it could never happen.
Joe,
you're hypothetical right there.
My heart bleeds for you,
man.
That could never happen.
That's right.
Oh,
you know, for us to mention. So, um, you know, maybe you take it never happen. That's right. I forgot to mention,
maybe you take it for granted, maybe you don't,
but the model is not open source.
So all the code that they
use to train this is
public. Publicly available, specifically
on github.com.
But
the model, what they got from it,
not open source.
Yeah, so the ML algorithm and all that stuff behind
the scenes is proprietary yep so just wait is that i mean because it's literally called open ai
so open api is the name of the nonprofit ai oh uh oh i yeah sorry it is open ai i
wrote the wrong thing so open ai is the non nonprofit company, and the product is Codex, which is the thing that translates.
And GitHub is the one that worked with OpenAI in order to do this.
And it looks like OpenAI does have tools that are.
That's funny.
So I was just Googling earlier.
I did find some stuff on Open API, which is fairly different,
but yeah,
so both,
um,
whether it's,
it's also true.
So open API,
open AI is a nonprofit company separate from GitHub.
It looks like they do some pretty cool stuff though.
And it's a company that Microsoft put $1 billion into two years ago.
Also, the person from
Netflix, Norman Reedus or
whatever,
there was kind of a joint venture there.
Which is pretty
cool.
How correct is the code that it writes?
So, Google, sorry,
GitHub did a giant test where they basically
took some standard libraries from Python and tried to have it re-implemented.
They would take the same function names and see what it would generate.
And they said 40% to 50% were correct compiling code.
And remember, it's almost like a Markov chain or something.
It's generating code based on what it thinks you want.
It's not compiling.
It's not tightly integrated with your IDE. It's generating code based on what it thinks you want. It's not compiling. It's not tightly integrated with your IDE.
It's spitting out text.
When you're typing
something, it's like IntelliSense, right? You type
something and it tries to generate that code
for you. So maybe it's
got some minor syntax errors. Maybe there's some
problems with imports. Maybe
it doesn't pass all the test cases, but 40-50%
I think is pretty good.
Definitely better than I could do without.
I mean, you'd think that the syntax that it would
introduce would be correct. It just might not be
functionally what you want, would be my
expectation.
You can imagine, like, maybe it doesn't do the
exact version. You know, maybe
something was introduced in Python 3.9
that it doesn't know wasn't available in 3.9
and you're using 3.7. Because remember,
it's not looking at your project as a whole.
It's not interpreting your project.
It's just looking at the file that you're in.
I got you.
There's definitely some limitations.
And remember, this is still new.
It's in preview.
Who knows where it's going to go?
And after all the uproar, maybe nowhere.
I don't know.
I mean, code, writing code, or the computer's writing code, or, you know, the computer's writing code.
I mean,
this is something that has been talked about for decades.
So like,
do I think it's going to go nowhere?
No,
of course this people are going to keep iterating on this idea of it.
And like,
that's,
that's been a thing forever,
right?
It's been an idea and a goal.
Yeah.
I remember,
well,
like when I was first running a program,
they were talking about UML and how people were just going to do UML diagrams
that would generate the code.
And then we're going to be known over developer jobs and so
that's all we do now that was 20 years ago yeah yeah 20 years ago yeah just do drawings and that's
it that's it well it sometimes feels that way but uh yeah so you know too it's like well tailwind
css lets you you know just kind of do this or that and see your changes in real time.
There's all sorts of tools now you can just drag and drop things.
Like, you don't need to know HTML now to do nice looking blog posts in WordPress.
Like, it'll, you know, the Gutenberg editor will try to figure out what you need.
Like, somehow we all still have jobs.
So, I'm not worried about that.
You know, low code, no code, all these things have been talked about forever.
So nothing new here.
Somehow the number of developer jobs keeps raising every year.
So I think we're safe for now,
especially with 40 to 50% accuracy on a limited test.
Does work with small document functions.
Does having the code written for you steer towards solutions?
So this is kind of like
what i mentioned with the security problem uh you can imagine how if we're all doing like send tweet
to whatever and it's kind of steering us towards the same libraries maybe that were in its training
data set from may 2020 and maybe there's a better library where there's a way better way of doing
things maybe you know the encryption method it's using is not so good.
The model is going to have a bias towards
older things and not newer technologies.
Yep.
Because those older
libraries and technologies and patterns
or whatever are going to be what the model is going to
find more of. And so that's
what it's going to tend to go after is
what you're suggesting. Yep.
There's actually a really nice article. I've got a link
down below that we'll have
in the show notes that basically talks about
the different kinds of bias. It's not just
recency bias either. It goes into all sorts
of stuff that just
is biased culturally
or towards various
program languages or integrations or
libraries, all sorts of stuff.
All of these things are things that you have to be careful of.
And now we're starting to get into ethics land where people start saying, well, if you're leading people down bad paths, maybe you shouldn't be leading them at all.
All right.
You've got to kind of questions like, is it doing more harm than good?
I mean, on that note, though, you could say the tools out there that do scaffolding for you.
I mean, Yeoman, Yarn.
I think it was at Yarn.
I think Yarn was one of them.
There's lots of scaffolding engines out there that have been around for a while that are really popular.
How's that any different? If there was a bad pattern that was, that they were creating for you when you said, Hey, create me a controller file,
right? Like if they were introducing some bad pattern and it was baked into the scaffold,
that's really not any different except it doesn't learn. Somebody had to realize,
Oh, this was a bad pattern. Let me go fix it. It's literally just a scaffold though. Like you
have to go and fill in blanks. Like it
doesn't do anything meaningful on its own. And it's definitely not suggesting like, Hey, here's
this third party library that I'm going to like, go ahead and wire in for you to use.
Depends on what that scaffold template is though. So it could, right? Like, I mean, there's,
there's really advanced scaffolding type things where it's like, I can't think of any off the top of my head,
but like,
let's say that back in the,
the.net days where you needed to create a web view controller type thing.
Right.
And it could actually auto import things for your view,
but they were all Microsoft.
They were all system dot something.
Right.
They weren't,
they weren't like Newtonsoft dot whatever.
But they could.
So if you went to something like React
where there have been Yeoman templates
and stuff set up for that kind of thing,
I think it was React Boilerplate
was one of the popular ones at one point in time
where you could basically say,
hey, create me stuff
and it would spit out a bunch of files
and it might have stuff in there, right?
It depends on who creates those templates.
And I guess that's what I'm saying is I don't see how something that's
learning and getting better over time is worse than something that
statically scaffold something up that doesn't learn that you could have some
bad things baked into,
you know?
Okay.
Well,
here's an idea that,
that maybe then, because like like what if the things that
it's learning are based off like joe said it's not taken into consideration your entire project
so what if your license doesn't align with the things that it's learned so you type in something
and it picks a pattern from something that was like some other license yeah it was it was open
source it was on github but the license isn't compatible with whatever you're doing, but it's going to go ahead and like
stub in that, that, um, you know, that implementation for you, then what?
Right. So that's interesting because I think that's one of the things that they address,
right? I'm sure Jay-Z, you've got something in here on it. I would be surprised if you don't,
but apparently this thing generates unique
code. So, you know, that whole, that whole thing on Stack Overflow to where it has a particular
license. So if you copy something straight off Stack Overflow, you have to give attribution,
right? Because that you have to put that, that license in there. Apparently what this copilot
thing does is it doesn't copy the code it generates code that
looks similar to but is technically different from whatever's there um which i guess helps it
swim around those license constraints yeah and then we're definitely getting into the
murkiness now because what people have done is they went and they would take methods from
like the quake engine that might have some very specific method names
so it's a wake engine they just try typing in that function name and lo and behold it starts
spitting out code that's almost identical to what was in the quake engine because it was probably
in the only you know the only thing in that training set was anything remotely you know
related to this stuff it It was like very specific,
including like interesting comments with dirty words and stuff.
So it's like very apparent that like,
oh, this came from the quake source engine,
like the source source code.
And so it's like,
well,
is it really then a derivative work or is it,
you know,
how often is it spitting out full source code from some other project?
And there's not a way for me to know. There's no
attribution saying, hey, we got this piece
from this and this piece from that. So
maybe it is spitting out something whole and you're not going to know
it unless you go search all of
GitHub for it.
Right. But hold up. I want
to clear up something. Are you saying then
that if
the three of us all started a method
that was like,
what was the example you gave?
Get Mongo user or auth Mongo user or something like that? I forget what you called it.
But let's say that authenticate to Mongo. We all created that. You're telling me that
we all started a brand new file and we
typed in literally line for line, everything was the same, but the implementation of that
method, it would come up with three unique versions is that what you're saying it does it says that they
try to generate unique code so it uh it tries to spit stuff out it's not like looking it up in a
database or anything so you know i don't i don't know what really happened you know maybe maybe
there's some sort of randomizer where it takes like common words and stuff and it tries to kind
of mix it all around but you can definitely get the sense that like they're trying to make it different.
Not it's not happening organically different.
Yeah.
So basically they're not pulling code out of a dictionary like what he said.
Now, I don't know if the three of us were to do exactly what you said outlaw, if we
would get three different results, but maybe.
But what what they are saying is you wouldn't get the identical copy
of what was already that it had used to train, right? Like if there was a four, I zero to 100
print, I it's going to generate something different than that code to give us, whether
it would generate the same thing for all three of us, I don't know. That would be an interesting test. But it wouldn't spit out the same for I equals 0 to 100 print line.
It would do something marginally different.
I wonder if it would be smart enough that if it just saw, like, I create a new file in VS Code, and I'm like, fizzbuzz.py, and it's like, oh, I know where we're going.
Enterprise fizzbuzz, here we go.
I'm actually going to Google, like, GitHub copilot fizzbuzz here we go exactly you know i'm actually gonna google like github co-pilot
fizzbuzz i bet you that someone's done that oh they should have if not we failed as a developer
society right well i mean yeah it's it's interesting. Then I guess, like, you know, do you encourage people to get a degree in computer science or just say, just get good at Copilot.
You'll be good at Copilot.
You're good.
Just start typing in visual.
Honestly, I think this is more like it's neat.
It's it's it's trivial.
It's nice.
It's cool.
It's fun.
But, you know, I don't know that we're going to use it to do our day job anytime soon.
You know what I think it might help with is man, I want to bring up Ryan on here. Um,
so our buddy Ryan monster, right? Who did the glyph friendrend plugin for Visual Studio. Anytime you can keep people from having to change
context to do something, you're winning, right? So for instance, the plugin that he made for
Visual Studio back in the day was if you wanted to use, what were those icon things? Font Awesome.
If you wanted to use something like a Font Awesome icon in your thing, instead of having to go to
fontawesome.com or
whatever the the website was and looking something up there you could do it directly in your ide
i think that's what this is leading towards right is instead of you having to jump over to stack
overflow or to go on to github and start searching for code and stuff you can sort of do that in your
ide and have context to the types of things you're doing that's where
it feels like this is is going to me yeah that's uh it seems like a stack overflow competitor more
to more than anything else to me based on what i've seen so far wow i did not go there at all
that's what it feels like just i mean think about that what if you were in the middle of something
you're like oh man what i mean how do i how do i pipe this to me this seems like the next evolution
of like a whizzy wig editor we're like hey i'm gonna i want to form and it's gonna be about this
big and i'm gonna drag a button over here and i wanted the button to hang out in the bottom right
and it's gonna be anchored to the bottom right and i'm gonna here's a text field with a label like this feels like the next evolution of that right because you
remember like in like a visual basic for example or whatever your visual you know choice back in
the day was and then you could like double click on that thing that element and it would you know
bring you up a function it would go ahead and stub out the function call to be like okay well here's
the the method name and the inputs and the outputs of what this thing is going to
expect.
And then you could like provide your own implementation to it.
And like,
you know,
I remember back in the day,
like in the nineties,
like visual basic was awesome for that kind of stuff.
Like you could put together some super simple UIs with no effort,
man.
I mean,
and yet they looked like every other windows application that was made at the
time in the time,
you know,
that people might've spent,
you know,
hundreds of hours on and you're like,
yeah,
I just threw this together five minutes,
you know,
like,
so this,
I just think this is like the behind the scenes kind of evolution of that.
But this feels like this has more implementation because I know what you're
talking about, like where you double clicked on something that would stub out the
method, name it properly and all that. This feels more like I need to figure out how to read a file
from disk and Java, you know, type in function, read file from disk, and it's going to automatically
tell you, hey, you're going to use the file system object. You're going to do this. It's
going to stream the bytes and you're going to have an file system object. You're going to do this. It's going to stream the bytes and, and you're going to have an implementation that works.
That's,
that's pretty powerful.
I'm not saying it's,
it's,
I think to what Jay Z had said a minute ago,
where it sort of leads the witness in a certain direction,
it might lead you down the wrong path.
And if you don't know that path in the first place,
you might go the wrong way just because, hey, it suggested,
hey, this looks right when there were other or better ways or whatever.
But it still feels more complete, more fully
baked than those old ways.
I'll say too, reading and writing a file is a great one. Especially in Java, I always have to look up
how do I read a file?
There's somehow three or four classes involved
every time, even for simple use cases.
And that's something I'm sure it's going to do really great at.
What it's going to be terrible at is
we used a Mongo example, but imagine
say I get a user from Mongo database
and it goes and figures it out and dumps it in there.
Well, you probably already have a way of connecting
to that Mongo database somewhere else in your code.
Unless you're just straight up only doing one touchpoint with Mongo or, you know, you probably already have places you should be using, you know, code for authentication and doing similar things that are much more consistent with your code base.
And you're going to have this thing that looks like a copy and paste from someone else's code just sitting there.
And so that's probably not something you're going to want to leave like that.
But it might be good for learning or,
you know,
kind of figuring out what needs to happen or prototyping,
but it is scary to think that you just leave it.
So I don't know that it's really designed for you to just bring into
something and just leave it like that forever.
I think it's like,
it meant to be a kind of help,
but we kind of had to see how people actually end up using this thing.
I could see you using this to learn,
but not for production. Cause like what you're saying, like there's so many patterns and everything that this thing isn I could see you using this to learn, but not for production.
Because like what you're saying,
like there's so many patterns and everything
that this thing isn't going to know.
You know, if you have a DAO or repository pattern,
it's not going to know, you know,
like every other pattern that might be,
you know, in your code,
like every other bounded context,
you know, it's not going to know,
oh, you had an interface for this
because like you said,
it's not going to look at the entire solution.
It's just looking at that one file, and I just happen to name a method like add two numbers.
Like, okay.
So, I mean, I am kind of curious to see how advanced can it get because in trivial kind of examples, like add two numbers, then sure, I could see how it might be able to figure that out.
But in the more complex things, I'm curious to see what it does.
But like you said, like, I can't imagine that, you know,
it'd be code you'd probably want to leave in your production app.
What would be interesting is when it doesn't just look at that one file, right?
And it looks at your solution, your project or module, whatever.
And it's like, oh, I see what you're doing here.
You guys are using this pattern, you know, here's, here's a full blown template for the next thing that you're
trying to do. Is it going to pull all your source code up to the cloud to process that?
That's where people are going to get mad. Right. But that's also like, that's where things that
like what Apple have been doing and, and even, uh, Google with their, their phones and stuff where they built in the machine learning chips on the phones and stuff.
I think we're going to see a lot more of that in computing as time goes on,
where you'll be pushing workloads to these coprocessors in your hardware that do a lot of this stuff, right?
Like the algorithm will ship to you and then it'll do things locally for privacy concerns.
I think that's where we're headed with a lot of things.
And real-time updating of models is not trivial.
They did mention that part of the delay in rolling this out to more people
is limited specialized hardware.
So I imagine that would be part of it.
But if there's enough of a demand, who knows?
So it's an interesting experiment, I think.
But I would say social media, media twitter just people developers have had a pretty i would say negative attack on this
and i don't mean negative like they're wrong or bad or they would just like people have been
pretty upset about this and part of it's been things we've touched on today but a lot of it
has been just the ethics so uh it's been trained on what they call billions of lines of source code
i found a an article which is an old article that mentioned, um, just for Python, uh, 54
million public software repositories, 179 gigs that they trimmed down to 159 gigs by
removing things that look like generated code or like cutting off long lines or long files
that look like for outliers.
Um, so that's pretty big, but, uh, do they have to ask to do that?
I mean, if you put it out there on GitHub publicly available, why would they have to?
I can put it on GitHub and say all rights restricted.
I can put it up as GPL.
But GPL just means copy left, right?
Like that's different.
I mean, they're just reading it, though I mean, they're just reading it though.
Yeah, they're just reading it.
So how's that any different?
So I don't understand.
You put it up there, all rights restricted, but yet you make it publicly available for me to read.
I would think, but there's a difference between like a person kind of reading it, learning it, and a computer going and then distributing that knowledge nearly line for line.
So here's where, well, let's take away, let's hold on that line for line bit.
But let's take this in a different way.
Because one way to think of machine learning models, I mean, we've been talking about design data intensive applications a lot lately, right?
And indexes.
All a machine learning model is is a different form of an index.
It's just one that's more complicated to, you know, depending on the size of your data,
it can be a little complex to crunch through it.
But it's nothing more than another form of the index, but in a mathematical kind of way.
You're trying to like represent all of this data into some kind of a function and that's it.
Right.
So there is the representation of the data there in some form,
you know,
and it,
but,
um,
I lost my train of thought where I was going with that.
Oh,
um,
you were talking about the,
um,
Nope.
Gone.
Licensing.
Um,
well, that's why I was saying like, like hold off I was saying hold off on the line for line bit because that's probably not – I would expect that to not be so much the case that it's going to be line for line exact.
Yeah, it's supposed to not be.
But the fact that it is like learning off of something that if it is all rights restricted – and maybe that and maybe that was like some of the, you know, maybe that's why it was only 54 million public
repositories.
Maybe there were a total of like, you know, 154 and they like, well, no, all of these
have license.
We can't look at.
So they did come out and they haven't confirmed that they did not look at licenses and people
have found that there are licenses that are like GPL.
I haven't heard anything specifically about like an all rights restricted kind of license
but they did say that um and i've got i think about a link or two down there too where um
that they have allegedly confirmed that they have included projects that have gpl licenses which are
you know copy left it's not wrong but uh the kind of question arises like if they're spitting out
things that learn from those projects,
you know,
I,
of course I have an opinion.
I don't like,
I kind of feel like you do.
It's like as a programmer,
I constantly look at other people's code.
I learn from it.
Sometimes I take examples and I slightly tweak them and I kind of spit
them out somewhere.
And that's how I learned to code.
And so it doesn't seem that different to me,
but Twitter and Reddit and hacker news have had a very different take on it. So it's been surprising that different to me but twitter and reddit and
hacker news have had a very different take on it so it's been surprising to me to kind of be
you know on the other side of this kind of watching other people feel different about it
it seems it seems similar um okay so there's the if you have the acm subscription there's the
magazine that they um these give out like every you know couple months, communications of the ACM.
And in one of the recent issues, there was an article where somebody was surmising the
Oracle versus Google debate in that lawsuit and everything.
And basically, this was after the judge had already rendered a verdict that was in Google's
favor.
But this sounds kind of similar
to that because part of the premise of that article was saying that it was like, well,
you know, the signature alone didn't matter. The fact that, you know, they wrote their own
implementations is good enough. And, you know, one set of code written for Android doesn't
necessarily expect to run on every version of Java and everything that was written to run on Java doesn't, isn't necessarily expected to run on every version of Android. Uh, and, and so,
you know, just because they kind of might seem similar in signature doesn't necessarily mean
that they're the same. And it was like this whole API kind of conversation about like, you know,
are, are those actually, um, you know, protected and patentable and things like that. So I take that tangent because this kind of reminds me that if I write a method signature
and it's like, oh, well, then I can figure out like, hey, I should go and implement this
thing.
Well, if you're telling me that the implementation is going to be different for me than it is
going to be for you and for Alan, then okay, who cares if we have the same signature?
Yeah, because the judge already ruled.
So basically what you're saying, and I haven't followed this thing, but what you're saying is
the judge basically stated that an API or a contract you can't patent. You can patent the
implementation of it, but you can't patent the actual signature. And if that's what we're saying,
that's kind of what this whole thing is right here, right? You can create the same exact function name, but the implementation is going to be slightly different.
Who knows if the compiled bytecode will be the same?
But on the surface, the actual code that made it happen will be different.
So it's fine-ish.
Yeah, I'm not a lawyer.
That's kind of the question some people had.
It's like, well, if I have to worry about line by line or even if small portions are identical, if I have to worry about it, like as a, you know, say like a director or something at Google or Microsoft or Netflix, you probably just say you can't use it.
Right.
Like just avoid the problem entirely.
And so, you know, are people going to kind of stay away from this just because they're afraid that there might be stuff that sneaks in that they didn't want to you know is the benefit
good enough for it to warrant that risk and you know it's interesting the three of us have been
involved and have seen the output of code analyzers like there are tools out there if you're a company
or somebody that's,
that's interested and you have the money and you want to do it,
you can actually take your entire project source code and feed it through one
of these analyzers.
And it'll tell you if it finds anything on stack overflow or on get hub or
whatever.
And there'll be like,
Hey,
um,
you probably need to provide attribution here or this license is restrictive
or whatever.
Like there are
actually tools out there that do that so it'll be interesting to see if anybody runs that kind of
stuff against which generated from from copilot to see if it if it finds any hits right like if
there's any kind of matches or anything that come up can you imagine trying to explain that to your
boss i didn't copy that from second i didn didn't even write it. That's right.
I hit a few keys, and it plopped it all in there.
You know, the next iteration of Copilot will be when it does its own git commits.
That's awesome.
You know what's going to be amazing is kind of going back to what you guys said,
is when you have like 10 different files that you coded,
and they've all got different types of Mongo connections in them.
Yeah. That would in them. Yeah.
That would be amazing.
Yeah, I was thinking, have you ever seen one of those articles
where like a security analysis team will take an open source project
and they'll do an analysis on it.
And they may not ask the people who put the code out
and that code may not be a permissive license.
But all they're doing at the end of the day is coming up with a couple of pie charts
and like lists of things that they found that they thought were dangerous or
something.
And the question is,
is like,
is it ethical to use someone else's data to train AI or write an article or
put together some pie charts?
And I kind of feel like the,
you know,
prior art,
like it seems like a lot of people do that on the internet and we're all fine
with it.
Right.
That's like every day.
I was going to say like, how do you, where do you draw the line and we're all fine with it right that's like every day i was about to say like how do you where do you draw the line because like how much how much ml is based on like training
on faces for example uh yeah i mean several of the acm recent issues the acm have been talking
about like the ethics of uh machine learning and biases in some of the models and everything
you know you can't even you couldn't even do one based on, uh,
on, on land without that being somebody else's property.
How, where would you draw the line of like, Hey, it belongs to somebody else.
You don't have the right to like train your machine learning model on it unless you own
every bit of the data that you're training on.
That's the world would never go for that.
And it's already too late.
There's already too many uses of it where, where, uh uses of it where models are being based on publicly available data.
Even like look at self-driving cars.
They wouldn't even be able to exist without being able to train on publicly available data.
You know what the difference is?
The difference that people are going to call out is it's like having Johnny Five read through the dictionary
or Neo learning something in the matrix where he plugs in.
We can't learn that fast.
We can't come through code that fast.
And so the only argument is that you've got this,
you know,
network of supercomputers that can,
that can do all this and comb through every line of code out there and do it.
And that's the only argument.
It's a human versus a computer,
but they're both doing the same thing.
We've been hearing this crap argument, though, for our
entire life.
It's literally, Arnold Schwarzenegger
made an entire career off of this
premise.
It's all we've ever heard about. It's like,
oh, well, as soon as quantum computing
comes out, forget about it. It's all over.
The machines are going to take over. The rise of the machines.
It's like, oh, God, I guess grab your Windex and let's kill some robots.
Windex.
Yeah.
So I have a hard time.
But if you look on Twitter, you absolutely will see people raging, talking about class action lawsuits, saying that they need some sort of cut of the money that GitHub is making money off the code that they use.
And that's kind of my thing is like,
I don't expect a cut of Google's revenue
because they index my blog
in order to help people find my blog.
So yeah, I mean, how do you rule what's available
and what's not?
But it kind of ties into a lot of privacy questions
over the years that have been coming up
about whose data is it
and what can people do with your data
and how do you protect yourself from that?
And it seems kind of like,
yeah,
if you put it out there public on the,
on the internet,
good luck.
If you put your code on GitHub and then you're concerned that somebody is
going to go and use your code or ideas from your code,
then maybe you shouldn't have put your code on GitHub.
I was going to say,
you know,
it's what's kind of ridiculous about this.
If we're all being honest here is people carry around smartphones. Almost
everybody you know carries around a smartphone. And by doing so, you've basically opted in to
people using your data, right? Like, I don't know how people are going to get up in arms about using
a free service. If you don't like it, then pay for a GitHub account, right? Like, read the fine
print. Usually if you're getting something for free, it's not for free. Just know that, right? Like, um, read the fine print. Usually if you're getting something for free, it's not for free. Just know that it's that simple. This is where I thought you were going,
Alan. And so let me correct your argument for you. All these people that are complaining,
ask them how, how, uh, active they are on Facebook or Twitter or Reddit or insert social media platform here.
Really?
You are being mined.
Your data is being mined, and it's no different for your code.
If you're not paying for the product, you are the product.
Yeah, exactly.
And in all honesty, everybody should by now understand that, especially as a developer, you should understand that.
And so I got you skipped over the
quake thing what were you doing there
I just mentioned that earlier
and so I got a little snippet there so if you watch it you can see
where someone actually got those comments and
got you know a pretty
almost exact replica of
quake source code which was gpl
so restrictive license something you have to be careful of.
It's a proof of concept, so they went out of
their way to find something like this that would
kind of trigger this, but it just
kind of brings it up that it could happen.
And so,
yeah, I was just kind of wondering with all the
talk on Twitter and stuff,
if people would have felt differently
if the model was made public.
No, no, no, you mean the algorithm, right? You don differently if the model was made public. No, no, no.
You mean the algorithm, right?
You don't mean the model.
You mean the algorithm that makes the model, right?
So I meant like they literally publish the data you would need in order to,
you know, I guess there's kind of two parts of it.
One is like the predictive test,
and the other is like actually spitting out the text and finding.
I don't know how it works, but,
um,
yeah,
I was thinking like whatever,
whatever it takes,
the data that they,
the result of the data that they processed,
if they published that,
would it be different?
So if everybody had access to the ML models that were generated,
I imagine that those models would be,
have limited life though.
I mean, I imagine that they're very transient. They're going to like, have limited life though. I mean,
I imagine that they're very transient.
They're going to like,
they're constantly updating.
I mean,
just think about like what we do,
right?
I mean,
we're constantly updating ours.
Yeah.
But,
but I guess,
but I guess though,
to Jay-Z's point,
and it's,
it's an interesting question right now.
The only use of that is this codex thing,
right?
This copilot thing.
What if you as a developer could use the same data
that this thing's generating
and you could do your own implementation type stuff with it?
That's kind of what you're saying.
If we could all use whatever this thing's generating,
would everybody be fine with it?
It was kind of some weird case
where people don't have licenses now that say,
like, people can use it, but AIs can't.
And so it's kind of like this weird edge case
where something, or not edge case, but something new came along and used data in a way
that we hadn't thought about 20 years ago when a lot of these licenses were in so it's just kind of
a you know it's kind of weird it makes you wonder it's like well would people have felt differently
if the data was public that they used to make it and the result was public it sounds like the
answer is kind of no we people would probably still be not too happy about it i really think though that what we're
we're really talking about is like the algorithms that were used to create the model and the code
that created the model because like i can't imagine trying to use some other model that
was randomly created by some other code that i don't know anything about i don't know what data
was trained on i don't know how it was trained don't know what data it was trained on. I don't know how it was trained. I don't know what it was used.
And yet I just going to like randomly try to load it,
load in this binary blob and be like,
yep, go ask it this.
Does that use law and so on?
Okay.
I mean, because at that point,
like literally go back to what I said
that the model was going to be, right?
Like you're trying to take in,
you know, to dumb down machine learning,
you're trying to look at a pile of
data and then make a mathematical function out of it. Right. Well, how do you know what,
like what parameters to pass in and like what to even call it? Like what the value of that,
if I, if I give you a random math function and I say, uh, the, the function is called X and
you're going to pass in, uh, an integer a float, and it'll return back a double.
Without knowing what I made X based off of and the inputs and outputs to do, that function alone, how does it have any value to you?
That's the part where I'm having trouble trying to understand what value the model itself would have to anybody else.
But I could see value in trying to understand like, Hey,
how did you create that thing?
And maybe that's what we would want to iterate on.
Like maybe I don't like how you,
how you got there and I want to do my own thing that might be a derivative
work of that.
I think the, I think that might be too technical.
I think, and correct me if I'm wrong here, Joe,
I think you're talking about more like if there was some sort of service that you could use.
So I know Azure has AI things.
They have their pretty famous how old am I type thing, right?
Where you can upload your photo and it'll tell you, hey, you're obviously 21, right? Yep. So being able to use something that would give you the output from there,
I think that's kind of what you're getting at, right?
Like if everybody had access to use this thing, would it be okay?
Is that more what you're getting at?
Not necessarily just the raw data because to your point, Outlaw,
you're not going to know how to use it.
But if you had something that you could say, hey,
I want to consume what this thing should be giving me.
Yeah.
People are kind of saying like, hey, you used public data to get this.
We should be able to use what you did.
Which I don't understand the argument.
And I don't understand what you're saying behind it.
That's what you're saying.
A public API around it.
Public API or maybe, you know.
So they're just going to say like you built this off of public works and then you locked, you know, you put a lock on it. Public API or maybe, you know, you built this off of
public works and then you locked,
you know, you put a lock on it. You know, I
have a problem with that, though. So
Jay-Z, you've been playing with the Rainforest
API. Yep. They built
that off of something that's more or less
free. Well, it's not theirs.
How about that? It's not that it's not free because it
belonged to Amazon. Right. Yeah.
Right. Totally. It belongs to Amazon. They wrapped
it to make it better.
And they charged a
hefty sum for it. In the initial
episode where Jay-Z introduced us
to Rainforest, there was another API at the time
and I don't remember the name of it, but it was
based on looking at the globe
and getting satellite pictures, right?
Those pictures didn't belong to them.
They didn't even put the satellites up that took the pictures.
Right.
But they're using publicly available data to then charge and make a service for you.
So, yeah, I don't know.
The argument of making the co-pilot API public is kind of – it's weak to me at least as far as i know of it right based on this conversation
yeah i agree yeah don't be mad because somebody went and did something creative with stuff that
you didn't expect right to be used that way like that that's it's the old adage don't don't hate
the player hate the game that's right i feel like I mean, literally all the data was publicly available.
And so there's nothing stopping you from going and doing this other than maybe rate limiting,
which I think is reasonable to expect that you can't just get an entire gigantic database of our data dump of all the source code.
I mean, it is up there, though.
In terms, I mean, so now I'm countering myself because what was that company?
Oh, man, there's a company and I can't remember.
And they took the court case to like Idaho or something like that, because like it was either Idaho or Illinois or Iowa.
One of the I states where they their law is way more restrictive as it relates to personally identifiable. And so basically there was this company that started this,
that was scraping publicly photos from Twitter and Facebook or whatever,
all the different social media platforms.
And they were doing facial recognition.
And then they were selling it as a service to law enforcement to where law
enforcement could be like, hey, we have this picture.
Who is this guy? And it would run into the system. We're like, oh, we're
98.7% sure that's Joe Zach. And you should probably go check
him out. Here he is on CodingBlocks.net. And here you can
find him. He looks Metallica. And like Twitter and
Facebook and Instagram, they immediately put like cease and desist letters out to
the company saying like, nope, you do not have, uh, you know, our, our terms of service specifically,
um, prohibit scraping services of, of our content. Uh, you're, you're going against
our terms of service. You, you have to cease and desist. And of course it went to court.
And like I said, one of those States, uh, forget which one it is, but it's one of the I states, had very restrictive law as it relates to being able to use a picture of you without your knowledge for some other reason.
Right?
And so that's where that particular state now is getting all of these court cases that are like this are going there.
And so far in the,
in the guy who started the company too,
he was like,
you know,
a young 20 something year old guy.
Like,
you know,
he,
he wasn't very old at all.
And,
uh,
you know,
he was in like,
you know,
on Bloomberg and,
you know,
all the different networks.
And,
um,
um,
but yeah,
they,
they started shutting him down
there because of it. And he's been fighting
it. I don't remember where that ended.
That's interesting.
The point I was making is it kind of goes
like that, where in this
particular case, it's GitHub
scraping their own content.
I'm sure if you were to go
read through their terms of service,
you have nothing to say to them,
right?
Like you,
you gave them your code,
right?
You gave them a copy of your code and I'm positive that somewhere in their
terms of service,
you probably even got an email in the last,
you know,
12 to 24 months that said,
Hey,
we've updated our terms of service.
And you know what you did?
You ignored it, but it probably had some verbiage in there that said, hey, by the way.
Yeah. Yeah. And what's funny is if another company had done this with data on GitHub,
I still don't think I would be mad about it.
I wouldn't care. If you're doing things that improve a developer's life as a developer,
you should be pretty happy about it.
I don't know that I'd be mad about it.
But the point that I was making with that example, though, is that it could be going against GitHub's terms of service in that case.
And in which case, there could be a legal case to shut it down.
Yeah.
So we'll see.
It's interesting.
It definitely looks like a new kind of tool.
It reminds me of self-driving cars a little bit or you know your first uh you know people's initial reactions to self-driving
cars were like very mixed right some people were like heck yeah this is amazing i'm never buying
another car again and other people were like oh i just put a stop bumper sticker on my car and now
causing accidents behind me you know because they're that's hilarious i never even considered
that oh yeah yeah people are like
like have a shirt with a stop sign shape on a red octagon and all of a sudden cars like
it's so funny to me like i mean without going too far into that particular thing
it's just amazing to me that people are anti that kind of thing considering how many people
drive staring at their phones all day like you're telling me that the car is going to be worse than you are as you
drift off the road.
And as you break five,
500 yards too early because you were staring at your phone.
Yeah.
I don't know.
Necessity of change.
Maybe that's true.
I guess I just thought it'd be cool to talk about that.
We'll,
we'll see where it goes.
Good topic.
Great topic.
All right.
Nothing's so fair now. Yeah. i think it's all downhill from here so um which i've always wondered about that saying you
guys ever thought about it isn't it that's great yeah i love downhill yeah downhill you can roll
down a hill if you're younger yeah when you get older it hurts the hard part i think you're younger, when you get a holder, it hurts the hard part. I think you were using the expression wrong.
No,
no.
Cause it would be all uphill.
If it's hard,
it's all,
it's easy.
If it's all downhill.
No,
no.
Like after,
when you pass 40,
you're over the hill,
right?
Like you've,
you've topped the hill.
It's all downhill from there.
Like,
I don't know.
It's weird.
Yeah.
Do you think?
Oh,
we found the pole.
Yeah.
Anyways. All poll. Yeah. Anyways.
All right.
That's a good point.
We have a new poll.
All right.
So the three of us have dealt with this over time. And now, especially, we work in tech stacks that are diverse, right? Like we have all kinds of things in our stacks, document databases,
search engines, relational databases, streaming engines,
like all kinds of stuff. Right. And it can be tough.
Like it can be really hard because as you start building stuff,
if you don't put in the right abstractions,
you always need this infrastructure stood up
to be able to do even the most minute of things. Right. And so it's brought up conversations about,
well, how do you fix that? Well, you abstract some things. And so that made me wonder
what was the right level of abstraction, right? Like, I think that a lot of times we can agree
that having some sort of API
that your applications talk to is really good, right?
And having those APIs, if you say that,
hey, I want to get some user information,
that thing might abstract away from the fact
that you have information stored in Mongo
and information stored in Postgres and information stored in Elastic, right?
That's awesome.
Go get me the information.
It knows how to go do it.
So your application that needs to get that stuff doesn't have to go talk to those three
different systems.
You have an API tier that does that for you.
And so anybody can talk to that API, assuming that it can authenticate to it and go get those things. My question for you is what can you abstract
and what can't you, and is there a point where you draw the line and you say, it's not worth it.
It doesn't make sense to abstract it. So I'll give you an example. and then we can go from there. Databases like relational databases are pretty well-known entities that you can abstract typically with something like an ORM, right?
Because they have these schemas that are known that you can read from and these technologies make it kind of easy to do that stuff.
But what about... Save or new or create a read,
right?
All your crud operations you can take care of easily,
right?
Um,
and maybe if you want,
you can even wrap a graph QL,
you know,
schema type thing around it as well.
Like there's,
there's a lot of things you can do because it's a very well known structure.
What about when you get to things like elastic search,
where you're dealing with objects that you're doing projections on,
like aggregations and crazy filtering and all that kind of stuff?
Yeah, so my kind of thought here,
Spoonraker talked me into this,
was to abstract more around the feature and not the technology.
So you don't want an an Elasticsearch layer or like a search layer or, you know, whatever you might want to call.
But you might have a way to say get products.
And so you can kind of stub in something there, which I like.
So I know you're going to use the thing I just said a second ago.
Yeah.
Very similar.
Okay.
That's fine.
That's perfect.
I actually like that a whole lot.
Right.
Like here's the functionality here. Here's your bounded context, we'll call it.
I have customer service features that I need to make available.
What do you do about a technology like Kafka?
Yeah, and so I got a little preview of this. I got a little head start.
So Kafka in particular is tough because you kind of
end up writing your app around it it's like it's either probably a producer of messages and a
consumer of messages and it's not like a it's a proprietary api basically to kafka it's a specific
to it and just the way it works the way it interacts with your program changes the whole
thing so you're typically doing things like processing an event at a time and
you're relying it for doing the batching and stuff and streaming.
And so you really do write your whole app like around this.
And it does kind of take on a more of an infrastructural feel where you,
it's not really a feature.
It like,
it is the thing.
And so I,
I don't,
I don't really know the answer other than trying to keep that whole thing
separate and so have your producer app be a little app that's away and then you can
reproduce the whole app or you know swap out the whole app with another one but we're talking about
the app in this case where it's like heavily reading and writing to and from Kafka is the part of the ETL process.
Right.
So there's other parts to your app.
Yeah.
Right.
That,
I mean,
your entire app is an ETL,
right?
So something has to be specific.
And so that ETL part that's coffee is the specific part.
And it has to be there,
right?
Like you can't really,
I guess,
I guess the thing is when,
when you start talking about things like that, right? Like just as't really, I guess, I guess the thing is when you start talking about things
like that, right?
Like just as an example, you might get streaming data come in, right?
Like let's say that you've got website traffic and, and you're, and you're doing click streaming
or, or, you know, mouse movements and stuff is coming into Kafka so that you can evaluate
that stuff.
As that's coming in, you're probably taking that and doing something,
generating other data with it. And that might go into another Kafka topic. And then you have a consumer that comes over here and then maybe pushes it in something like Elastic or pushes
it into Mongo. So here's the question. When you're writing your applications,
do you just assume that the Kafka stuff works? And so you
just mock data into Elasticsearch or Postgres or Mongo or whatever and say, hey, we're never in
our development environment going to force you to run Kafka to get data into there and run through
the entire pipeline to get to your end state, your end data storage places.
Now you see what I'm saying?
Now I think I'm like seeing some things,
some conversation.
This is the preview conversation that Jay-Z had that I didn't have that.
So I,
okay.
So I think,
tell me if I'm wrong,
where,
where this is coming from is that in our specific environment,
we use scaffold and we scaffold up the environment.
And when we scaffold up the environment,
we're scaffolding up the entire infrastructure on your laptop.
All of it.
And we have a process that can generate fake data that looks real,
but it can mimic whatever the customer source is,
and it would flow the entire way through
until it eventually gets into,
uh,
you know,
where you might look at it in a UI,
right?
So every touch point that it might've had to go through,
which,
you know,
could be a half dozen easily of technology,
not even the apps,
just the technologies,
the technologies we've got.
So,
so now we're saying that like,
Hey,
should we be doing all that?
Or should we just be mocking the data for that other instate?
Right.
Okay.
So the rub there is from a pure Uncle Bob or I can't even remember the author's name from the DDD book.
Something Evans, right?
Yes. Oh, man, you're so close um something evans
so something evans and uncle bob there we go um uh sure it's boom nailed it eric eric evans
of course then in that case you know they're going to say like no no you should agree on
the contract of like this is what the final data is going to look like and say like an elastic right
and i don't care how it got to elastic if it had to go through kafka fine but this is what the
final state of that's going to look like you know i mean sure you could do that but then
from like where i'm sure this all came from from our local dev story then it's like okay well who
generates the fake data in that elastic instance for the developers to use dev story, then it's like, okay, well, who generates the fake data in that Elastic instance for the developers to use?
And that's where it's like, oh, well, we end up going from the beginning all the way through
the system then because you're going to need it anyways.
And you might as well test the system.
Right.
And let's take it a step further.
Maybe you shouldn't even be putting it into Elastic.
Maybe you should have some sort of mock API out there
because we've already said that you're going to create an API
that things should be calling.
So you should just have mocks behind that thing
that when you're in the dev environment,
you don't even stand up Elastic.
You don't stand up Postgres.
You don't stand up anything else.
And you just have your API return mock.
See, okay.
See, so that's where I'm going, right?
Like there's...
This is difficult for me though.
So where I'm having difficulty with this part of the conversation
is that like, okay, sure, but now I need,
like where does that mock live, right?
Like the way you were even describing it,
it kind of sounded like you were in some kind of a language,
like a C sharp or something that I'm going to compile that has language.
But now it's like, okay, what about, you know, I have a bunch of like, say a Postgres routine that
I want to, I want to test. Where's it getting? Oh, so I should put mocked it there. Okay. Let
me back the mock-up all the way into Postgres. And eventually that's, what's going to happen
is you're going to keep backing that mock-up, which is exactly what happened to us, by the way.
Because if you know the story,
that fake data didn't originally start where it is.
It did start more at like,
this is exactly where I need it
and I'm just going to create data to look like this.
But where I was going with that though is that
the problem that I have with that is that
if I want the problem that I have with that is that, that if I
want to not be responsible for generating realistic, you know, data, but I do want to write
code that runs on large sets of it. And I need the ability to just like flip a switch and like,
Hey, I need a billion, uh, you know, data points, you know, fake, you know, data points that
look real, right. Or, Oh no, uh, today's not that kind of day. I just need a hundred, right. That's,
that's where the rub is for me. It's like, you know, where do you, where are you going to put
that intelligence? And right now where we have that intelligence in our system is all around
that far end, but you have to run it through the system where it comes in.
Right.
Like it has to flow through every point.
Like it wouldn't a real production thing.
And here's the thing,
right?
Like this is actually a very hard thing to completely solve.
Like I wanted to bring it up here because as a developer,
like you have to have a pretty beefy machine to bring up,
you know, As a developer, you have to have a pretty beefy machine to bring up seven or eight different technology stacks that are all working together, right?
Multiple stream processors, things that are pushing things into and out of Kafka and into and out of databases and all that kind of stuff.
It's not easy.
So if you're really just trying to work on a UI, right, you just need the very end state.
It kind of sucks that you got to spend up the entire freaking infrastructure just to get something to show up in the UI.
But where do you cut that off?
Like, at what point do you say, you know what?
It's good enough to just mock it here at the API and not worry about anything
else.
I mean this, okay. So this is actually like a,
this isn't necessarily where you're going with this maybe, but I mean,
I have raised a similar kind of issue about this,
about like how interwoven dependencies are and the fact that like in that particular
situation,
we,
in order to have some fake data,
you know,
it had to come from a go all the way to Z or whatever,
you know,
which to me,
like I'm so used to it.
Like I don't mind it.
Like I,
it's,
I really honestly don't,
I kind of like it honestly.
Um,
but,
uh,
you know,
it does bring up the question of like,
Hey,
there should be,
if we do go back to the Bob Evans approach here.
Oh wait,
we said Eric and sorry,
I'm sure he's only heard that like a billion times.
So now I feel really bad.
Um,
um,
but,
but,
but,
you know,
we would have like a bounded context around these things.
And like,
we would have like,
I don't care what you're doing over in your land.
This is what my,
um,
you know,
I created the mocks for my purpose and I'm going to go with that.
And then we would use the other system for like scale testing.
Maybe,
you know,
we like,
cause it still has value.
I wouldn't get rid of it to,
you know,
for any,
so really what we're saying is where you should put your abstraction.
If I,
if I'm deciphering what we're saying is where you should put your abstraction. If I'm deciphering what we're saying here,
your abstractions should be able to be injected at your API layer.
Meaning if...
I didn't specify like an implementation, like injection.
Well, I say injection only.
I don't even mean IoT type stuff or not IoT, I say injection only me. I don't even mean IOT type stuff or not IOT, IOC type stuff. I'm
talking about more like you can swap out what backs that API by some sort of decision, right?
So get user information. Is it talking to Elasticsearch and Postgres and SQL Server or
whatever? Doesn't matter. You can tell it to just use some files that you
have on the system if you want, but that needs to be something that you can swap in
at runtime more or less, right? Like, um, whatever backside API, all the other things we're saying,
you don't try and abstract them. Like, like what, what you were saying, Joe, about Kafka. And that
was kind of what I was getting at is Kafka is sort of like the backbone of what you're doing a lot of times.
So you can't swap it out, right?
Like it's not just something you can say, oh, well, produce to something fake and consume from something fake.
It doesn't work that way.
It's not easy to do that, especially because it has its own protocols.
It's awkward so you keep that
and you run that you test that thing independently but when you need something to work for your
application it should be talking through an or multiple apis that can all be backed by things
that are swapped in at runtime whether it's mocks whether it's things at the file system level
whether it's coming from some data
storage somewhere else. That's what we're
saying is if you make that
API layer decent enough,
then you can decouple the other
bits of your application to where you can develop
them independently.
That's why I wanted to work in isolation
in the individual piece.
Just like a database. I love that I have a database
and it's designed to have,
you know, a billion concurrent connections to it that get data.
But I also love that I can hook up a graphical client to it and use it as a human and do
some things with it.
And that's really nice because it doesn't have to have those other things like the database
can run standalone.
So I want that from all my apps, but it's hard and I'll take what I get.
I mean, to take it one step further too,
and this hits on something that Outlaw mentioned is if you need a billion data points, right?
Like this is something we struggled with at various times too, because it's like to get
those billion data points, you have to generate that and it can take days, right? Like it can
actually take a long time to generate it. What really stinks about it though is if you're working
directly in something like a database, right? Let's say that you're in SQL server or whatever,
you generate a billion data points. Well, guess what? You had to change the schema tomorrow
because you're adding new things or you're breaking some things out into another table.
Your billion data points are basically shot now and you've got to regenerate them because it's a new structure. So even the
whole notion of having a backup of a database that people can just restore and use, it goes
out of fashion so fast because of changes to the application that it's useless. So it's almost
worth it to just take the hit up front, design a good API. Again, like what you said that Spoonraker said,
where it's like design it around the feature set that you need,
and then that way you can fake the scale that you need, right?
You can totally fake it without having to fill up a database
or without having to fill up some sort of document storage engine or something.
Unless what you're working on is actually something that needs to work at scale.
And then that's different.
That's the rub.
Because I was immediately thinking of some large data set type operations
that I've worked on where it's like, I can't.
How would I fake that?
Right.
Right.
Yeah.
I mean, if you're doing ML type stuff, I know in the past
you were doing some stuff with ML, whereas like I need a ton of data, right. And I need it in the
right format and you can't get around that kind of stuff. But when you're talking about your
applications that are instead of every single bit of your application, reaching into the different
storage technologies, make them go through an API. And then that way, you can put a layer in between things
so that the only thing that is tightly coupled
to those storage engines are the implementations
that get plugged into those APIs.
And that's easier said than done, too.
I mean, like, okay, so in that regard,
you're saying, like, you could basically have, like,
a repository pattern kind of thing
around every one of these technologies,
like a Kafka or a Mongo or a postgres or whatever right like right i forget what else you named
thought you named a sql server whatever you know pick your i say elastic uh yeah elastic just pick
whatever some kind of dow some kind of data access layer they could like live in front of it and then
if that's the only touch point right right? The nose of that thing,
then you're just saying like,
okay,
now maybe I fake that touch point.
Right.
And,
and instead of having like,
you know,
a SQL server Dow,
I also have a mock Dow and I can use my mock Dow,
but that could get weird too.
Yeah,
it can get weird.
Um,
but I think ultimately what we're talking about though is, is if your API has a contract and a contract you call get user, if that contract says the user gets you back a first name, last name, phone number, email, doesn't matter where that stuff comes from.
As long as whatever is providing that data gets it to you, even if it was across four different storage engines.
Right. to you, even if it was across four different storage engines, right? Like for those that
don't know, like Amazon for their ordering system, they don't store user PII information in the same
place as order information, right? Like you have to go to multiple systems to get it because they
don't want it to where you can pick up a hard drive and walk out and have everybody's data.
So very likely, even for something that seems very benign as
getting an address on an order that's coming from multiple systems. And so as long as whatever's
fulfilling that contract returns you back that data you need, who cares where it comes from?
And then you can mock it pretty easily. I think by the way, like I actually remember that as it
wasn't even necessarily, they didn't want you to be able to pick up the hard drive. It was that they didn't want you to be able to see the order of to and from.
They didn't want you to be able to see that Bill bought flowers for Monica.
It was even further than that, right?
Like if you packed a box with flowers, they didn't want you to know that the flowers were for Monica, right?
You didn't even know what was in that box until somebody touched it way down the line where it was just a label going on it so i mean it's super interesting and they really do a lot
to protect their customers but but it is it is interesting to know that just what seems to be
just regular data that you would always use is in multiple different systems the thing is though
that i'm convinced i i'm 1,000% convinced in this.
And if you want to fight me on it, I can meet you out in the parking lot after school at 315.
But we read all these books, and they have all these grandiose ideas.
And this is what you should do.
These are best patterns.
And they aren't wrong.
But also, sometimes they aren't practical. Well, right. But also sometimes they aren't practical.
Oh, totally.
And so we, as the type of people who get into this industry, we are lazy by nature.
That's why we're here.
We're like, oh, I don't want a job where I have to go and work.
I could lift things. I could just punch things on a keyboard like we like to solve problems but
we don't want to like do things and we also like even type in sometimes it's like too much we're
like no i want an easier way this code pilot thing sounds amazing i'll use that to like write
all my stuff so so as much as we read about like these great things and patterns that you're like, right on my stuff. So, so as much as we read about like these great things
and patterns that, you know, uh, Evans and Bob will tell us, uh, we're on first name basis.
Um, uncle Bob, that is, I wasn't, I wasn't trying to rehash a bad joke. Um, then, then, you know,
we implement those where we can, when it's not inconvenient to do so.
Right. But if it becomes more of a burden to implement some of those things, then it's like,
I don't disagree that we should, but at the same time, I got a job to get done, man.
We got to go. Let's do this. On the flip side though, there are times we're just trying to do
it the regular way
you end up fighting that a lot too because when there's so many different touch points and it's
like how many times should i spend a day trying to figure out why this didn't work because somebody
checked in a configuration that broke it right like it's that's why you know i'm writing tomorrow's
legacy today right so good this episode is sponsored by educative.io educative.io offers hands-on courses with live
developer environments all within a browser-based environment with zero setup required and that's
what matters make it easy so that you can get started fast and learn fast and with educative.io
you can learn faster using their text-based courses instead of videos focus on the parts you're interested in and skim through the parts you're not and uh speaking
of uh educative of course uh if you want to have some fun go look at the courses you can go to the
course home and go take a look at these things and it's like a kid in a candy store i'm telling you
so i was just looking at their devops path here uh it's 50 hours worth in a candy store. I'm telling you. So I was just looking at their DevOps path here.
It's 50 hours worth of stuff.
And there's a lot of stuff in there I would probably skip, honestly, because it's things like, you know, maybe Azure or Docker Compose or things I don't care about.
And I could do that because it's text.
And I can do, I can jump right into the things that I care about.
And it's easy and it's indexed and it's wonderful.
I can get right to the heart of what I need. And speaking of what I need, I just noticed that the Grokking, the advanced system design course that we mentioned before has a whole section on Cassandra that talks about
wide column databases and the way that the data is laid out on disk and the way the replication
works, which would have been great last episode when I got confused about how the data worked.
And so now I'm reading through this and I didn't see how long this was going to take,
but it's quite lengthy already.
So I'm enjoying myself here.
Going to get a nice cup of coffee in the morning tomorrow and finish this thing up.
It's really great, too, because like kind of to your point, Jay-Z,
is you could just ask yourself, like, what kind of developer do I want to be when i grow up hey i want to become a front-end developer
well guess what they've got a whole course on that i want to specifically maybe i want to be
react there there's a whole section on courses or modules on that wherever you want to go after
you can and better yet like when you do decide what you want to be when you grow up, you're going to have to interview for that job.
Well, guess what?
There's a whole section, like a whole listing of different courses related to like how to handle different interviews.
Right. learning interview, which focuses on the design side of ML by helping you design real machine
learning systems, you know, such as an ad prediction system. It's the only course like
this on the internet, but they also have, you know, DevOps for developers and decoding the
coding interview or coding career handbook. So whatever you want to learn, there's a course or a set of courses out there
for you. Be sure to check out the best-selling Grokking the Interview prep series with courses
like Grokking the System Design Interview, the one I just mentioned, Grokking the Advanced System
Design Interview, and Grokking the Coding Interview. Yeah, so go ahead and do this yourself by visiting educative.io slash coding
blocks, and you'll get an additional 10% off an educative unlimited annual subscription. You'll
have unlimited access to their entire course catalog, but hurry because they don't run these
deals that often. That's educative.io slash coding box to start your subscription today. All right. So it's that
time of the show where we ask you if you haven't already found it deep in your hearts to go out
and leave us a review, please do. We, we love to get them. We love it when, you know, if you have
something funny to say, like how, how properly we say niche or niche, um, you know, share it, um, go, go out
in, you know, if you've got a few minutes and you remember, uh, after your commute head to
codingblocks.net slash review, we have a couple of links there. I think one for audible one for,
uh, iTunes. And if you wouldn't mind, leave us a review and, and let us know how we're doing,
if we're helping you out or anything, we truly do love that. And if there's a particular niche that you want us to talk about,
then yeah, we'll talk about it.
Share that too.
I think I said it right that time.
I think so.
All right.
Well, with that, we head into my favorite portion of the show.
Survey says.
All right. So a few episodes back, we asked,
how often do you leak code? And your choices were never. I'd rather fill in the blank
or when I'm prepping for a big interview or all the time. Got to keep the saw sharp or well,
sometimes I start,
but then I remember I don't want to.
All right.
So this is an odd number episode in according to Tucko's trademarked
pattern.
Alan,
you are first.
This is the free open source pattern by Tucko.
So no copilot issues here.
I, man, I'm torn.
Like I'm going to pick on mine.
Not what I think everybody else is because I think that most people are going to fall into one of these two.
I'm not sure if it's never, I'd rather, or, well, sometimes I start, but then I remember I don't want to.
Let's go with that one.
Sometimes I start, but then I remember I don't want to let's go with that one sometimes I start but then I remember I don't
want it and we'll go with 30%
week
all right I'm going to go
when I'm prepping for a big
interview
30%
week
okay
all right Alan says well sometimes I start but then I A week. Okay. All right.
Alan says, well, sometimes I start, but then I remember I don't want to for 30%.
And Joe says, when I'm prepping for a big interview, also 30%.
So if we see a lot of activity on leak code from Joe, we should be aware.
Something's up.
Now you know.
That's what I just learned.
Okay.
Well, you both lost.
No.
It's never.
Yeah, it was never.
I'd rather blank.
Wow.
All right.
Rock on.
Yeah.
I do number four.
How much?
38%.
All right.
Good. number four how much 38 okay good uh alan was second though and did win by a percentage because
he didn't go over so so we'll give alan the kind of win nice all right um which will like just be
half of a trophy we'll just like cut it vertically right down the middle and hope that it still
stands we all get a trophy yeah um well i didn't say I was giving Joe one. Okay. Oh, oh. Yeah.
What?
No, you definitely lost.
What?
Because, so, well, sometimes I start, but then I remember I don't want to, was 31%.
So, Alan didn't go over.
Nice.
Joe did go over.
Okay.
That's why you get no trophy, sir.
Not by much, though, right?
Pretty close.
No, 3%.
Okay.
Yeah, you went over by 3%.
Yeah.
What about you, Outlaw?
Do you leak code?
I mean, honestly, I don't know that.
I guess, I mean, sometimes, but it's like because I'm bored or it's like Christmas or something and I have time.
And I didn't think to put that type of a choice on there. So I guess the closest thing that I would have on there would be like either the never I'd rather,
or well, sometimes I start, but then I remember I don't want to, I would be torn between picking
one of those two choices, given the options. But like normally, well, normally if you see me doing
it, it's because it's like, you know, Christmas or, or Thanksgiving or something. And there's
like a big block of time where it's like,
Hey,
there's nothing else to do.
And I get to like,
you know,
sit at my computer.
I was going to say family avoidance is what that was.
I wasn't.
Wow.
Okay.
Wow.
That totally paints a different picture that I did not intend.
And for any family that's listening,
that was Alan that said that.
That was not.
I'd rather,
I'd rather leak code.
That's why my
option is never. I'd rather spend
quality time with the family.
I like that. That's a good answer.
That's good.
Alright, well then
how about this one then?
What did Master Yoda say when he saw himself
on a 4K TV?
HDMI.
Very good.
Very good.
I think that's the first time we ever had like a dead on answer to that.
Nailed it.
All right.
Well,
that's,
that takes the fun out of the jokes part.
So,
uh,
all right.
Smarty pants.
How about this one?
Then,
um,
three SQL databases walk into a NoSQL bar.
A little while later, they walk out because they couldn't find a table.
You've done that one before, man.
Have I?
Yes.
Dang it.
Who's the no man?
Well, I mean, the first one Alan's shared with me, so he already knew it.
I knew that one, yeah.
But Phil sent me the other one on Slack,
but I didn't remember we'd say that one.
Yep.
All right.
Uh,
well for today's episode now I'm kind of torn cause we talked about the
uphill downhill thing,
but then like I started trying to write that one and I'm like,
yeah,
I don't think that's going to like,
it's going to be too obvious.
So,
uh,
you know,
I don't know that we should bother with that one. So I'm going to stick with what I originally had as the, the survey for this
episode. Um, and that is drum roll, please. Uh, no, just, Oh, there it is. That was so awful.
I was, I'm sorry. I apologize to the internet. I don't even remember how we came up across this, but it was which desktop OS do you prefer?
And your choices are Windows.
I like my OS named after things I don't look through anymore.
Or Mac OS.
I like my OS named after places I don't go.
Or Linux.
I like to learn how to pronounce my distribution.
When you said desktop OS, are you including laptops or is this
just desktop?
I was trying to exclude
mobile because I didn't want someone to be like,
where's iOS and where's Android?
We were talking about
I consider
even on a laptop, it's still your desktop.
Yeah, it's your desktop.
Your PC.
I don't know what you call it now i don't
know what you call it your computer but the one that's not in your pocket and also the one that
doesn't have like the screen that folds over it my best friend but now i just messed that up too
because that made it sound like i was talking about a laptop i don't know and you know what
forget the survey yeah those commercials where they say that the the ipad is your new computer that's garbage too
yeah not having it okay that got dark um okay well there's alan with uh can't have nice things
um i'm gonna i guess i'll try to go through this pretty quick but there was a
an um in which episode was it which Which issue is this? Everything is an
episode now. So this latest magazine that came in wasn't the latest, but this was an episode
of the communications of the ACM magazine that came in back in, uh, May. And it had an article
in here that I thought it would be pretty interesting to our world. The 10 best practices
for remote software engineering. And the author wrote this, that wrote
this, he, he based these 10 points, not on pan anything to do with the pandemic. Cause he was
already remote before that, but then ended up taking like, you know, all of his years worth
of remote work. And then, you know, putting together like, Hey, this is,
this is what could be good for a remote work. And some of it, I just thought was like,
you know, some good, good things to just call out. Cause it's very much focused on you as the developer in your own happiness. Right. Cause there was a quote in here where he says,
productivity is less a quality that can be measured, controlled, or improved directly
with tools, but instead is a human element that manifests from developer happiness.
And so if you consider that quote, like a lot of the things that the author then goes on to describe are kind of in that whole vein of like your happiness is what's going to matter, right?
So number one thing, the best practices for remote software engineering was work on things you care about, because if you don't care about them, you're not going to put in
a lot of effort, but have you ever noticed that? Like, have you ever, okay. We've all been there
where you've been assigned some kind of task, right. And it is, it might not be, it may or may not be customer facing, but you get so involved.
Like that thing is your world.
You love it.
Like that's the thing.
And you put a lot of effort into it.
And you know, everybody like for years, like, wow, that thing was like so useful and helpful.
And like, we still use it today.
Right?
Like, you know what I'm saying?
It is because it was something you cared about right
because like think about like how much how much in our day let's be honest uh let's hope none of
our co-workers are listening let's be honest how much like how many things do we do on a day-to-day
basis there's like i don't care but it has to be done right right? Zero. Okay, well, excluding...
You don't care about it at all?
Excluding Joe.
You just don't do anything.
Oh, no.
Yeah, that one.
Yeah, that's a good question.
I mean, there's definitely a handful of things
that you do every day that are just like, eh.
I would venture to say that, you know,
sometimes it's a lot and sometimes it's less, right?
Like, it ebbs and flows, right?
And so the point that the author here was making, though? Like it ebbs and flows. Right. And,
and so the point that the author here was making though,
is that like the things that you care about,
you're going to,
you're going to put more effort into,
um,
and,
and,
and you'll,
you'll even go out of your way to like put it in.
You won't even notice the effort,
you know?
So,
yeah.
That's why you get me working on something
is to tell me it's not working like oh crap like something weird happened and suddenly i care a lot
more yeah how about this one though do you define goals for yourself that's number two
i used to i've kind of gotten out of the habit i don't know i still kind of do like i used to do
this thing where,
um,
I had like a little no bad.
It was like,
okay,
here's what I want to have accomplished today.
If I get to these,
you know,
three or four things,
whatever,
I'll be happy.
And if I didn't make one or two,
I would just put it to the next day.
Whatever.
So I kind of had this rolling thing and I like doing that,
but I just got out of the habit.
But I guess I do still kind of have like an idea every day where like,
I know,
but you know,
it's still the daily level
i don't know about bigger overarching goals okay i don't personally do it but i my stories or my
tickets or whatever that i've got are sort of what my goals are to try and knock out and it's just
depressing because i feel like i'm going to nail it today.
And then a week later, I'm saying,
yeah, I thought I was going to nail that last week.
I guess they do have yearly annual goals or something. This six months, I'm going to focus on Kotlin or whatever.
The point that the author is making in this particular bullet, though,
is that like,
as a developer, excuse me, there's not necessarily like a very long ladder that you can just keep climbing, right? Like at some point you're going to like your, your developer side is going to like,
you know, that ladder is going to top out. And, and and you know, if you want to keep writing code,
then that's that.
Right.
But if you want it to move up,
then it's technically not part of the same ladder.
Right.
Does that sound fair?
Cause you're going to like start getting more management type,
um,
responsibilities and less about the code.
Right.
And so the,
the,
the author's point here was that, you know, it's, there's only
but so much ladder. And so you're going to, it, you need to keep making goals for yourself
because when you do get to that, to that upper ladder, but you want to stay there,
then it's like, well, what are your goals become? Right. It is like,
let's say that, for example, uh, we mentioned Amazon before, right. And, and they have like
SD, SD one, SD two, whatever. Right. And at some point, you know, like if you want to keep writing
code, you know, there's only been so many levels of that SD level that you're going to get to
before you're going to take, start taking on managerial responsibilities. And if you want to keep writing code, then your next developer goal
can't be to get to, Oh, an SDE, you know, four or five or whatever. Right. Cause, cause you've
capped out. Right. And so now it's like, you need to set other developer goals for you, which might
be things like, I want to take Alan, for example,
I want to get a MVP from Microsoft. I want to, I'm going to go do some talks and I'm going to
give it, get an MVP or, or maybe it's not a Microsoft one. Maybe it's a, you know, you want
to get a Kafka certification or Kubernetes certified application developer or whatever,
like those type of goals then become your motivation rather than it being
necessarily career placement.
Right.
So,
so that was his point there.
Or you actually,
I said he,
but I think actually this was written by a woman.
So I'll have to say she,
so that was her point.
Okay.
So number three, define productivity for yourself.
And this is kind of what you guys were describing
when I asked you to define goals for yourself.
Because you guys were defining like,
okay, here's the number of tickets I want to get done.
And that's how I'm going to define productivity,
if I've been productive or not.
Right?
But she defines a productive day as one that you finish and feel satisfaction that your work was meaningful.
Thus, it follows we might be able to define productivity for ourselves by assessing our daily tasks and deciding if they contribute to that feeling of satisfaction.
Okay. Yeah, I mean, that's definitely, those are the good days. and deciding if they contribute to that feeling of satisfaction.
Okay.
Yeah, I mean, that's definitely, those are the good days.
Well, that, but also what that means though, is that you could have like a whole bunch of checkpoints of things,
like goes back to my question earlier, right?
You could have like a whole bunch of things that are like,
you're not interested in doing it, but you've got to do them.
But there's no satisfaction there, right?
Yeah.
So does that mean you're being productive?
Yeah.
I think as long as you feel like you're making progress, right?
Like that, that's, that's perfectly fine.
It's, it's when you think that you were going to be done with something and you keep doing
it, that it's like, it's hard to ever feel productive.
Now, now, if you think about the first day that we've talked about so far, right?
It's really more about like, how do you manage yourself in your career when you're not around anybody else?
There's nobody else there to talk to and to help you manage it.
So you're trying to do all those things yourself.
Number four is where we started to get into things that like make more sense
in a traditional,
like remote work,
remote kind of situation,
which is to establish routine and environment,
which that one seems pretty straightforward, you know, because the point here was that,
that she was making is that if you, if you establish an environment where like,
this is my quiet place and this is where I'm going to go code, then it, it will eventually
become habit that that's just where you're going to go. And then it won't be a thing that, that like, it won't take effort to be productive in that space. Right. But if it's a
space full of distractions and whatnot, then it's going to be harder for you to be productive in
that space. And so, uh, you need to make changes to your environment and, or your routines, because
part of that might be just like, hey,
every morning or afternoon at this particular time, I'm going to go take a walk to clear my
head. Or I'm going to go work from a coffee shop in the morning and in the afternoons,
I'm going to go home. And then whatever that routine is, that helps you establish your productivity. Um, what about this one though?
Number five,
take responsibility for your work,
right?
What does she mean by that?
I mean,
I would assume that we all do that.
Oh,
you don't think so?
I don't think we all do that.
That's some of the stuff that's made me like kind of Mattis,
like a, you know, like kind of the most some of the stuff that's made me like kind of maddest, like a,
you know,
like kind of the most irritating to me as someone who doesn't take kind of
ownership of the work.
So it's kind of something like,
well,
you told me,
you told me to do it.
And so I did this way and you know,
whatever I put it,
it's like,
Oh,
well you didn't test it.
You didn't.
And now you find out it's broken.
You didn't,
you know,
rush to go kind of fix it.
You let other people like clean up after you.
So that kind of stuff is when I, when I hear your work, to me it means like not only do you deliver it and you do your best to kind of deliver it in a way that's professional and that kind of meets expectations that you've set and everyone is agreed on.
And then you also support it.
So if something breaks, then you kind of go and take care of it.
You don't just like leave it for someone to kind of like bang on your door in order to get you to fix it.
Okay.
I like that.
Where this becomes important, because again, this is all under the like remote software engineering, is that by taking responsibility for your work, you can start to establish trust among your peers and, you know, managers.
Right. establish trust among your peers and you know managers right and they'll trust that like hey
i don't have to have uh 18 different metrics to trust to track what alan is doing i just know
that if i give him this task he's gonna go get it done now joe i joe i need to like go look at his
hours and see where he's been in his time. Right. Like that's the kind of difference that the author was trying to make here.
So by taking responsibility for your work,
uh,
you know,
you're not just like committing it,
committing something and then going off and not caring about it.
Okay.
Take responsibility for human connection.
Now this one,
not important,
not important.
Is that what you said? I'm totally kidding Now this one, not important, not important. Is that what you said?
I'm totally kidding.
This one,
this one was all about like,
um,
either like being part of a community.
So like seeking human connection means in attending virtual workshops,
conferences,
conference calls,
or looking around for regular meetings that you could participate in.
It doesn't have to be, you know, necessarily in person, but it was just basically about like,
don't, don't just let everything be text on a screen. Right. Right. You need some kind of
interaction. Like this is a prime example for us, right? The three of us work remotely. I haven't seen you two in person.
It's been years, unfortunately.
God, it's crazy.
But we regularly keep in touch like this.
And there are some times where we'll talk for hours.
And Jay-Z will happily leave us be.
And then we'll be like, oh, we're still talking.
So yeah. So, so take response.
So you need the human connection if you're going to be successful from working from home. So that's
part of the 10 best practices. Number seven was practice empathetic review. So, uh, it was
basically like how this one was, this point was more about like communication
and communication can be hard and you can read things and you know, you just need to
take some, take a moment to have some empathy when you're reading something because what
might have been written, your natural instinct is you're going to try to read it in your
voice and you're going to put it in your, um, cadence or whatever, you know, at that particular time,
right? And that might not be the way that the author meant it. If they wrote you back something
that was short and sweet, that might just be part of their culture or part of their region.
That's just how they communicate there. Things are just blunt. Right. Um, you know, like take, for example,
there's the, there's the historical or not historical, uh, stereotypical thing about like
New Yorkers or, or, you know, rude. Like you always used to hear that, right. That like New
Yorkers are rude. And in my, my spin on that was like, I never considered them rude. It's just that
they didn't beat around the bush. They were just like, you know, if you ask the time, they're like,
it's one o'clock and they moved on. Right. And that's the kind of cultural
or regional kind of difference that speech could mean. Right. So that's what, what that one meant.
Well, I'll tell you right now, if you, if either of you ever respond to me
without an emoji, I just assume you're mad at me.
So I need that at the end,
at the beginning,
somewhere in the middle.
You don't get a lot of emojis from me either,
do you?
No.
No, I notice that.
You notice you get a lot from me though.
You want to know why, Joe?
I'm trying to teach you.
Okay.
This one I think is like really, really hard. Have self-compassion.
Basically the idea here was that we are each our own worst critic, right? And she says,
self-compassion can broadly be defined as being mindful and forgiving to yourself.
Right? Something didn't go well, you didn't get something done. Like, don't beat yourself up
about it. And I know that I am particularly bad about this one. Like, you know, I am definitely
my own worst critic when it comes to things. And, you know, I need to get better at it apparently um okay number nine learn to say yes no and not anymore so the idea here was
that um i don't know like how many times you guys think that this one would be a problem for you
guys but um you know sometimes you need to say no if you don't have the bandwidth to take on a new project or you don't share that project's vision, but, um, or if like maybe just in your gut,
it's saying like, you know, I shouldn't take on this project, but then there's sometimes there,
you do want to take on a project, but then there's also times where like you take on a project and
then you're like, you know what? I, I, I can't be involved with this anymore. Right now. The reason
why I was saying like, I don't know how much was, you Now, the reason why I was saying,
I don't know how much I was curious
what you guys might think about this one
is because at least in the way
she defined this particular point,
it was more about if you were to take on,
at least the way I interpreted it,
it seemed like it was more about outside projects
that you might take on,
not necessarily things already going on at work. But as I say that I could, you know,
that was at least from the, the way it was written, but I could definitely see how it
could apply to things at work too, where it's like, Oh, I probably shouldn't have taken on
that additional responsibility or that additional feature. Cause I don't have the time for it in my
current sprint or whatever, right?
Yeah, I'm sure we've all been in a spot
where you're like, we're going to take it,
we're going to take it,
and you're like, oh, I've been,
this is taking so much longer than I thought it would.
I can see how much further I have to go,
and I really don't think that it's worth it.
If we had known how long this was going to take,
I think we would have elected not to do this.
But now I'm kind of invested in it,
and so I don't want to give up.
I don't want to stop and lose all this, this time that kind of invested in it and so i don't want to give up uh i don't want to stop
and lose all this in this time that i've sunk into it i also know i have a bad problem with uh
something i do all the time where like i kind of feel like once i set the precedent on something
you can never take it back so my wife is always reminding me that uh you know as i've like learned
new things it's like you let the neighborhood your neighbor borrow your hose once and they uh
you know if they don't return it or it's paying the butt next time they come to
borrow the hose,
you can say no.
Even if you've done it before,
it's not some,
you're not breaking some social contract.
Like the world changes,
you have to change with it.
But I don't know,
for whatever reason,
I like,
I always think I have to be consistent in how I behave with other people,
which I am not consistent in anything else I do.
But that, for some reason, I don't know.
So number 10, and I've been going through these really quick.
I haven't given you guys a lot of chance to interject too many thoughts,
but it's because they don't matter.
No, I'm just kidding.
I'm just kidding.
Totally.
Winky face. So number 10,
choose correct communication channels. And we've kind of talked about this in the past as it relates
to like letting the communication, like what your sense of urgency in terms of the reply is dictate
the type of communication that you use. But what she pointed out here, which I thought was great, that we hadn't
considered yet too, is that sometimes the communication
might, maybe it should happen in the open.
And so, you know, regardless of sense of urgency,
take that out of the equation and just like, do others also need to be
aware of this conversation?
Does this,
does this need to be documented in any kind of way?
And so,
um,
you know,
consider that.
But there,
and there was also this point that,
um,
where she says like,
if,
if discussion that should be open and linked to code would be better on,
uh,
as a GitHub issue,
for example,
uh, rather than like say Slack, for example.
Right.
And I know that like I've seen way too many conversations that are definitely
technical in the weeds conversations that are about code that happen in like an
instant messaging kind of platform that are lost and you can't ever find them
again right versus if there was a uh you know something documented then other people you could
just point to me like that's where we previously talked about that thing and i don't want to ever
have that conversation again right yep um this happens to where you start a conversation on one
and then it's kind of awkward to bring it to another. I don't know if you ever have that.
Well, but she does make the point here in this.
I think it was this bullet point where she was saying that, yeah, it was this one.
That the conversation might start in a collaborative document type tool like a Google Doc, and then eventually as it starts to solidify,
then you might take that conversation into some form of version control.
Yeah. The only part here that's tough for me is I think one of the big reasons why a lot of the
times you'll see these things start happening in a chat is because if it's in a disconnected environment like GitHub, for instance, right?
Somebody replies to something.
Now you've got to wait for somebody to get the email and then see that they have a comment and they've got to go back and reply.
It doesn't flow.
And so you're out of that headspace at that point.
And so having the immediate conversation in a channel
where people are more focused is a whole lot easier. Now I do like the idea of taking what
came out of that context and putting it somewhere that's, that's more solid. Um, but, but that's,
that's the part of working remote that is tough, right? Because if you were in an office, you
probably wouldn't have that context at all
because somebody would just freaking walk over to a cube
and be like, hey, let's talk about this, right?
So, and then that doesn't get transferred
into GitHub either or into some sort of source document.
So I think you have similar problems.
I guess what you're saying though,
that makes a lot of sense is taking the output
of what that conversation was and getting it somewhere so that people can reference it at some point.
That makes a lot of sense to me.
I mean, her point wasn't necessary to capture the output.
I don't want to...
Oh, no, no.
That's what she was saying.
Yeah, I mean, I don't mean the entire conversation,
but what you were saying is if there was some sort of decision that was made that drove a code decision.
Right. That would be somewhere that you could reference it.
And so, no, I'm not saying that you have summarized the conversation or anything like that.
But I am saying, though, that the different channels dictate why you would choose one channel over the other.
Right. Just just the flow of conversation is way different in an email or in a GitHub repo or
in a Slack chat. Yeah, part of the summary here, she says that the software engineer who feels
in control of their work and has mental tricks for handling uncertainty and stress is more prepared
to deal with said uncertainty and over time is more productive and happy. Which is like, okay, that makes sense.
I can see that. Yeah, I want those things.
So, I don't know.
We've worked remotely for years
and years.
Thinking through some of these things, I was like, yeah, I don't know that I have done any of these things.
No, you totally have.
Absolutely.
All of these things.
Yeah, you've done many of these things.
I'll say the one thing that I think the three of us –
Not that one though. that I think the three of us, the three of us have done really good on is the, the human,
the human connection thing, because I think at least us three and probably several, several of
our colleagues, we were like, yo, when we have meetings, you turn the camera on unless there's
something else going on that, that, you know, I mean, if, if there's people destroying your
office because you're having it redone or whatever, fine whatever but uh even if your baby is in the background flinging poo over their head i don't
care turn the camera on true story keep it rolling um but but i mean it's so important to know that
there's a person there right and and we've actually seen it leak into other teams that we work with
right like a lot of times i don't know if it's peer pressure or what, but they'll start turning on the cameras and it just creates a more.
It's like going to sit down at dinner. Right. Like if you sit down with a bunch of friends, does everybody want to be staring at their phone?
That's not that's not interaction. Right. Like you want to be talking. You want to be interacting.
And and there's a big difference when those cameras are on.
So we've definitely taken some of these things and done them over time some better than others but
you know so i had um i had two and uh
this other one huh i missed it all i went too, it's okay. I think all three of us went pretty
decent. It's okay. This other one
though, I think
I'm going to like save
as some of my tips of the week. So
I'm going to go last and
we're going to head into Alan's
favorite portion of the show. It's
the tip of the week. Yeah, come
on. All right. It looks like I'm going first.
So I've got another IDE type thing for you.
I just discovered this today.
I searched for it on the Lark.
I wanted to see what kind of diff I could do in VS Code,
see if there's a cool extension for it.
And there is.
There's a popular one named PartialDiff,
and it does three things that make it really nice.
One is the list of diff of file versus file, right?
There's nothing really new there. That's like everyone can do. You the list you diff a file versus a file right there's nothing really
new there that's like everyone you do you can right click a file you can right click another
file and say you know kind of compare is left or compare is right whatever you can say you know
compare to previous whatever and that works and that's normal the two things that make different
is uh number one you can diff parts of the file so you can select something and say,
you know, right click mark as compare, scroll down a little bit, compare the top half of
the file to the bottom half of the same file.
Yeah.
Or if you've ever done something where you're like, oh crap, there's something, you know,
they're over here in GitHub.
I can see some stuff that I need.
And over here in my editor, I can see some other stuff that's similar.
I want to compare the two.
Well, then you could paste that into the same file and compare, you know, select, do your selection, right click, do your selection, right click.
Now you're comparing.
Oh, so that was nice.
Well, then number three realized I didn't even need to do that because it lets you do
a comparison with what's in your clipboard.
Yeah.
So you can go to GitHub, copy out the selection,
go back to your editor,
copy the thing you want to diff against, right-click,
say compare contents,
and it pops it open in a new window, and you're comparing.
Oh, that's pretty sick.
So I want to copy my answer from Stack Overflow.
Did I make enough change that I don't have to give attribution
and it'll tell me in the red?
Right.
There you go.
Oh, dude, did you even see the keyboard shortcuts for this thing?
Yeah, I did.
I didn't try them, though.
I just did a right click.
Control plus, control three will compare whatever you had marked as a selection with what's in the clipboard.
Control two compares to the other one.
That's pretty slick.
So what Jay-Z didn't mention is this is only for Visual Studio Code Ultimate.
That's how you get them in there.
You get them in the door.
Well played, Alan.
Alan with the joke.
That's right.
Yeah.
Yeah.
It's early tonight.
How much would you pay for a VS Code Ultimate if they had one?
I probably would. I don't even know. We don't even have features for a VS code ultimate if they had one? I probably would.
I don't even know.
We're like,
we don't even have features for a hypothetical,
but we're still like,
yeah,
I'd do it.
Yeah.
I'd pay for visual studio code ultimate.
And we shouldn't say that.
Cause Microsoft's going to be like,
but there's a market for this.
Yep.
Do you want to joke?
Yeah.
Yeah.
What did the pirate say on his 80th birthday?
Arr, matey.
Yes.
My jokes are awful tonight.
I got that one.
All right, well, I'm going to go home.
Oh, wait. Oh, wait.
I don't like this remote work stuff. Right?
I've been home for years.
Alright.
How about, Alan, you go?
Oh, you want me to go? Yeah.
I saw that you have a site on your tips
that I hate with a dying
passion. So that's interesting.
Yes. We'll talk about that in a moment.
All right. So I've got a few, I've got a few based off just various things that have happened
throughout the week. Um, one is I had to do some angular, not angular jazz, some angular stuff
this week. And I really didn't want to have to try and get it all set up right
like i didn't want to deal with that well on angular site they have a link to something called
stack blitz stack blitz.com is actually really cool so if you go there you can basically say
hey i want to spin up a development environment for pick one, Angular, React, React,
TS, Vue, Svelte, tons of things. You click it. It actually sets up a developer environment and
it automatically scaffolds out a project. So I just clicked on the Angular one. It puts together
an Angular application and it works right there in the browser right so you have your
ide which is visual studio code more or less in the browser and then your output on the right of
your application and i was able to actually go through and and import some angular um components
and do what i needed to do right there in the browser. And that was amazing because I
didn't have to go through the whole rigmarole of getting it all set up locally. Fantastic.
So highly recommend it. I was able to do stuff really fast and was super happy with it.
Um, so we were talking about abstractions earlier and it, the Kafka abstraction was
driving me crazy, right? Like I was kind of curious, like, is there anything out there?
Well, when I searched for that, I came across the site called microcs.
So M-I-C-R-O-C-K-S dot IO.
And this is pretty interesting.
It's an open source Kubernetes native tool for API mocking and testing. So essentially you can set up in Kubernetes,
these things that will give you APIs that you can hit and fake data through
and test and all that.
Now I haven't dived into this too terribly far yet,
but it looks like it's made for continuous testing in Kubernetes,
especially for dealing with APIs.
So this is something that I'll be looking at a little bit more here in the near future.
They have things set up for, as a matter of fact, I saw it in the blog.
So they've got a couple of guides here.
They have more, but they have MQTT mocking and testing Kafka Avro Avro and schema registry testing.
So they've got some pretty cool stuff there.
Um,
again,
haven't used it.
And then that brought me into something else that I bounced and stumbled upon
that is pretty interesting.
So we mentioned that Kafka itself has its own protocol that it communicates on.
Right?
So typically if you're doing a producer or a consumer,
you usually have a producer client library that you use,
which if I remember correctly,
you guys can tell me if I'm wrong here.
I believe that there's a standard C++ library
that most other languages end up wrapping, right?
So there's the C++ communication thing
that implements the protocol. And then you'll have C Sharp, Java,
Kotlin, whatever libraries that wrap that thing that are what allow it to talk back and forth to
Kafka over that protocol. Well, there's a pretty interesting thing here that the Stremsy operator,
which we've spoken about in the past, the Stremsy operator is a Kafka operator for running on Kubernetes,
um, with their own custom resource definitions and all that kind of stuff. But what's cool is
they expose topics for reading and writing via HTTP endpoints, which is really nice,
especially if you've got something like some IOT devices where you don't want to have to bring in
like crazy libraries or anything. If they've already got some sort of HTTP client on it, then you can hit this thing.
The Strimsy operator exposes this HTTP bridge for Kafka so that you can write to topics and read
from topics. So that's pretty cool. I don't think it's a great way to abstract for an API or
anything because you still have other things that you got to do behind the scenes, but it is a, it's
an easy way to get data into and out of Kafka, which is pretty cool.
That's it. That sounds pretty neat.
I have to read up about that one. Okay, so
I'm curious to hear Alan's complaint about this,
but there was, I So I'm curious to hear Alan's complaint about this. But I was basically trying to do some stuff.
The name of the article is The Difference Between GREP, SED, and AUC, which, okay, fine.
That wasn't what got me there.
But I was looking for more information on SED awk specifically and what i loved about this article with was that they have like great examples for like how you could do things with both well actually and grep too but i
kind of skipped over that part but um and you know specifically like if you wanted to use because
awk is like a full-on full-fledged programming language you know comparable to like
a pearl but you can do it all on the command line and i had some you know things i wanted to do
where like i wanted to tokenize some inputs from one thing and do some things with awk to like get
out of their outputs from it and so this was great for me uh now the website URL, it's not maybe the best name.
And honestly, I hadn't even noticed it until Alan said he doesn't like this site for some reason.
I forget what you said exactly.
Yeah, I hate this site.
It's Baldung.
Baldung, I believe is how you pronounce it.
Okay.
That's better than what I was going to say then. I thought it was Baledung. Baledung. Baledung. Baldung. I believe is how you pronounce it. Okay. That's better than what I was going to say then.
Baldung. Baldung. Baldung. Not sure.
So I'll tell you real quick before you go into why this article is good,
because I'm not saying that it's not.
I know that when I was diving into Java spring stuff,
they pop up for everything you search for.
And all of the articles are so incomplete
that you leave with more questions than what you came with and it was hyper frustrating that they
were at the top of every search list and I never got what I needed out of them it was infuriating
so I got to the point where I just skipped this site if I ever saw it but that that may be
unfortunate because if this was a good article,
then that's totally different than what I was experiencing with the spring stuff.
Yeah, I can say that at least for what I needed,
what I was looking for at the time, this worked perfectly for me.
Again, I was focused on the set and the awk parts of it.
I didn't know there was it for Linux.
I thought it was the only spring.
I thought it was just spring people.
Yeah, because it shows up everywhere for you, too, when you're doing spring, right?
Yep.
Did you ever find it useful?
Yeah.
It's definitely very starter-y kind of stuff, which I was looking for at the time, so it didn't really bother me.
So I'll have a link to that. And then
also, too, super good, Dave, on
our Slack mentioned. So I think it was a couple
episodes back now
I had mentioned the hack for using the architectural ruler
as the hack for using the architectural ruler as the,
uh,
you know,
the stand for your laptop,
just like you,
something you could just easily take with you,
but,
you know,
get,
uh,
you know,
a little bit of,
of a rise off of the desk so that your laptop could get some cooling
underneath it,
some venting underneath it.
Remember that?
So,
uh,
Dave shared with me this other
alternative that, and there's, if you look on Amazon, I'll have a link to it for Amazon, but
in the, you know, recommendations and people also looked at or also bought, there's like a whole
bunch of other similar kind of things like this, but I'm going to have the ones that,
I'm going to link to the one that he specifically shared with me.
It's this fold up stand that comes with a, a travel pouch. Uh, but it can, it can fold up
and it can like hold your laptop at different or tablet, whatever, uh, at different heights,
you know, different adjustable heights. So it could get really low, like my ruler example,
or if you needed it up a little bit higher, because maybe once you get to your office,
for example, you know, maybe use your laptop as a second display. And so you want it raised up
higher to be eye level with the other monitor that you might use in whatever your case might be.
Point is, is that there's different height adjustable adjustments that you might use in whatever your case might be. Point is, is that there's, um,
uh, different height,
the adjustable,
uh,
adjustments that you can make for this thing.
And it's,
uh,
aluminum.
So it would be lightweight and it folds up really nice.
So basically like,
um,
you ever seen those kind of like,
uh,
those tents,
like those pop-up tents where the,
the,
the sides like scissor out,
you know what I'm talking about?
So,
so this has that kind of scissoring
action so that it can collapse really small
and then fit inside of
a little
travel bag that
it includes.
I thought it was a pretty cool option
that I would share the link to.
It's like $14 on Amazon.
Yeah.
I got the rain stand, which is great,
but it's not portable.
Even when I wasn't using it for a little while,
it takes up a whole box of my Ikea shelves.
Yeah, I mean, if you travel,
this thing is very desirable if you travel.
And the iTunes review on this,
it has a 4.8 out of 5 on 3600 reviews so
people have been happy with this with this little uh you know laptop stand so we'll have a link to
that and then my other tip of the week and i should say tips of the week. So this was the other, uh, topic that I brought to the table
for this episode, which was from, um, taken from, uh, one of the, Oh, it was the, the, the current
May, June issue of code magazine, which, um, you know, if you don't already have a subscription,
you could probably get a free subscription to it as if you have a, um, like maybe your company gave you a
subscription to a visual studio subscription, for example, then, uh, you, I believe get a free
subscription through that. Um, at any rate, you should, you should go check it out at, uh,
was there URL at codemag.com? Yeah. Codemag.com. And you can, you might be able to, you might already
have something that, uh, lets you get a free subscription to it. And sometimes if you go to
like meetups or conventions or whatever, uh, you know, then you can get, uh, vouchers for
subscriptions to the magazine too. But at any rate, one of the articles in the latest episode, uh, latest issue was called
terminal tricks. And we love these. And there were some in here that I highlighted that I was like,
oh my gosh, I did not know that that was a thing. So right away, one of my first ones that the
author put in here that I did not know, like, okay, we all love tab completion, right? So you, you, you're in like whatever your favorite shell
is. And let's say you want to change directory. So let's say that, um, you were in, um, windows
is on my mind. So let's say you were to type in like CD space, backslash PR OG, and then tab,
and it would finish out like program files for you. right? Well, sadly, not for Windows, but I did try this in both Ubuntu and Terminal.
I used the Windows Terminal, by the way, and used an Ubuntu instance under WSL2 in Windows Terminal.
And I used the macOS built-in terminal and verify that this works
that let's say that you had a directory that was like slash far slash log slash journal right
did you know that you could type in cd space slash and then just the first letter of each one of those so i did not slash v slash l slash j and then tab amazing
and it would fill out the whole thing for you i didn't know that i did type the letter and then
tab i guess the deal is if it's not unique then you have to type more but i didn't know that no
that's cool yeah that's really cool i do exactly what what alan says like after each one i would
tab completion then type in this forward slash.
Yeah, it would have never dawned on me to think I could abbreviate them.
But yeah, it's cool.
So that was the first tip that I thought I would include there.
Also, I'm curious to know what your answer would be here.
If I said, hey, do a a directory give me a count of all the
files in that directory how might you go about doing it if you were in like linux or or mac
what's your way of doing it do you have a preferred way i always get the word count or whatever
no i don't do that i always look up there's a command that... All right, you already took too long because you had to look it up.
I always look it up.
Yeah.
I'm saying off the top of my head, I do exactly what Jay-Z said.
I would have done an ls space minus l pipe to wc space minus l.
So what that would do is that would do a directory listing by line, hence the dash L. And then when I pipe it to WC,
WC is a word count,
but I'm to pipe,
I'm passing in the dash L parameter to tell it to count the lines,
not the words.
And that would have been my,
that's been my hacky way for years of counting,
you know,
the number of files in say a directory,
for example,
D U is a D U.
No,
D U would, would, would would would uh give you
like a usage disk usage yeah there's there's a yeah anyway go ahead there's another one that
i've never heard of nl nl so you can which i love it because it's so much shorter you can just type
in you know how you know how like yep you You know how there's, especially like if you have O-M-Y-Z shell or if you're on Linux,
then you probably already have like an alias for L-L, right?
So you could do L-L pipe N-L and you're done.
And the beauty of it is it depends on whether or not,
you know,
now your mileage may vary if you like the output from it,
because in the,
in the WC example that Joe and I both use,
then your output is going to be just a number.
And that is the number of files.
Whereas what NL is going to return back is the very first line will be the
number of files.
And then it'll give you file one,
two, it'll give you a numbered list which is what the nl stands for it'll give you back a numbered list of all
the things right which depending on how many files you have in there it might like scroll off your
screen and if it's a real lot and you know a whole lot it might like you know blow past the buffer of
your your shell so it might you know you might have to pipe it to more or something to be able
to actually see it but uh i thought that was pretty cool that was like i'm gonna
have to remember that one here's a cool one that i didn't know about on mac os did you know that
there's power metrics as a command so you you can like just doetrics-h to see all the help documentation for it.
But they give a specific example here where you can, I'll say it, but it's going to be much to keep up with.
But powermetrics-samplers smc, then pipe that to grep for CPU die temperature.
And you can watch the temperature of your CPU from the command line.
That's pretty cool.
So that's just one of the things that you could get from this.
But the point being is that with the power metrics,
if you wanted to on your Mac,
get,
you know,
some,
uh,
data about what,
what's going on,
you could. Maybe you want to
shell that out somewhere
or log that for some reason or
alert something. I don't know.
Okay, how about this one? I didn't
know about this one, but did you know
what the bang bang does
on the command line?
No. not anymore.
It repeats whatever you last did.
So if you typed in pseudo bang bang,
it's going to repeat.
It'll,
it'll fill in the command line with whatever you let your last pseudo command,
for example.
Oh,
nice.
Or in my LL example,
you're like,
Hey,
what was that? I typed in LL something. You could just like LL space, bang, nice. Or in my LL example, you're like, Hey, what was that? I typed
in LL something. You could just like LL space, bang, bang. And it would, it would finish it out
for you. Now it doesn't run it. It doesn't, it leaves it in edit mode for you to be able to edit
the command, but it's pretty cool because especially in like our world of Kubernetes
with super long Kubernetes commands, or even like what gets me is I'm always
doing, um, we've talked about in the past how you can do a control R in your terminal to like
search your terminal. So I'm constantly like control R. What was that mini kube command I did
before? Uh, what's that eval command I did for mini kube before? Uh, like, uh, what's that? How
did I specifically run scaffold last time? Like I'm
constantly doing those types of commands and I'm always using a control R to do it, but not with
this. You could just type in like mini cube, bang, bang. And as long as it was your last one,
then that's what you're going to get. Yeah, that's nice. But maybe, maybe you did multiple
mini cube commands in the last, you the last 10 lines or 10 executions,
and you don't remember which.
And rather than doing the Control-R, you just want to see them,
you can do History-10.
Hey, real quick, though.
Reading this thing, the bang-bang, it doesn't sound like it'll run the last.
You said if you were to type minikube bang bang
then it would run the last minikube command you had from what i'm reading here it says that the
bang bang runs the very last command that you had so right so if so yeah so that's that's why i was
making the distinction of the history minus 10 because Because if you do bang bang with no other,
nothing else,
it will just do the,
whatever the last was.
But if you do many cube,
bang,
bang does the last minute.
I wasn't ever saying to do bang,
bang by itself.
I was saying to do like,
let's say,
let's say I do many cubes,
some command,
Alice,
some command,
DER,
some command.
And then I'm like,
Oh,
what was that?
Many cube one I did.
And I just type in many cube space,
bang,
bang.
It'll fill in the command line with whatever the last minikube command was that I did the last one.
But that's why I was transitioning to history minus 10, for example, because like, what
if there were several minikube commands that I did?
And rather than doing control R, I just want to see them all.
So history minus 10, we'll just show you, here's the last 10
commands you did or whatever number you give it. I'm giving it minus 10, but it would give you your,
your last commands. So I'm curious to see how this works because they're describing it differently.
So, so for instance, um, let's say that, um, you were doing something that usually requires you to
do pseudo, right? Like, um, I can't think of anything right off the top of my
head but let's say that you were going to open an application on mac and it's like hey give me
your password right i don't know what they're saying is if you typed in that command and it's
like hey you need to use sudo what i'm reading here is it says you can do you can type in sudo
space bang bang and it'll run the very last command that you ran but it'll put sudo in front
of it that's what it sounds like what they're saying you see what i'm saying so like if i said
ls let's say that i was logged into linux as a non um sudo user and i went to ls a directory
and it's like hey you don't have access well Well, I need to pseudo LS that same command.
You can do pseudo space,
bang,
bang.
And it'll run the very last command that you did,
except it will run it as pseudo at the beginning.
That's what I'm reading.
You know what?
Okay.
I apologize.
I misinterpreted that.
Thank you.
Because I was,
I,
I have,
it happened to be when I read that,
I was like,
Oh sweet,
let me go try this out.
But it was pseudo commands that I was experimenting with.
Okay.
So you're right.
It will,
it will put pseudo in front of whatever the previous command was.
Right.
So,
so if you had like this big long thing out,
like I've done this in the past when I was trying that and it didn't do that.
I can think of things like where I was having to do a disc clone or something
in Mac and they were super long commands and I'd forget to put pseudo in front.
And then it was like,
typically what I do is I'd hit the up arrow to bring back up the old one.
And then I'd hit control a to go to the beginning line. And then I'd type the up arrow to bring back up the old one and then I'd hit ctrl a to go to the beginning line then I'd type in sudo space oh no to get it and they're saying that you don't have
to do that bang bang is the last command the very last command which in in in what you're reading is
like where they're putting sudo and then doing bang bang which is putting which is how sudo is
getting in front of it right they're executing the last command as sudo.
Yeah.
We were both, or at least my interpretation of what you're saying was mistaken,
but I was definitely wrong in all of that related to the bang-bang.
But basically the bang-bang was the last command.
So if you wanted to repeat your last command with sudo,
then you could just type in sudo and then bang-bang and right away you go.
Or you could just do bang, bang, and hit enter,
and I guess it would bring up the very last command, right?
Yeah.
Yeah, except I'm noticing that on Mac I could have sworn it didn't,
like, it left it in edit mode, but I'm noticing that on,
I swear I didn't see this before in Ubuntu,
but now it's, like, actually executing it.
Or maybe that's because I needed a tab or something.
No,
I don't know.
Um,
all right.
Well,
the mysteries of bang bang still amaze us.
Uh,
don't even get us started on JavaScript.
Bang,
bang.
Uh,
um,
yeah.
Okay.
So,
uh,
where did I leave off?
Oh,
okay.
How about this?
So keyboard shortcuts on your command line.
So control a takes you to the start of the line and E takes you to the end.
L control L clears your screen rather than typing clear screen. I can't tell you how many times,
like it's been habit. I'll just type in like CLR on like a windows environment or like,
you know,
uh,
clear on a,
on a Linux CLS.
Yeah.
Yeah.
CLS.
Sorry.
What did I say?
CLR.
Yeah.
Whatever.
That was,
uh,
or clear on that.
Yeah.
Well,
yeah,
I know because I do it all the time until someone recently told me on a
stream about control.
Yeah.
I never knew about that,
but did you know about these
control you and control K? Do you know what those do? Control you empties the line. I don't know
what control K does. So control you cuts everything backward from the cursor and control K cuts
everything after the cursor. Oh, so it's actually putting on the clipboard.
Uh,
you know,
I say the cut part,
but now I want to test that or maybe it removes.
Okay.
So control you,
I've always used to empty it.
If my cursor was at the end,
I thought that's all it did was delete the line.
I never thought that it did it from the cursor back.
That's interesting.
Now I'm going from,
well, that might be because I'm going from there. So let That's interesting. Now I'm going from, well,
that might be because I'm going from there.
So let me try this.
Yeah,
it's not at least on,
it could be because of a,
like windows terminal and windows and Ubuntu and the facade that,
uh,
of WSL that maybe the clipboard thing isn't working or there.
Cause if it is putting on the clipboard,
I'm not seeing that work on,
uh, Ubuntu via WSL.
So for me, but, um, and then, uh, you can use the option arrow keys to like move around words,
you know, left and right. Um, let's see, what was the other one? Most interesting one.
Was that it? Oh, maybe that was it control k that's
interesting i never tried that one yeah that was the one i really liked the control u and control
k because there have been times where i've like gone backwards and i'm like hey i wanted to
change this i only needed like the first 18 characters or whatever and it's like oh yeah
instead of just holding the delete key i can control K boom, everything to the right is gone.
Like it.
And you could kind of remember,
cause like the U key is to the left of the K key,
you know,
depending on if you have a,
what,
what,
what do you call those keys that you,
you've been doing on your keyboard reviews where it's like lined up like
columnar columnar.
Some people, they like to
also i've heard them orthogonal or or or no or yes i don't know i have to look it up every time
yeah that and bang bang will never understand um okay well that's all i had that was my 18 tips
of the week and uh hope you've enjoyed You know, maybe you like that website.
I don't know.
Uh,
but I'll have links to it regardless.
Yeah.
And you know,
uh,
Hey,
if you,
if you haven't already,
uh,
subscribe to us,
maybe you're just listening because somebody pointed you out a URL.
We greatly appreciate it.
If,
uh,
you did take the time and even more so,
uh,
like Alan asked earlier,
if you haven't left us a review,
we super appreciate those.
Uh,
you can find some helpful links at the w w dot coding blocks.net slash
review.
TM.
While you're up there,
go ahead and check out the show notes,
examples,
discussions,
and more a,
and you can send your feedback questions and rants to our Slack channel.
And if you're not in our Slack channel,
the plugin that we had that would allow you to automatically get added there
no longer works, unfortunately.
So DM us or email us or go to our contact page and hit us up and we will get
you added in there.
And what's up outlaw?
You thought I forgot about this, huh?
You thought I forgot that you ambushed me at the beginning.
Now what's up?
I ambushed back.
I don't really have anything to say other than
the usual stuff.
So be sure to follow us on Twitter
at CodingBlocks or head over to CodingBlocks.net
and you can find all our social links at the top of the page.
Ha! Ha! Ha!
The show's not over yet. I was just kidding.
I got more tips to talk about.
Mic drop.