Programming Throwdown - 2018 Mailbag
Episode Date: September 6, 2018Hey all! Since setting up the #questions channel in discord, a lot of you have written some phenominal and thought-provoking questions both there and via email, so this is a great time to go ...back through our favorites and answer them in a Mailbag episode! Thanks for your support by checking out our Books of the Show links and our audible and patreon links! I was able to send out all the domestic Christmas gifts (email me if you haven't gotten yours!) but we could not ship them Internationally. I'm still looking for a solution there, and will keep you posted! Show Notes: https://www.programmingthrowdown.com/2018/09/episode-81-2018-mailbag.html ★ Support this podcast on Patreon ★
Transcript
Discussion (0)
programming throwdown episode 81 mailbag take it away jason hey everybody so uh
yeah i had an interesting time sending out the Christmas gifts.
Patrick and I, you know, took a morning. We kind of packaged them all up. We signed them all.
We saw a lot of people have gotten them. So we've gotten some some people have tweeted, you know, pictures of their of their logo.
That's totally awesome. Definitely keep doing that. I've been resharing all of the ones that, that, uh, that I see. Um, so that's pretty exciting. Um, yeah, I went to the, to the
post office, which has tons of these and, uh, the ones that were domestic, you know, just put a
stamp on, put them in the slot. And then I took the international ones to this gentleman and, uh,
he told me it would cost $14, uh. I have to fill out a customs form.
I'm not sure.
We're still trying to figure out what to do internationally.
I have a couple of ideas.
I definitely want to do something,
but it might end up being something digital,
so I apologize for that.
For everyone domestic, we did get those out.
If you didn't get it and you're in the
US, let us know. And yeah, it was pretty exciting. It was pretty fun. It was something that Patrick
and I both realized that things like running your own Kickstarter and stuff like that are
actually really hard. Once you have to do things that at scale it's really difficult maybe
we could consider if anyone's interested and you i think we have many in different places but there
are a number in europe maybe we could mail one package to europe and that person could remail
them to other people yeah that's true or uh maybe if there's someone out there in europe with a laser
cutter oh maybe they could do it and then we could try to like reimburse them.
Yeah. Yeah. So if you have a laser cutter and you're in Europe and you're willing to do some
extra work on the side, let us know, send us an email or hit us up on discord. Are they
more than the $14? Yeah. Yeah. Yeah. That's, that's your upper bar, right? I mean,
it has to be cheaper than that. Cool. Well, we're doing a mailbag episode so we've trimmed down
the the intro stuff but i wanted to cover one thing i saw that was pretty interesting
uh there was a article a series of articles actually that we have a link in the show notes
about disney had released one of their internal scene descriptions for one of the island scenes from the movie Moana in an open source
format this I believe it's PBRT physical physically based rendering technology or I don't remember
what the T is for but basically they took their internal data format which I guess is some
proprietary WDAS Walt Disney Animation Studios and they uh converted the entire sort of scene to this open
source description and so it's a picture of you know the island and some palm trees and it's a
3d description of all this and the textures that overlay all of this for sort of i don't exactly
understand how all of it works but for sort of one point of view uh and you get some of the ocean
stuff you get some of the mountains and i guess it's supposed to be enough of a description that if you do rendering uh and
the magic that goes behind that which we'll leave out for sake of time that you can reproduce what
it would have looked like in the movie um and i i this apparently came as a result of a panel
discussion where some people asked like why are you sort of still using proprietary stuff like
what prevents you from using open source stuff?
You know why?
And their sort of response was,
well, with the amount of data we have,
just the open source stuff kind of doesn't really work.
And most people don't demonstrate
their academic research on the level of complexity
that we have internally.
So it's often sort of not useful to us.
And so they took that as an internal challenge that like, hey, what we ought to do is release an example of sophistication level we use for a production movie, so that the community has a chance to understand what it's like. And it turns out for sort of naive pass at like rendering it. And it takes, you know, I forget, upwards of several hours.
And in fact, actually, they tried to do it on their home computer.
And it never finished due to basically thrashing, trying to use virtual memory to hold it all just to load the description.
It ran out of memory.
And so this person, apparently that these blog articles, P-H-A-R-R.org.
Anyways, go to the show notes or I guess maybe use your Google food to find it.
This person, I don't know the full context here, but it seems like they interned at Pixar
or Disney for a while.
So they had some insight to how the internal tooling work.
Can they have some anecdotes about that?
But they're trying to do this externally.
It doesn't seem that they you know work there now and it just sort of goes through various things
that they're doing trying to speed up the loading doing some optimizations and um it's a very
interesting read uh just about how rendering works how really big all this is how complicated it is
not per se to load it up and do it myself um but also one of
the things that in the i actually found this via uh y combinator news hacker news and one of the
top comments on there i thought was really good and insightful and reading this i i like that
person's comment which was uh you see that even in something as sophisticated as these people are
and experts at rendering and making
production movies like Moana and state of the art and all this stuff that you find out some of the
reasons things are slow and that they had to fix were things like they have only a 256 entry hash
map and they use string names of texture maps to go into that hash map in which there are far more than 256 as things have grown.
And furthermore, the hashing function was legacy from a long time ago and chosen just to take the first character of the string as your names have gotten so long uh in the modern movies that often they almost
all began with dot dot dot slash something as like a shortening of the string name due to some other
implications so every single entry into the hash map was going into exactly the same bucket and
just becoming a big link list traversal and amazing so they were sort of you know not being mean just
pointing out that like hey even experts make sort of entry level mistakes, organic growth.
It's actually complex problems can still boil down to relatively simple things and issue and just incremental and building up a body of knowledge over time.
Complexity arises, but that each individual problem really is sort of you know this attainable amount like just
figuring out why hashing is slow is something that seems more manageable in your mind than
how to render all of the Moana Island scene for a production movie studio yeah do you think that
maybe when Disney released the information that like they had already kind of unfolded it in some way where it's not efficient anymore?
You know what I mean?
It's sort of like releasing, like, if you had a protobuf, instead of releasing the.proto file, you released all the C++ code, right?
Sure, yeah.
So a couple of comments.
I think some of these were anecdotes from internal Pixar work that they were sort of saying, not specific to this exact thing. But you're also right. So one of the things they talk about, I think that is sort of the point is that when Disney converted this to this other format, is this other format doesn't have the same level of optimizations because it's not used to dealing with scenes this big. So Disney works at a scale that this PBRT, or at least sort of reading through this
and my sort of opinion on it,
is like Disney works at scenes,
so several orders of magnitude more complicated
than most of the PBRT rendering scenes.
And so, yeah, they do have to unpack some of this stuff
into very verbose structures.
And so part of what this person did in these articles
is do things like a more
efficient representations of the triangles for meshes that brought down like the file size by
you know half or something because exactly that and then you know trying to say hey how do we
open source this and i think that was kind of part of this whole discussion between disney and the
open source community is like yeah you guys your level of sophistication isn't where we need it to be in order for us
to sort of share technologies between each other.
And so, yeah, I do think it's what you're saying,
which is they have to unpack this binary custom format
into a very verbose open source thing.
But the open source thing is that verbose
because it's more simple to do initially
and no one needed that scale yet
right yeah that makes sense so it's not someone did something wrong it's just it just is the way
it is yeah it totally makes sense i mean it's cool that they sort of started that conversation
i mean now like maybe there could be some sort of back and forth and eventually the open source
community kind of catches up um my news is uh tedEd riddles. So this is really cool. I've been
following TED and TED-Ed for a while. And this is a pretty new thing. Basically, what's going on
here is they've gone and made a set of like kind of puzzles. I mean, there's a lot of these sort of
what's the word like canonical or famous puzzles over the years.
They're not like, you know, crossword puzzles or things like that.
They're really just kind of like simple mathematical puzzles.
And TED-Ed has been producing a series of videos on these.
They call it the TED-Ed riddles series.
And these are so fun. I mean, they kind of like, you know, I don't really know what their cadence is.
So it just seems like they kind of just serendipitously show up on my phone but it's always really interesting the most recent one it
was basically the nim problem which is um uh the idea is you have a set of stones and you have an
opponent it's a game your opponent has a set of stones and you can remove uh oh no sorry sorry
it's one set of stones among both between both of you and you can remove i oh no, sorry, sorry. It's one set of stones between both of you.
And you can remove, I think, one, two, or three stones, one through end stones.
And so then it becomes the opponent's turn.
And he can remove, you know, some number of stones.
And the person who takes the last stone loses, right?
So like, for example, if there are two stones left, you can take one.
And now the other person has to lose because he has to take one.
And so it kind of explains. And so I think that the riddle is the riddle comes down to how many if can you tell from how many stones are in the pile who is going to win?
And so, you know, obviously you could play it out. Like you could write some computer program
that tries all the different, you know, strategies, but it was really more, the riddles more about
like, is there some formula which could just tell you, you know, you know, do some simple arithmetic
and then this person's going to win. And yeah, it's really cool. I mean, I won't spoil it,
but there's a bunch of puzzles like this i
think they're really fun and people should check them out do they give but they give the answers
at the end oh yeah yeah right they give the answer so okay also it's um they uh when the problem is
sort of scalable so like for example with this one they start off by asking you what would happen if
there's two stones and then they wait five seconds and they tell you
you know just take one of the stones right so they kind of walk you through it and at the end
of it you kind of understand the problem so well very cool well time for book of the show book of
the show my book of the show is aesop's fables so uh this is pretty random i mean i'm sure everyone
knows that these are um I actually wanted to start,
you know, reading them to my son. So I started checking it out. And I found this website,
I think it's called free reads or free books, or something like that. But basically, I found an app
which just had a huge catalog of free, you know, a lot of these like classic books. So like it doesn't really make sense to charge for, right?
And so I got Aesop's Fables and I was like, okay, let me just read through it.
And yeah, they're all extremely morbid and end with death and animals killing each other.
And I was really shocked.
And then I realized, oh, what I thought were Aesop's Fables
were actually the children's version of Aesop's Fables.
And so I'm going to have to probably buy that.
But yeah, it's interesting.
I mean, one thing that Aesop's Fables, they're just much more harsh.
Like, for example, you have this story about, I think it's the ant and the grasshopper.
But basically, i might be messing
that up the animals but but basically there's one animal one insect that's sort of like saving food
saving food saving food during the summer and the other one is just playing all summer and just
eating grass off the ground and playing and then when winter comes the one who's been saving the
food has enough food to survive the winter right and so the whole story is like when times are good
save up kind of thing right well like as i remember in the children's version you know the
the one who didn't save up you know was really hungry and then the first one gave him food
to last them through the winter and he learned his lesson but in the actual fable uh the one who
played all summer died and the other one ate him uh no that would be uh even
more morbid um but no they're just like and then you know the grasshopper like withered away and
died i was like what so uh either way uh actually if you if you've only read the children's version
this version was pretty interesting um i would definitely read it um otherwise i mean it's
always good to to read these fables they have like good stories at the end and things like that
so so was aesop's fables originally those were the children's versions and we've just made them
less harsh for current children that's right okay well i i don't know if you know if we were to go
back to i think it's like greek times or something but i don't know if they uh read them to children or if they were actually fables that were told by
two adults and then you know we started teaching them to children i don't really know like kind of
how that progressed okay um but yeah they're either way yeah they're pretty harsh cool my
book of the show is the blinding knife by brent weeks this is the second book in the i believe it's called
the black prison no the black prison was the first book what is the name lightbringer uh trilogy
and i really enjoyed it uh second books of trilogies can sometimes be uh whatever they
call like sophomore slump i guess like it's a little difficult because it's not the final book
where you can have all the good endings it's not the final book where you can have all the good endings.
It's not the beginning book where you're introducing the world.
It's like the in-between.
But this second book, I was listening to it, as I always do,
but I just say reading.
Anyway, so I was listening to it, and I just found myself like
the whole book, you know, pulled forward through the story.
Oftentimes, which is not a bad thing but often
there are books where you sort of have periods where you're like oh okay that was good and now
i'm in sort of like a respite period or we're just you know building up their characters or
a slow scene or whatever the pacing but this book i just i didn't feel like it was frenetic pace but
it's just always like oh i can't wait to see what happens and when you have these stories from multiple points of view uh sometimes you find
like no i don't want to leave this person's point of view and go listen to that other boring
storyline but in this time i always felt like that was like no don't leave now i want to find
out what happens and they would go to another point of view but then i would get really into
that one and be like no don't leave that one to go back and it was just every time it switched
perspectives i was just you know really into it which and be like, no, don't leave that one to go back. And it was just every time it switched perspectives, I was just really into it, which in thinking about it later was like, wow, OK, I really enjoyed the book.
Regardless of even the fact that the story was good or that I found the world interesting, I was just finding that the pacing of it made me sort of want to finish.
In fact, I normally don't listen unless I'm commuting, but I actually listened to finish it when I wasn't on a commute because I was like the last couple hours.
I just really wanted to get through.
That's awesome.
So I really enjoyed that.
Of course, I would start with book number one, The Black Prism of the Lightbringer series before reading book two.
And if you like that, then definitely continue on to the second book.
I don't don't I haven't finished the trilogy yet, so I guess stay tuned.
But the good news is, unlike a lot of trilogies, this trilogy is finished.
So the third book is out.
I just haven't listened to it yet.
So no need to worry.
This is a new thing now where people refuse to start series before they're finished
because it seems like so many authors are not finishing off their series.
That makes sense. So the did any of these paths intertwine? Or is it all going to happen in the
third book? Um, no. Oh, so yeah, so some of the story point of views do intertwine with each
other. It's not one of these ones where you're like, I don't even know how these stories relate.
Like, it's, it's pretty clear how the different stories relate to each other in this specific
series.
Okay, cool.
And this is just for people who didn't catch the first one.
This is a fantasy series where there's magic and the magic is sort of related to color of light, like the spectrum of light.
So people are able to use magic based on some colors.
Like some people might be able to use red light to make magic and some people blue light.
And each of those have sort of characteristics about them.
And it's just a sort of interesting take on magic system.
So is it literally light?
So they have a flashlight to help them with magic or something?
So it's, I guess, not set in times when there's flashlights, but they do have is not a big spoiler.
So they sort of talk about, you know, only a very special set of people that have special meaning in the in the world can use white light and sort of split the light.
And hence the name prism. Normal people have to use reflected light of their color. So like if you're a green person, you can be outside and you can absorb the green light reflecting off of the grass.
But then also they invented the ability to make spectacles like glasses that are tinted.
So that if you have your spectacles on, then you can absorb green light directly from sort of white light.
Oh, I see.
And so there's some clever stuff in there about that. I don't want to say too much without sort of white light oh i see and so there's some some clever
stuff in there about that i don't want to say too much without sort of sure sure of spoiling it but
um wait it actually says book two of five now i'm confused what is this oh i guess maybe there's some
in between books oh sometimes they do that right like there's a side side story that's optional
okay well i might be wrong about this series and maybe it's not a trilogy maybe i thought it was a trilogy and it's a quintology i i don't have time to read this right now so
i withdraw my earlier statement until further review you're gonna unread these two books
until i thought it was a trilogy but this is not the first time this has happened to me i'm very
confused are all five books done or no so there are currently okay i'm just clicking on the amazon
page and it says book four of five just came out last year oh i see okay uh so i never mind
so i retract my earlier statement do not start this well it's pretty it's pretty sure he'll
finish the fifth book i mean it seems like he's doing a book a year roughly uh yeah so the yeah
one year one year two years two years so yeah cool
so yeah i think you could start reading knowing that it'll be done i don't know i'm not yeah i'm
not getting this is a whole rabbit trail of okay moving on moving on um so if you if you want to
read four out of those five books you can do it on audible um check out audibletrial.com slash programming throwdown
i'm still going through basic economics but i did buy uh super intelligence and that's going to be
next wait that sounds like a good book is it gonna help me yeah no spoilers we can't spoil
it actually just plugs in it plugs into your brain Ooh. It's a bionic book.
So, yeah.
But I've been reading out Basic Economics or listening to it on the shuttle.
And actually, I have a pretty long walk now because I end up walking about a mile and a half before I hop on the shuttle.
And I've been listening to it on my walk as well.
Oh, hey.
That's pretty good.
Yeah, it's not too bad. Cool bad cool also you can support us on patreon patreon.com programming throwdown and uh
make a donation for each time we release an episode and we've that's been growing pretty
good so thank you to all of our patrons yes that's right uh thanks to all our patrons and
your continued support yeah and uh you know i hope you like the uh christmas present um we'll figure out what to do for international folks but yeah don't. And, uh, you know, hope you like the, uh, Christmas present.
Um, we'll,
we'll figure out what to do for international folks,
but yeah,
domestic,
um,
yeah,
domestic,
you know,
uh,
uh,
hopefully you like the Christmas present.
Uh,
we,
we take all the money and we use it to,
you know,
get more people on the show,
pay for server costs,
pay for microphones,
do all this stuff,
figure out a way to get discord to work.
Um,
might have to buy like some third party thing,
but, uh, uh, but the rest of it, we it we try to like you know dole it back out so um cool thanks for supporting us there
on to tool of the show show my tool this show is tensorboard um so this is pretty cool it's
actually starting to become decoupled from TensorFlow.
So I'll give a bit of background.
TensorFlow is a library for doing, it's basically like a BLAS on steroids.
So BLAS is like a linear algebra.
It stands for basic linear algebra system.
And so the idea is, let's say you need to add two vectors.
So you have two lists of numbers that are the same length,
and you need to add, you know, pairwise add each of these numbers,
or pointwise add each of these numbers, right?
You could write a for loop, and you could say, you know,
yeah, C of I equals A of I plus B of I, right?
But that's not that fast, right?
And so when you start doing a lot of this,
you know, you're adding vectors, you're multiplying vectors, you're doing the tensor product,
you're doing all these matrix operations,
the speed becomes really, really important
because chances are this is the code
that is going to take most of the time
whenever you're building one of these type of systems, right?
So for a while there was Blaz and it's still around,
but then people started building kind of on top of that.
And TensorFlow is one of these sort of super libraries.
So it could do all the Blast stuff.
It could also run on the GPU.
There's also a whole bunch of like kind of specific scientific functions.
And it comes with this thing called TensorFlow board.
So you can, similar to like the
MATLAB environment, you can kind of easily plot things and things like that. So you can, you know,
on the GPU, do a bunch of matrix operations, and then you could plot the result. It'll actually
copy it back to your CPU and then kind of render it, right? And TensorBoard is awesome. It's got a great user interface.
It's awesome visualization.
And so what you're seeing is the open source community
just adopt TensorBoard,
really just independent of TensorFlow.
So there's this thing called TensorBoardX.
And I've also seen like OpenTensorBoard
and a couple other things.
I believe TensorFlow is actually going to upstream one of these implementations or some
hybrid of them.
And the net result is, you know, if you have a chunk of data and you don't even need to
have made this data with TensorFlow, it could be something you made in your web server or
something like that.
You can write this data to a specific file format
using this TensorBoardX. And then you can use the TensorBoard to sort of visualize that data.
So it's disconnected from the rest of TensorFlow. And yeah, I started using this a couple of days
ago. It's pretty cool. You know, I mean, if you're using something like MATLAB, it's pretty easy to
graph things. But if you're writing just a desktop program, it might not be obvious, like, You know, I mean, if you're using something like MATLAB, it's pretty easy to graph things. But if you're writing just a desktop program, it might not be obvious.
Like, you know, how do I, you know, how do I dump data to a file that then I look at in a graph format pretty easily?
You know, often people will dump it to, let's say, CSV and then they'll use Excel to look at it.
I mean, that's OK. But this this I think is going to be a lot better when it's ready. That sounds pretty cool. I mean, visualizing always helps. I just like it. And
there just always helps. Yeah. Yeah. I mean, you know, this idea that like, oh, there's no compiler
errors. I'm done. Yeah, that doesn't really work. I mean, not only for the stuff I do, but just in
general. I mean, you know, for example, let's say you're building a website.
Some number of people are going to, let's say, like their browser is going to crash on your website.
It doesn't mean it's your fault.
They might have viruses on their computer.
Who knows, right?
But you want to be able to plot that and see what that looks like.
So it's like, well, anything you do is going to involve dumping out some data and looking
at it and uh you know excel is just not really i mean you could do it but it's not really made for
that um this this thing is really made for that nice yeah i mean i think visualization and telling
that story is always you know super critical for people understanding the work you're doing
yep yeah totally well my app is much less cool than that
it's a game surprise usual sproggy would i don't know if it's how you say it s-p-r-o-g-g-i yeah i've
played this game actually oh you have oh good i picked one you know about yeah that's right so
this is available i guess also on the computer but on both ios and android it's about five dollars
um and this is uh well i guess you would call a rogue like um where there's uh it's
a kind of a turn-based game but you kind of don't it's not as turn-based as other games so you sort
of get to make a move then the world makes a move and you make a move and you're on a grid of squares
and you try to defeat the bad guys and move around sort of randomly generated levels that have a
theme and progress your people
and you will die a lot or at least i die a lot uh and then but you get to sort of keep your gold
buy things to improve sort of level up your characters uh and they have a variety of different
sort of classes you can play as and i for me this is one of those things where i really like i found
not so much liking games uh on the on ios that are sort of big epic games i mean
they're good i just find it i prefer to just kind of play those on my computer or console
and i guess this is me uh and there are some most people are like that yeah i i believe so although
i mean it's becoming easier to play like i have a my ipad now i do have some games on that i sit
down and play with it
it's becoming more like it but anyways but this fills that kind of i want to play something more
than just like a solitaire game or whatever but not a super in-depth game and so i want to be
able to play in sort of two to five minutes like a session or whatever and this fits right into that
that sweet spot for me yep yeah it's actually technically a rogue light which means
uh you know in a rogue like game you start from scratch every time oh okay so what you know that's
uh it's it's it's fun but it can also feel kind of frustrating because the only thing that you get
in between games is some knowledge if anything right um with rogue lights it's sort of like when you die you
get something permanent and eventually those permanent things you'll get so much of them that
even if you aren't that good at the game you'll eventually be like overpowered let's say relative
to where you're at and so i actually like rogue lights a lot better because it gives the game uh the game developer a
lot more freedom so you know he can make a section that's really difficult and if people can't really
figure out how to get around it they can kind of just grind through it versus a rogue like a game
I mean there's games like dungeon crawl stone soup where people have been playing for like eight
years and they can't beat it you know so uh um but yeah i thought sproggy wood was uh was awesome i didn't actually finish the game but
i got pretty far and yeah i i really love the way they did it um for people don't know the roguelike
sort of style it's basically kind of like a grid and it's kind of frozen when you're not doing
anything which works really well on
mobile because like you can kind of think for a little bit you could pause the game is effectively
paused all the time but then when you do something for however long it takes for that action to take
place that's when the world is sort of elapsing yep so if you've never tried one check this one
out there are other ones too if you've never experienced one, check this one out. There are other ones too, if you've never experienced that genre.
Yeah, totally.
Cool.
Well, this episode, we decided to do a mailbag.
It's been a while since we've done one.
And so we collected questions that have come in over the last day slash month slash several months.
So first we're gonna start with some email questions.
Some of these are actually just suggestions
and tips you guys have sent in.
And I've tried to just go down to first names or if people preferred something else.
For Discord, they're just sort of handles.
So hopefully the people who sent these in know we're talking about you.
And many of the ones we've replied to already, but I thought they would be useful to put in here.
And so we'll go through these. So first up is Nathan sent us an email
about developing games in Lua
using Pico 8 and the Pocket Chip.
So the Pocket Chip is a physical device
that is, I guess, sort of like an Arduino,
but maybe a little more in a different way
where you more progress.
It's sort of what you call like batteries included i
guess like it has more to do with just the thing instead of needing to learn to build circuits and
do stuff with uh and the pico 8 is actually uh i guess oh you just call like an emulator it's a
console that just is a program but you write programs for that program like levels and stuff
and games in lua and then you can sort of email those quote-unquote cartridges
to other people to play on their Pico-8s.
I had never seen that before.
It actually seems pretty cool.
Oh, I thought the Pico-8 was also a physical thing, isn't it?
I don't think so.
Oh, interesting.
Oh, okay.
So you also didn't know about this.
I guess I was thrown off when I saw the pictures.
Oh, okay.
Um, so the pocket chip has like a keyboard and a screen attached to it.
Uh, and I haven't checked into it since it first came out about, I guess probably a little
over a year ago.
Um, and I knew it was like getting pretty popular and it was like sold out and I just
never sort of ordered one, but I guess I should, because now that it's been long enough, there's
probably a lot of cool stuff to do with it so yeah that sounds awesome thanks for that suggestion
nathan very cool um dylan asks uh about modding video games i think uh yeah i mean i actually used
to do this the first sort of programming i did was was way back in uh high school and uh i actually
i don't know if this i guess this doesn't really count as modding
because it was an open source but
remember those mods?
Those text based mods? Sure.
So yeah, basically just
they were all open source so
I just made a version of those
where you could make your own items
and so it's one of these things
that completely broke the
whole game because the whole point of the game
is to try to progress and get better items
and so if you just make your own item
it really doesn't matter
but yeah that's kind of really how I started
getting into programming
was by kind of modding games
I made some Starcraft maps
with a bunch of these like they're these trigger
based kind of like rule based language
and yeah I think it's a great way to get started with a bunch of these trigger-based, rule-based language.
And yeah, I think it's a great way to get started.
Also, the nice thing about modding video games is you don't have to worry about the art.
So people kind of suspend belief on the art.
So you could have a StarCraft character who's really supposed to be Mario,
and just as long as you call him Mario, people kind of see okay this person was working with with what they had right um so so
that that part is kind of nice and yeah i think it's super cool i think also it could get really
complicated if you start actually trying to reverse engineer the game and stuff like that
yeah so in general i think modding video games is something you see a lot of programmers do
i'll slightly disagree i think today there are better ways to get started than modding video games. If you're really passionate about it, perhaps. But I think using things like Unity or, and I know that's like a dirty word now, or like I guess Ogre now is trying to get better at this or we've talked about other sort of game engines and more environment setup
i think there's pretty good other resources for sort of i don't say cobbling together but sort of
hacking together all the framework and engine you need to start doing your own thing without a lot
of the limitations that modding a game has um yeah that's a good point and so i i also have
similar to one of the first things i started doing was trying to mod video games and, you know, use the Half-Life level editor to build levels.
And yeah, I mean, I also did do a bunch of that when I got started as well, because I feel like writing a game from scratch was way harder or way less supporting resources you could get at the time. And so I'm curious now though, if that really is the best way, but it is definitely a way a lot of people sort of,
I guess, Jason and I's era did get started.
So I can't knock it.
Yeah, I mean, I see your point.
I think that like from a coding standpoint
is definitely much easier.
The issue is if you make a game kind of that's not a mod,
people I think have different expectations.
Oh, I see. That's the issue like especially on the art side is uh you know the expectations like if you make a minecraft
mod everyone expects like if a pig is supposed to be you know a mech or something like that people
say well you know okay yeah that's what the person had to work with fair point um but yeah i know i
agree that like uh it's much easier to make a game now
than it was when we were when we were doing it modding was pretty much your only option unless
you wanted to spend a whole year writing really gnarly like open gl code and stuff like that
i definitely go for a game that has a modding community and hopefully a good environment for
it though rather than trying to reverse engineer if
you're starting out yeah right and especially a way to sort of get feedback quickly a community
the nice thing about starcraft was uh if you made a custom map for starcraft um you could just start
a a uh instance of that custom map people could look at the title and decide to join
and then it would transfer the map to them automatically so it's like you don't have to worry about deployments finding a community all
that stuff um but yeah i'm not up with it for modern day so no recommendations about current
games that i'm same here okay so next one we have is david which uh he sent in a i'd never seen this
before uh it seemed pretty useful although although it isn't particularly recent.
This is aduni.org.
And this was an Ars Digita University,
which I guess ran 15, 20 years ago.
That was a program where they would give you
sort of a one-year super intensive,
almost like a master's degree in computer science.
And for fundamental stuff, he sort of recommends that they have all the courses uploaded. Similar, there are lots of
other things that do this today. But this is sort of if you're interested in it from a kind of
university perspective, or especially if you've gone to university and forgotten a lot of it,
I guess this will have more familiarity to it than if you're learning from scratch.
But I checked it out.
It seems like I haven't gone and watched any of the videos yet, but there seemed to be
a bunch of good stuff here.
So, you know, I'm passing along that recommendation.
Oh, very cool.
Wow, this predates, you know, Coursera and Udacity and all of this.
Wow, that's wild.
It's amazing.
Jack asks, how do we manage passwords?
That's a good question.
I mean, I use KeePass.
What do you use, Patrick?
Like LastPass?
No, I use, how do people do?
I guess I, I don't know.
I'm too cheap to pay or trust anyone.
So yeah, I use KeePass and keep it synced with,
I use this Resilio sync.
It used to be BT sync and sync it between computers.
So the database, which is encrypted with the, which I had to explain to, you know, I share it with my wife.
And, you know, we use a very specific password that's not shared with anything else.
It's much longer, much more secure.
But then inside of there, we, and then we use its internal thing to generate new passwords.
And we try to do that.
And sometimes we'll, for less security things,
we'll use, you know, like the browsers remember passwords,
but we try to be very careful not to use that so much.
I don't, I guess just a little bit of paranoia.
Well, and you know, your computer could break
unless you're using the one where it remembers across,
like it's tied to your user account.
Yeah.
Yeah, the Kee pass is really nice i have
the uh the android app which um it can actually uh use the fingerprint scanner so when you launch
the app you just fingerprint in and then you uh it also has this cool integration where um
it puts a button it basically makes a key pass keyboard on android and so if you kind of uh if you if you click on where you need to put in a password,
you change keyboard, it says KeePass keyboard,
and then it can actually associate every app with a password.
And so just based on the app you're on,
you just fingerprint in and the password gets put in automatically.
So yeah, KeePass is the way to go.
It's totally open source.
There's a bunch of different implementations. Implementations might not all be open source, obviously. But I think
for Linux, I use KeePass XC, which used to be KeePass X, now it's XC, but I think it's on almost
every Linux distribution. And for Android, I use, I think, Minikypass, something like that.
Yep.
There are a lot of good choices.
You know, I actually would say
choosing any that aren't super scammy.
So any of the sort of well-known
password managers
and having it generate
sort of secure passwords
is better than trying to memorize
insecure passwords for everything.
Yep. Yeah, absolutely.
But that's not my background.
So consult a security expert.
Yeah, right.
So a listener who wished to remain anonymous
asked a couple of questions.
First one is, for job security,
and we'll try to be a little rapid fire on this
because this could be a rabbit hole.
For job security as an individual,
is it best to have a little knowledge
on a lot of languages
or to specialize in just a single one?
You want to take that first as an A or B selection?
Yeah, it's a good question.
I mean, I think honestly, instead of trying to strategize, you should really be more reactive, right?
I mean, I think it's good to, for me at least, I think it's fascinating to learn about a bunch of different languages.
But whenever you start talking about what's better than something else,
you immediately start talking about like,
you know, actually this person explicitly said job security.
So it always comes down to some type of career thing
or some type of optimization thing, right?
So I think, you know,
like I would think of like learning different languages
as sort of like an exercise in like philosophy
or something like that, where it's a good thing to do.
It's like a nice hobby. It's instructive. And I think it will help you in, let's say, somewhat like esoteric ways.
But if your goal is, let's say, job security, then it's a bit more reactive.
So you have to kind of see, OK, you know, what job do I have now? Is it the job I want?
If assuming I want to keep the job i'm in right
now what do they want and how can i give them more of that right if i want a different job how do i
get towards that right so it's really it becomes much more contextual so it's hard to answer right
that's a fair point i guess my answer here would be somewhat of a dodge and saying
neither and a little different than what jason is saying about reaction but doing what makes
you happy because i think being happy will make you a better employee which
will make you do better work which will make the company like you more as a general rule yeah that's
true and if that doesn't work then like you might want to find a new company i know it's really
tough speak i guess but like i've found that generally to be true um and but what i will say
is for me i think having having some people call this like
the paint drip method, the tentpole method, there's a variety of names it gets. But I mean,
it just boils down to having one or two languages that you are really good at, that you like can sit
down and people will come to you for like help assistance, you know, sort of inside and out.
And then any other language that your company uses, or you're familiar with you know sort of inside and out and then any other language that your company
uses or you're familiar with having a sort of minimally viable amount of working knowledge
so for me that works out that like in the past it's been java right now it's c++ i do a lot of
stuff in c++ and i by no means consider myself an expert but i'm definitely proficient enough to
capably get all of the tasks i need to get done done in it.
And we occasionally use Python,
and I'm relatively bad at Python,
but I try to be good enough
that if someone else is doing something in Python,
I can follow what they're doing.
I can review their code.
I can offer suggestions.
I can debug it in a pinch.
So I can't be bad enough at Python and just say,
nope, I'm not a Python guy.
I'm C++.
If it's not C++, get out of here um that's not a good answer some people will consider it a good answer i don't
like that answer yeah i like this everything that your company uses you should be passingly familiar
with yeah or at least willing to learn it if you yeah that's fair um then then the second sort of
follow-up thing is what kind of things happen when a whole
organization decides to switch programming languages yeah i mean i saw this uh where a
very large organization changed kind of their most popular language and uh i mean these things
happen gradually um you know there's you know there's there's uh you know these kind of things
kind of have to be top down.
I mean, the idea could be bottom up, but then the decision has to be top down.
Right.
And so, you know, once, once a decision has been made, then there's not really much say.
Right.
So it's really about learning the new language, using it as an opportunity to refactor a lot of things.
But, yeah, I mean, I'm not necessarily opposed to it.
It's really, it's definitely a decision
you can't take lightly.
But I think it is really important to say,
okay, how much debt do we have because of this language?
And, or it might not even be a whole language,
but framework or what have you.
And you know, when's a good time to make that move,
et cetera, et cetera.
Yeah, so there's some more context to this I sort of left out, but I mean,
I think when this happens, there will be, especially not just switching frameworks,
but switching whole languages. There will be people who will basically quit who they don't
like I'm a Python person and I don't care that everybody thinks we're moving to C plus plus I'm
quitting. I do Python. Um, that's going to happen. Um, I think it's, it's always rough. That's going to happen. I think it's always rough. There's going to be people who always liked it the way it was. But that's true of almost any change in just, I guess, in life, but especially at work. Anytime management tries to change something, some group of people are going to say, well, it was better before. Anytime there's a mistake, people are going to point and say, I told you so. I told you this was a bad idea. But yeah, I think as Jason said, it really sometimes has to be made just at the top where
a strategic investment is decided that, you know, we're going to move in a new direction,
kind of no matter the cost. Very difficult to do bottom up, I think.
Yep. Yeah, that's right. So Chris asks, OS X, Windows or Linux? If Linux, what distro? What do you use day to day? What languages?
So I could go first.
I use a bit of everything.
At work, I have a MacBook, but I also
have a ThinkPad that's running Fedora.
It's running Fedora.
And in the cloud at work, we're running CentOS. It's actually my first time using Fedora. It's running Fedora. And in the cloud at work, we're running CentOS. It's actually my
first time using Fedora. At home, I run Ubuntu. So there's a bit of everything going on.
I do have a Windows machine or a machine, I should say, a machine that can boot into Windows.
That's only for playing video games. But actually, Windows has gotten really nice.
So, you know, if I had to start from scratch,
I think Windows is an attractive alternative.
But just for historical reasons,
I basically have a Windows box for games.
At home, I have everything Linux.
And for work, I have a MacBook and Fed in fedora yeah i guess mine is similar uh i
don't use so much linux currently i have in the past um i dislike linux on laptops for the most
part uh whatever i think it's better now but it's still not ideal yeah and and uh same thing for i
just i haven't i found despite the surcharge on, that the MacBooks are just so nice that even though they're expensive,
that until recently there's not been great alternatives.
And so laptop is OS X, desktop is Windows, sort of at home.
Yeah, I totally agree about the laptop, by the way.
Ironically, I have a ThinkPad.
It has pad in the name, and the trackpad is so bad
like it's it's plastic instead of i think the mac is either metal or glass or something like that
and uh the trackpad on the on the thinkpad is just terrible um so so yeah i agree i think the
hardware is just significantly better on the macbook but at home i've mostly given up the
laptop thing like i don't think I'll replace
old laptops ever again. I don't know. Mostly we go on to tablets and phones and then we have a
desktop that's Windows for when I want to play games or we need to do sort of photo editing or,
you know, whatever kind of thing. What do you do for like, like, let's say you need to write a
document in, let's say something like Microsoft Word,
and then you need to print it.
How do you do that on your tablet?
Oh, I mean, I go on the desktop and use Google Docs and use my printer.
Okay, got it.
Do you have a way to print from the tablet?
Yeah, so we do have a way.
Right now, it goes through via the computer,
but that's because we have a really old printer.
I think modern printers have normally apps on them
where you can print directly from,
like you sort of save it to a PDF and then you print the PDF via an app.
Or I think Apple has AirPrint or something that are hooked into some printers.
Yeah, it's really not a limitation.
But I mean, that is why we have the desktop.
We almost always, if we need to do something like that, just get on the desktop.
Oh, there's actually a second set of questions.
What's your favorite development platform, laptop versus desktop, smartphone?
So, yeah, I think it sounds like we both have laptops at work.
And then there's obviously most of the things are done kind of in the cloud.
Yeah, it's a good question for development platform.
No, development platform for – oops, sorry.
I was going to say at work we use Atom.
At home I've been using more and more Visual Studio Code.
What about you?
So for me, I do have a laptop at work, but I don't develop on it unless I have to.
I always use desktop.
Faster compilation, you know, everything for the stuff I'm doing today.
Like in the cloud or a physical desktop?
No, locally, because of stuff I'm doing now.
I'm doing more app development.
Oh, I see. Got it.
Yeah, yeah.
That varies depending on what you're working on.
But that currently,
I very much like the large screen,
plugged in, fast computer.
I don't like dealing with hooking in the laptop.
A lot of people do though.
And I use IDEs.
I don't, you know, try to use Eclipse
or lately I've tried some of the JetBrains stuff.
This is like Sea Lion and IntelliJ.
Yeah, I've been digging those pretty good.
I'm just a big IDE guy.
I don't know, whatever.
I guess I'm not hardcore.
Well, yeah, I actually switch.
I used to be a big Emacs person and now I've switched to IDE.
I mean, the big thing that let me switch is the remote development. So most IDEs now have something where you run a server
on the machine that's actually gonna execute this code.
So basically the way my workflow is,
is I get to work, I plug my laptop into a screen,
and I'm just remote desktop the whole time.
It's like, I'm not actually compiling code
on my laptop or anything.
And there's a plugin for Atom where it looks like
you're editing files locally, but none of those files actually exist on your machine. They're all
on, you know, your machine in the cloud. And so you have this total IDE. It's even doing like
IntelliSense and all these things, but it's doing a bunch of back and forth between your IDE and
some service running on the other machine.
So now we're switching over to some questions that came in from Discord. So this first one from
BSD Tech, I'm going to give to you, Jason. The question is, how do you deal with types changing
in Python? How do you deal with types changing in Python? So if you want to change the type
and you need to go refactor your code
because the thing is a new variable is a new type and c yeah this is straightforward you just
keep fixing stuff until the compiler stops telling you you did it wrong yeah this is a really really
good question so um uh i never do untyped python i think that's that's uh very difficult i mean
you know for a script that you're doing,
you know, for something simple, it's fine. But for anything at work, we have a pretty strict
policy on types. So for people who don't know, if you're using Python 3,
there's actually typing built in. So I think it's called type hints which means that you know they're optional so you could say
you know x equals three and nothing's going to crash or anything like that but you can also do
you know x colon int equals three and then later on in your code if you do you know x equals dog
it'll throw an error and so what the way Python actually does it is there's no compiler so you have to run a separate program, I think it's called mypy, which
does the type checking. And so mypy will just analyze your code and just
tell you, hey, you know, this variable you said it was an int but then you
set it equal to dog and it won't pass, right? Think of it as like a unit test.
And so, yeah, everything we do at work is using the Python 3 type system.
And so, you know, yeah, if somebody has a function and the function takes an int and they decide that the first argument should be a string,
anyone who calls that function will, you know, the type checking unit test will start failing.
And so it's basically like writing strongly typed code at that point.
It does give you a little bit more flexibility.
So like there might be some very simple things like, you know,
X equals the result of some function and then return X or something like that.
You know, we're not super strict on putting a type every single
place. But it but all of the function parameters, you know, we type and things like that, all the
return values of functions are typed. And so that gets us around, you know, 99% of the issue. So
very, very rarely, we'll have some issue or someone changed a type and it made it all the way into the runtime before
we found out i only work in typed languages yeah that part's much easier so mcgee asked
i'm taking a class this semester called operating systems in this class we'll be creating a basic os
and c and apparently some assembly what are some things to keep in mind when writing something like this,
Patrick?
Okay.
Yeah.
I mean,
so if you're a class,
they should give you a lot of structure around this,
but I mean,
I think the thing to keep in mind,
if you're kind of starting from scratch is that you will write,
you might do stuff that you might not do in a software engineering approach because you might have to sacrifice readability, legibility for that optimization that you need in order to get some system done without holding to a stringent, you know, ideal about what clean
code should look like. Because low level operating system stuff is probably not the best place for it.
But that's my opinion. People will probably argue with me about that. And I'm not a Linux kernel
developer by any means where you'll have a lot of strong opinions about how stuff should be done. But I for for me, I don't use much of the
specific skills I learned in sort of operating systems class and doing low level stuff. But
understanding how the computer works definitely gets used by me day to day to help with debugging,
understanding what the stack overflow means, understanding if I get an out-of-memory exception,
like what would likely lead to that.
Just knowing how all those things work under the hood
is the really big takeaway that I've had from those kind of classes
is the concepts and understanding what an operating system is
and what it does for you.
Yeah, that makes sense.
I took system software, which I think was the prereq for os i
never actually i don't think i actually took os i'm trying to remember if it was mandatory or not
i don't think it was but uh yeah the big thing was uh i learned how to you know debug really
low-level things which i'd never done before like it's like uh like seg fault like what does that
even mean yeah that's a good point yeah yeah i think uh um yeah i guess the
best advice i guess if i had to give a piece of advice is to give yourself lots of time because
the errors are really esoteric it's if you're used to doing something like really high level
like basic or python or something like that you're used to seeing like like oh i divided by zero and
it'll actually tell you that you know and see you know
it won't necessarily tell you you have an error right away it'll just cause some like undesirable
behavior and so uh yeah that's not something you should be writing like the last minute
fair enough uh veller asks will we ever revisit topics on the show oh that's a good question
i guess inevitably right i think so i mean there's definitely things that have changed Will we ever revisit topics on the show? Oh, that's a good question.
I guess inevitably, right?
I think so.
I mean, there's definitely things that have changed pretty drastically.
You know, some people were asking us to cover, you know, TensorFlow, PyTorch, these things.
You know, and we did cover, you know, I think we covered in general Blas type libraries,
but they've changed so much, right? So yeah, I think it covered in general Blas-type libraries, but they've changed so much, right?
So yeah, I think it will happen,
but I don't think we're going to at any point say,
wipe the slate clean and start with C++.
That probably won't happen.
But yeah, I think we'll kind of,
especially if these things are very dynamic,
we'll revisit them.
Yeah, I mean, I think in general, the format of our show has changed
a decent amount over the years.
And so i think
revisiting some of those things will make sense specifically in more fine points right like like
jason was just talking about writing using writing python using types uh type hints and i think
something like that you know we could get into a discussion about some specific thing that
sort of wasn't around when you know we first talked about python but i think covering python as a whole yeah i don't know
maybe yeah i don't know either it's a really good question i mean it's a um it's a pretty abstract
answer i guess so it really just depends on the circumstance i guess in the future we will know
yeah so appetite appetite appetite nine i guess appetite nine asks, what do you listen to while you work?
That's a good question.
I actually used this thing called Nativeifier.
It's a Node.js binary.
So it's basically a program.
And it will take any website and kind of wrap it up into
an app and so it kind of looks like an app feels like an app you can alt tab etc etc but it's
really a website and so i did that with the twitch.tv slash monster cat it's just this it's
just this uh twitch channel that plays basically techno music 24 7 and uh sometimes i'll i'll fire that up um i i have a tendency to uh
just not really listen to too much of anything when i'm at work um sometimes i'll listen to
um people who talk about philosophy so uh you know because i feel like it's the kind of thing
where it's it's pretty generic um it's kind of nice to just listen to while you're doing something.
So I'll listen to like Stefan Molyneux and like other sort of just philosophers that just did like they do a whole thing on on Aristotle.
So it's like two hours on Aristotle.
And I might, you know, consciously absorb maybe 15 minutes of it.
But it's really just kind of something to have going on.
Same with the techno music.
Like it's really just something to kind of have a rhythm going on. Um, but, uh, yeah, that's, that's me. What about you, Patrick? Do you listen to music or, um, yeah, I, that's
a mix of stuff. Sometimes I'll put on some YouTube show in the background or like, I guess you were
saying like a live stream or something. Uh, sometimes I just have my headphones on and
nothing playing to dampen the, I mean, I don't have like noise canceling headphones but you know just in
general they close off the sound a little and it's a signal to people that like i'm thinking
so which we'll have to talk about i guess in more depth at some other time um but yeah same thing i
guess i listen to various electronic music i don't know why it's like when i'm not at work i don't really
listen to that music uh i don't listen to music that much but at work i do i don't i guess it's
a stereotype i don't know recently i've been like for some reason i found some good glitch music
which is i'm terrible with music but it's like i guess somewhere between techno and dubstep
okay yeah anyways i just found like this playlist i checked
it out one time and it had some cool music i liked in there um so just various playlists on things
like spotify or google play music or pandora i'll just sort of scroll through whatever hot
playlist they have and and sort of play mostly something electronic in nature yeah one time i uh
was really into trap music which is like techno plus rap
oh actually the name now makes sense i never really thought about it i didn't until you just
said that yeah that i didn't either and i've been listening but but anyway so so uh so i've been
listening i was listening to this techno rap uh uh is like four hours of techno rap. I was like, okay. And so then I ended up going to a meeting
and then going straight home afterwards.
This was a Friday night.
I get to the office Monday morning
and YouTube had been running for the entire weekend.
And because I have YouTube Red,
it didn't do commercials.
It didn't stop.
It literally ran the whole weekend.
And I don't know how it went from techno rap to just a live stream of a zoo. But at some point,
the related video went to a live stream of a zoo. And you know, that thing doesn't end.
And so I watched a live stream of a zoo, not actually watched but for for about a day and a
half and then youtube will just incessantly show you yes for 90 days exactly 90 days i got
recommendations to watch zoo animals like my entire youtube page was just dominated by that
and literally on the 91st day because i didn't click on any of them on the 91st day it switched back
can you like not like say i don't like this video did you ever i tried yeah i did it like
two or three times and they're like oh well we'll show you this other koala bear
yeah you don't like koala bears how about polar bears
oh oh man life pro tip Don't leave YouTube running.
Yeah, it's true.
Peter says, what are the best work from home positions?
Sometimes it's hard to work remote, but are there any positions that are a good fit?
Does it depend more on the company, culture, coworkers?
I'll take a stab at this.
Sure.
The answer is it depends.
All right, done.
We'll stop.
Yeah, I don't know.
I've never actually, have you ever,
I mean, we've never worked remote,
but have you ever done, let's say, a remote project?
No.
Where everyone else was somewhere else?
So for the most part, I haven't.
And I think this largely depends on where you work and the company.
So we both work in California in the Bay Area,
so near sort of San francisco and it's
not super popular here um it's beginning to get more notice but in actuality some places are kind
of moving against it and trying to bring more people into less locations uh forget sort of even
like work from home or work remote um for support roles, I see a lot of people
covering different time zones. And that makes a lot of sense to me. But in other roles, I don't
typically see it. And there are a lot of problems with it. I would love to see it work well. But
I've never seen something where in the kind of work I do, which is highly collaborative,
sort of a lot of speculative work, a lot of day-to-day
change. It's not so much like here we have a product and we're just trying to sort of burn
down bugs that have been filed against the product. Remote work is kind of hard to do.
But I guess in that way, I could see that some work would be more well-suited to it, right?
Yeah, I know somebody who was,
they were doing a startup and each person was basically
in a different part of the globe.
And it ended up actually working out pretty well
because the startup was very focused.
So basically they were trying to do speech to text.
And so what they would do is they would do a pitch.
So all of them would have to fly to this customer pitch them on their product if the customer bought it the customer
would give them just a ton of voice recordings then they would pay contractors to you know
manually transcribe them and then they would write know, computer programs to try to match that.
And so there was, let's say, you know, a person in North Carolina who was doing, you know,
just trying to get the utterances right. And he had sort of a ground truth of what the right utterances were. So just he was just getting the accuracy higher and higher. But there's really,
there wasn't a lot of collaboration. I mean, if one part of the system got much better or changed,
you know, I guess they'd have to tell everyone downstream. But in the grand scheme of things,
it's not, it's very low on the scale of collaboration. And that seemed to work pretty
well for everybody. But yeah, I think to what Patrick was saying, you know, most jobs aren't
like that, like in most jobs, you need to collaborate. And so being remote is pretty
difficult. But that being said,
people talk about it more now than they used to.
And I think there's increasing desire
for people to begin to have this as an option.
But I also think like just being brutally honest,
some people do better remote work than other people.
Like it's a different skill being able to sit.
I guess it depends on what you mean by remote. If it's like work from your house by yourself. Some people are very well suited to that. Others are not very well suited to that. They get distracted. They don't work as hard. And it just depends. It's a person by person thing. And then your company's reception to it is different. But I'm also I know I tended to work at pretty large companies. And I find that being in the office, having FaceTime with the bosses, like meeting people, that kind of stuff helps me do well in my career more than straight up just like being an amazing programmer is also important to do. But, you know, having that
FaceTime and having people know who you are and keeping communications open and, you know, making
sure I understand what's needed and then doing those things that are needed is important. And I
feel for me, some of that would have been lost if I had not been in the central office where
most of those people were. Yep. makes sense i agree 100 yeah if you can
avoid remote work i mean i guess not not if you can avoid it but like definitely take into
consideration the fact that the facetime is really really really important so but i i mean but i
could see how a combination of video chatting and regular visits and like i i could see how you
could make it work yeah I just don't have any
great firsthand experience with it. So I can't say too much. Yep. Same here. Riley C52 asks,
what are some of the best places to discover new open source projects and contribute to them?
Yeah, we get this question a lot, right? I think it's a really good question. This one's actually phrased a little bit
in a very interesting way because it's about sort of discovery. You know, in general,
my general philosophy is that you should start with sort of a problem that you want to solve
and then try to find the open source solution and then improve it rather than, you know,
join something that's doing something that,
you know, it's like join some astrophysics open source library, even though you don't care about
astrophysics. That's probably not, you know, like a good bet there, even if the code's really good
and the people are good. Like you want to start with a problem that you want to solve. You know,
you can, one thing I typically do, and I'm looking
for open source projects is I just go into Google and I type some keywords and then use the site
colon github.com so that I only see results from GitHub. That's, that's one way to do it.
But yeah, in general, it's like really just start with a problem and then, you know, start your
search there and you'll, you'll find something you're more passionate about.
So Grant asks two questions.
I'll take the second one and then I'll leave the first one to you to go second.
And so Grant's first question is about immutable versus mutable objects.
And this is a discussion I've heard go around a lot recently with the whatever current interest in functional
programming is often the the case yeah and I think that there are good points to making as much of
your system immutable as is reasonable and I think it's one of those gut feeling things as to what is
reasonable I think taking and saying I don't care where some bit of
something is in the system i'm gonna allow all pieces of the system to mutate it yeah that that
obviously is bad you end up with things like you hear this global variables global state state
balls these things where it's just like oh hey there's this bit of where we keep all of the
interesting things in the system and all the pieces of code can call into it and write to it
and it just sort of gets touched by all over the place.
That ends up really hard to debug, very confusing, not great.
On the other hand, saying nothing in the system can really be mutable,
everything's immutable, which is what happens in some extent
in functional programming,
although they have concepts for how to deal with mutability, that can also run into some difficult
situations where things become a little less straightforward. So in general, what I would
try to say is, you know, limit mutability to as small a set of components as you can and when there's disparate components that
need to you know potentially mutate shared things is like define a good interface around them and
not so much say that the whole system should be immutable or now just whatever who cares does
everything be mutability is by default say like is it reasonable to have this component be immutable?
And if so, make it that. And then use the mutability where it makes sense.
Yeah, I find like these questions often get answered when you go to write tests. So if you
go to write some kind of unit test that only tests one piece of the functionality, then,
and you have like, let's say, as Patrick said,
some huge global object, right?
Then one of two things will have to happen.
You're going to have to put that huge global object
into the right state for that unit test to pass,
which is usually really hard.
Or you're going to have to kind of break that down.
And so usually when you come to write unit tests
and get good code coverage and things like that,
that's where a lot of these problems become revealed, right?
That's a great point.
Yeah, I mean, I've started like, I think it's like proto3 is immutable.
So in proto2, you could just, if you had a protobuf object called foo and it had an int x,
you could just say foo.x equals 2 int x you could just say foo.x
equals two and the next line could be foo.x equals four uh with proto3 at least in python
um they made it immutable and so uh you actually have to create a new proto object where x is
three and then create another second object where x is two and it copies does a deep copy right
um and so you know my my style has changed just
because of that but yeah i think again like the the testing really will give you the answer
so you know if you if you go to write a test for something and your test is like you know call main
did it return zero then you say okay well yeah you know i tested you know the entire program in
one test now i need to break that down.
It's like, oh, I can't test this function because it requires just so much state and so much overhead that I can't even start this function unless I'm running my program.
And then you'll eventually get to fixing all those issues and mutability will happen along the way. So Grant also asks, new AI libraries like
TensorFlow, Keras, PyTorch, MXNet. Yeah, I mean, there's definitely, you know, I could see people
getting sort of analysis paralysis here. In general, they're all really good. I mean,
I think it's, you know think MXNet has some advantages.
I think that's from Amazon or Microsoft.
But there's one from Amazon that runs really well on AWS.
There's a Microsoft one that runs, you know,
it's very compatible with Azure, so on and so forth.
You know, Keras is trying to be a layer on top of all of those.
I don't really see Keras going very far
because the owner,
the kind of core maintainer of Kairos,
I think he went to Google
and works on TensorFlow now.
Yeah.
So, you know, again,
this is one of these things that like,
it's sort of like if you go to a music store
and, you know,
they have a whole bunch of different kinds of guitars.
I'm not a music person at all, right?
But I know that they have tons of different kinds of guitars. You know, they have a whole bunch of different kinds of guitars. I'm not a music person at all, right? But I know that they have tons of different kinds of guitars.
You know, they have some guitars are $20,000 and stuff like that, right?
But, you know, if you just pick up a guitar and start playing,
you're going to get a lot further along than someone who spends a year trying to find the best guitar, right?
And so all these libraries are very solid.
They're all backed by really large corporations
they all have sort of pros and cons but they're the pros and cons are pretty esoteric right
so um uh so yeah i guess my advice would be you know just grab one and just start running with it
um you know i personally uh like pytorch um but i haven't used MXNet, so I can't say anything about that.
I do think that Theano and, to a lesser degree, TensorFlow 1.0 are getting pretty obsolete,
so people have just learned lessons from them.
TensorFlow 2.0, I think, is coming out soon.
That should be really nice.
The latest one is always going to learn lessons from the ones before it, right?
But yeah, I wouldn't spend too much time worrying about which one.
Just pick one and start building some crazy robot.
Well, that was a pretty good collection of mailbag questions.
Yeah, that covered a really wide spectrum, right?
So, well, it's been a good episode.
Yeah, thank you folks for listening to the live show on discord um one of these days we're going to try and get it set up where people
can actually literally ask questions and they would be on the air i'm going to have to look
into that i know there are other i follow actually other youtube um like podcasters and youtubers who
do that so i know it's possible but we haven't got it set up
yet we're not sophisticated enough yeah that's right um so thanks again for supporting us on
patreon um have fun with the with the coasters we had a lot of fun kind of shipping them out
it was definitely interesting experience and uh yeah send us a tweet if you haven't already
uh post a tweet at programming throwdown you know at mention us and uh send us a tweet if you haven't already. Post a tweet at Programming Throwdown,
at mention us,
and send us a picture of your souvenir.
We'll catch you guys next month.
Stop.
The intro music is Axo by Binar Pilot.
Programming Throwdown is distributed under a Creative Commons Attribution Sharealike 2.0 license.
You're free to share, copy, distribute, transmit the work, to remix, adapt the work,
but you must provide attribution to Patrick and I and sharealike in kind.