Programming Throwdown - Fortran
Episode Date: May 7, 2015This show covers Fortran: An old (but still very useful!) imperative language for numerical calculations. Books of the Show Jason: A Theory of Fun in Game Design http://amzn.to/1FShtR6 Patric...k: Monster Hunter International http://amzn.to/1EeqWO2 ★ Support this podcast on Patreon ★
Transcript
Discussion (0)
Hosting provided by Host Tornado.
They offer website hosting packages,
dedicated servers, and VPS solutions.
HostT.net.
Programming Throwdown, Episode 42, Fortran.
Take it away, Jason.
Hey, everyone.
So we got some interesting listener feedback uh we got a lot
of interesting listener feedback uh one of them listener feedback is interesting that's true just
put it out there we got we love you guys feedback of which all was interesting and uh one in
particular was a strong verse weak typing so somebody corrected me and said that uh python javascript are strongly
typed languages and i remember like kind of having this debate with somebody at the time but it
didn't really get we didn't have smartphones and so it didn't get resolved um so i went and looked
into this and it's actually really interesting this one's like as as engineers and scientists like our field is kind of very sort of pedantic and deterministic and sort of explained very well
that's kind of part of our nature um but this is one of those things that's completely up to
interpretation so so are you saying you're wrong or not because i don't have to print another attraction so actually nobody's right so this is so there's a kind of right i know there's a gradient on one
side of the gradient is the most weakly typed languages like um like ruby or r or you know
like languages like that where there's no type system and there's no type errors so for
example like in r you can do like patrick plus one and i think in r it type casts to spring
to string so if you do like patrick plus one you'll get patrick one um and so that is like
and also r doesn't have any you know any type safety or type checking or you know types
You know as you're programming or anything like that so R is considered like very weakly typed right and it supports bare words
things like that
You can make Ruby similar like you can make some changes to Ruby, and Ruby will support bare words.
Bare words just means that you can say, like, Jason, go to the mall,
and it will just interpret that as a string.
It's kind of weird.
At some point, your code can be a string, and it's kind of goofy.
Anyways, so that's very weakly typed.
So then strongly typed is, say,ava where you know everything is a type the type is defined um you know explicitly and at compile time you know by you and you have to
adhere to that type you can't say you know person a equals like new restaurant or something you know like except for some
extenuating circumstances um yeah you think about that talk to except for some extenuating
circumstances you uh um yeah you can't do that it won't let you right so those are the two ends of
the spectrum right so wait you put java on the other end that's what you said yeah i would have gone
with like haskell or something or like the type type is actually used to great strength but okay
it's okay go ahead that's fair i guess uh like something with a more uh in your face type system
yeah yeah i mean the type so haskell definitely makes better use of the type system but i don't
know if it's stricter or not
okay I don't know the exact
axis this is being drawn on
it's probably the same level as Java
so Java is very strict
like you can think of C++ as being
kind of in the middle somewhere
because it can be as strict
as Java but you can also just cast anything
to void
I guess in Java you could have everything as an object.
It's like all of your classes
just had objects.
And then it would kind of...
So one part of this is
it really doesn't depend too much on the language,
but how the language is most often used.
Because you can
make Java more weakly typed
if you wanted to,
but nobody actually programs that way.
So the other part of this is,
I sort of always said it's weakly typed
if there weren't any types known at compile time.
So in other words, like Python,
you could say x equals three,
then the very next line could say x equals Patrick,
and that's fine.
Like x can be whatever you want it to be.
And so because of that, I would say Python, JavaScript,
these languages are weakly typed.
But these languages are more strongly typed than, say, R, right?
Because in Python, you can't say Patrick plus 1.
You get a type error.
So it really just depends on sort of where you draw the line in
the sand like there's this gradient and if you draw the line at you know uh be able to support
bare words and automatically type casting everything so that there's no errors then
you're going to look at everything else is strongly typed and so we drew our line where we drew it um but even like professors things like that there's no no one has gone out and said okay
here's here's here's what it is and so it's totally up to interpretation that was a weakly
typed argument all right well anyway while jason was uh trying to assuage his problem of feeling like he got it wrong,
I'm just happy it wasn't me who got it wrong.
Please, no one write in and tell me the things I got wrong.
I know it's everything.
So I posted a link here, and you can just search W-A-T-W-A-T.
Programming talk is what I searched to find it.
And there's a lecture someone gave
or a presentation at a conference
where they go through various languages.
And I think this made the rounds several times
through the internet, so you've probably already seen it.
Yeah, this is so good.
But this is a couple years old,
where the guy is giving kind of a slick,
prepared presentation about various languages
and kind of using and abusing them.
And he talks about bare words in there,
like getting JavaScript to give you the batman theme song by causing things to be not a number when
they don't seem like they should return not a number yeah um anyway so i guess javascript
doesn't have bare words i guess bare words is in ruby that's right yeah and even then you have to do something special to you know enable that that bug
oh oh i see oh maybe that wait you mean that internet talk i watched wasn't completely
up front well actually they are if you see like the part where he's like you can do this and the
supports bare words he actually like hacks together some function which like does some ridiculousness yeah okay well i've always felt like if if if a
language is weakly typed like python or javascript then it's um it's only good for kind of like so
there's a bunch of different you should say weaker typed yeah it's true weaker type so i my my my like litmus test is this if the if the program is meant to run for
an hour or longer then you use a strongly typed language other people have said things like oh
if it has more than 100 lines of code you know don't use python and so there's just various
different metrics but at a high level like the weaker the typing is,
the better you have to check, you know, either if it's weakly typed, either your program needs
to run fast, in which case, you know, if the program takes a second to run,
then it really doesn't matter whether you get a compiler error or runtime error, right?
Or you have to do a very good job checking all of the code paths so if it's if
it's intended the program's intended to run for like days and days then hopefully like there isn't
some syntax error or some just goofy type error you know in some if statement that only runs once
a day yes that is something that annoys me about python i had written a tool that had worked
flawlessly my team was using it no complaints and it turned out there was this bug where if you
uh it was properly looking for the error to occur it was reading um data in and if it saw like a
improperly formatted something it was supposed to print out like what why it was improperly
formatted except that the thing i was printing
out was of a different type than i expected it like think uh i was i was assuming it would be
a list and instead it was just uh or an array and instead it was just a string so i was trying to
you know kind of undo the wrapping of the list to print it cleanly and no one hit this bug for
you know however long then finally like we had some bad data come across and
you know it crashed python instead of giving the nice printout of like hey i saw you did
something wrong and i'm gonna close gracefully it just you know uh stack unwound oh really you
didn't get just like a python error you got a python error but like the whole oh okay here
trace back the trace back for Python.
Right.
That had been there for who knows how long.
Yep.
And a compiler, I guess, you know, in theory, if they were stronger typed than it is, I
would have been able to detect that the thing I was passing around wasn't of the type it
once had been and that I had since changed.
Yep.
Yeah, exactly.
Yeah.
I have a bunch of javascript
code i have that title wave you know the company wiki is on that and i have the um i actually wrote
a meme gen meme generator so i work we just make like funny jokes and send them to each other
and i'm thinking wow you really want to get fired i know i'm actually thinking about uh
like so there's this language called TypeScript.
We've talked about TypeScript before.
But the cool thing about TypeScript is you can just start with JavaScript and then slowly add type annotations.
And then eventually, like, everything is statically typed.
And if you don't have a type, TypeScript will kind of, like, complain but not too loudly.
So you can sort of migrate slowly.
And I want to do that because
this is what you talked about. Occasionally, someone crashes
the wiki for the whole company and it's because
it's some area of the code that I hadn't really
tested well or just some goof that would have been
caught with type safety.
It's not strong or weak typed. It's or weaker typed yeah that's right yeah yeah before
you say something is strongly typed you have to put your reference point so what would be the
most strongly typed would be like if you only allowed one type um like a whole program like
that one where it's all uh it's all music or something. There's only one operation, right? What is that called?
It's like the computer built only out of NOR gates.
Oh, yeah.
Anyways, it doesn't matter.
But I don't know if having just one type makes the...
I mean, I guess a language that had no polymorphism
would be more strongly typed
because you couldn't really do anything goofy.
Like Java has
object, but
nobody actually uses it
unless it's very specific
circumstances.
So I would say
Java is very strongly typed.
I'm guessing if you had only one integral type,
like only unsigned 32-bit integers.
You're talking about like Fortran,
like the early version of Fortran.
So, yeah.
Shh, shh.
Foreshadowing, foreshadowing.
That's called Jason not picking up on that.
Spoiler alert.
Oh, my God.
That's funny.
To the news.
Oh, god. That's funny. To the news! Oh man.
Okay, so
first news article is this pretty cool thing.
It's called Disc.
So there's
Redis, and Redis is pretty cool.
So actually, let's step back even further. There's Memcached.
Memcached was written
by the
I guess
CEO or head engineer of LiveJournal,
which was a social network that was popular 15 years ago.
And what Memcache does is just simple key value lookup.
And if you have keys that are accessed very frequently,
Memcache does exactly what it says.
It caches them in memory and then doesn't have to go
to disk and if you have some key value pairs that are not used very frequently then in memcached
falls through and then you would then go to your database or what have you and so the idea is you
know your logo your company logo which everyone sees every time they load a page,
is accessed very frequently.
So Memcached would just, for free in a sense,
take things like your company logo and cache them in RAM.
So you wouldn't have, it reduces your database overhead.
So Redis is basically Memcached plus one. So it's just the interface
is much easier. It's much cleaner. It can do like some cool persistence. So if your machine dies,
it can store the disk. So when the machine comes back up, it doesn't have to like rebuild the cache
on the fly. It has a bunch of cool things like that and it's just much more modern.
So now if you look at the message queue space, this is where you have different machines they
want to pass messages to each other. You know the same kind of thing where there's RabbitMQ,
there's Kafka, there's Camel, there's a bunch of these,
but all of them are kind of old and antiquated
or they're slow.
So finally someone kind of went through and built Disk,
which is a completely in-memory message passing subsystem.
It looks pretty cool.
I'm gonna definitely look into it.
And so I can tell you
guys more in the future after i've done some study on it but um it looks like it looks like it'd be
pretty useful i mean a lot of people right now use redis for message passing but it's not really
designed for that so they're kind of you have to do like a lot of trickery to make it work
well message passing is needs a lot of tuning like all the different options like messages being re-deliverable if
the host the recipient dies or that kind of configurability but this one has a giant
warning that it's still alpha state and don't use in production right yeah uh so i never know
when stuff says that if it really means it because a lot of software says that and it is like everyone uses like everyone uses the alpha version of the next release because it's so
much better and it's been out for a year versus like oh no literally i wrote this last weekend
and it's probably awful don't try it yeah that's the thing like you know obviously you're fixing
bugs as you get them and so like as time goes forward you've you know like in version two
you have more bugs fixed than version one that is a guarantee because the number of bugs fixed
is just monotonically increasing right or at least month is not decreasing um but as you said
like you know the alpha version has a whole bunch of new features and presumably adds new bugs and so it's just so the number of
bugs might be higher but yeah i think like what you said you kind of have to read the documentation
and just try and read between the lines and figure out if the person really means like this is alpha
because i hacked it together at tech crunch disrupt andrupt. And I was drunk at the time.
Or this is alpha because I haven't formally proven
all of the lines of code yet.
Or what happens more is this is a breaking change
and I just don't want to deal with the community at this time.
So I want to just keep hacking away and do it all at once
and rip the bandaid off, which is what happens to a lot of projects.
When I push this out, a lot of people are going to be mad.
So I want to make sure I really know what will change and then i'll push it out yeah that's what
happened with spark like for a long time spark was just kind of very unstable and then at one
point at some point they said okay like let's just kind of you know refactor the whole thing
and make it nice and clean so uh recently amazon's quarterly earning report came out and
our obligation to give you news not related to programming uh their stock jumped through the
roof um one of the main reasons other than people just saying the stock went up because the stock
went up um trying to pin it on some, because stock movements always have to have a reason,
was that the Amazon, for the first time, reported their revenue from their web services.
So Amazon Cloud, AWS, Amazon Web Services, I guess, AWS, they are selling servers, renting
servers to other people to be able to run on.
And, you know, it's become really popular.
Everyone probably has heard about it.
But before, it had always been kind of just under other parts of the business.
But this quarter, they finally broke it out.
And they had a revenue of $1.57 billion, which is a lot.
But in true Amazon fashion, they managed to take a lot of dollars
and profit much less dollars 265 million so 265 million is still a lot of money um but 1.57
billion is a really a lot of money like amazon this is the thing i don't understand about amazon
they're known for like really good sort of supply chain management and having very low operating costs
yet they're also known for blowing through most of their revenue i don't understand how that's
possible um i don't know this yeah i mean this is like what they're known for but part of it is
uh i think they have a strong belief in growing and not sitting still so they could sit still
and make a lot more money but they want to keep hiring engineering talent,
investing in warehouses, pushing delivery times down.
I was thinking about that the other day.
I have Prime, and I had to start paying taxes.
And now I eventually, because of that,
they took a lot of flack, a lot of people left it.
But now I actually get a lot of packages on one day or on Sunday
because they've put warehouses in my state california um because they lost the tax shelter
thing or that's not what it's called yeah that's right um so like i think they are willing to
aggressively pursue things which are expensive um for kind of securing future total income growth
even if it means that their profits will be down for a while,
but they feel like this is how they can't,
they don't just become another cheap place to buy stuff, right?
It's why they didn't get beat out by eBay or by someone else,
because you still go to Amazon,
they still supply millions of products,
deliver them in a day or two.
People really like that, but it's expensive to keep people.
People would leave for any reason.
So you can't give them even one.
Yeah.
Amazon also does a bunch of really cool stuff.
They had this thing where they took sort of like the head of their distribution,
like the most commonly sold items.
And then they took their population and they tried to estimate like the likelihood given you know a city of a million
people what is the likelihood that one of them will buy like one of these popular items and once
that's high enough they just ship it so it's so in other words like like hdmi cables like they're
already sitting in the distribution center closest to your house because yeah the likelihood of one person in
California wanting an HDMI cable like in Central California wanting HDMI cable is so high
That they can just always keep a supply there and then literally just have to drive it like 10 miles to that person
You can think about the same thing as like
Walmart knowing that the first cold blizzard headed to a town
a bunch of people are going to go buy heaters yeah right yep it's like that but uh but much faster
but anyways their aws i mean they've continued to push and be a market leader and they are the
biggest uh cloud services provider by a pretty good margin and this chart is super interesting like they
actually even though they're the biggest they're only 28 the other was crazy i don't know uh what
jason's looking at a pie chart that's showing the breakdown of uh percentage of cloud revenue
or cloud businesses um and there's a huge chunk which is just kind of like everybody else but
it's a big chunk so i don't know exactly how this is from the New York Times how they're classifying
well yeah constitutes a cloud service yes I mean they do it in order then what
that means is 43% of the market is consumed by by companies who have less
than 3% each. That means
at least 12 companies
that are all sharing 2% or 3%.
On here,
Dropbox isn't on here.
But given
these other names like Salesforce, I would imagine
Dropbox is probably on here somewhere.
Dropbox runs on Amazon, right?
Does it?
If you had something like but like if you had something
like that right like if you had drop box or netflix right they would be big contributors
they happen to run on amazon i think you're right but yeah that's super interesting man
unbelievable i had no idea that i always thought actually i thought amazon
was much larger like i was expecting amazon to be like 50 percent and then they're not to be much
up yeah but look how much money that would be if they were 50 percent that would be like over
three billion dollars yeah a quarter wow a quarter wow unbelievable and it's very consistent money
too it's not like you know you have to wait for the holiday season or something.
Cool.
That was awesome. Yeah, so my next article is JQ, which is a command line JSON parser.
So a lot of people, definitely if you're doing any web stuff, but even if you're not, you're probably using JSON for something. It's like XML, but it's much more terse.
And you don't have to get matching the opening and closing tags, which is always a nightmare.
And so definitely, if you want to store some data, JSON is a good way to go.
This is a pretty cool command line parser.
So think of it as like a sed tool for JSON.
So you could say, hey, go in and
rip out this one
object, search for objects,
filter out objects, things like that.
Looks pretty cool.
I'm definitely going to give it a shot. I actually just
found out about it today.
But they have some
examples here.
And I
find myself often needing stuff like this to uh on like server
side like just to do some analysis like we use a lot of mongo db and in mongo db you know everything
is uh a bson but it's really a json stored in binary but from your perspective as a database
client mongo db is storing JSON documents.
And so if you want to dump it to disk and then take a look at it,
this is a pretty cool tool.
So yeah, check it out.
It's called JQ.
I may or may not have done something awful.
I wrote a command line tool
that took a JSON string
as a command line argument.
No, that's good. No, it's crazy yeah i mean i did it it was it worked
really well and i thought it was an elegant solution but when i told people like oh yeah
this tool they're like you know what parameters does a tool take i'm like it takes this this
and then it takes a json string and they're like what i was like well so it was like a templating
system so you have like a template file and you're trying to run something on it.
And the JSON string holds what to replace in the template, but you could name it many,
many different, like the individual variables, many things.
And it was kind of the fastest way to say, I want to provide a whole list of replacements
dynamically.
And it, you don't ever create the string by hand.
Like you typically run this tool from another tool.
Right. Right, right.
But yeah, I was kind of like,
people looked at me funny when I was like,
so yeah, one of the command line arguments
is a JSON string.
So this is the reverse of that.
The command line tool that parses the JSON string.
Yeah, I mean, I think that like,
if it's a simple thing where it's just,
you know, a list of objects,
or maybe just, I mean, a list of numbers, or it's just simple thing where it's just you know a list of objects or maybe just i mean a list of of
numbers or it's just like one object then like yeah i mean why would you do that parsing yourself
when you could just tell people that was it i could have written like arbitrary command line
parsing like right like name colon replacement name colon replacement like yeah blah blah blah
do that but it comes from already comes from a file that is... Anyways, there's reasons for it,
but I felt kind of like there's probably a better solution.
I just don't want to wait around.
Yeah, I mean, JSON, this is a great idea for that.
I mean, yeah, depending on the circumstances,
it might be better to read from a file that has the JSON in it.
There was reasons I couldn't do that.
Fair enough, fair enough.
Okay, you got the next one yep so
this one is a little bit old now but i thought it's really interesting so github came under
denial of service a couple weeks ago um and it was turned out that specifically a website hosting
uh circumvention for the firewall of china the great firewall of china whatever it's called
the chinese firewall that,
uh,
prevents people inside of China from getting censored news.
Um,
it was,
uh,
I guess like a proxy for it.
Uh,
and it was like getting pretty well known and the Chinese government now in
retrospect,
seems like it got mad about it.
And so they made an attack against,
um,
GitHub specifically this page.
Um, of course, you know, China has like many, many computers.
And it actually looked like this one was coming from not a single isolated place, but all the computers in China.
And further analysis showed that Baidu, which is the search engine, biggest search engine in China, was everybody who ran a search on Baidu.
So, you know, lots and lots of different computers.
They would inject an ad and part of that ad would be to go ping,
you know, retrieve data from this website
that they were trying to take down.
And so, and it would do it every two seconds.
So as long as you were on the search results page,
it would keep hitting the GitHub server
and they would do this across. What's the connection between baidu and oh baidu is the chinese web
web search thing right but what it was is a website hosted behind the firewall and no one
knows exactly how they're doing but i guess suspected was that they when the firewall
was serving the page it was automatically swapping the ad so baidu wasn't like necessarily in on it but the firewall
was able to switch the ads dynamically oh interesting so everyone who was going to baidu
was getting this ad injected replacement right um that was causing this and so github's response
which was pretty good was they in the string being pulled they added a javascript alert like please stop doing this or
something and so if your computer was repeatedly trying to do this it would get an alert and the
javascript processing would stop until you cleared the alert which meant that each person's computer
would only do it once until they clicked okay and it would annoy people like people would
immediately be like what what is this yeah so it is interesting that the chinese government lashed out at github because you don't think
of github as being like i don't know politically active but yeah they probably just didn't know
uh uh what it was like they didn't know that github was just open source anything they probably
thought it was specific to this thing well it may be that chinese government had asked github to take it down and github was like no and i mean it could
be any number of things i i don't know the story there but it was just interesting to read about
like how the attack went down finding it figuring it out it was kind of scary that like the chinese
government was attacking a corporate like a company right like not another
government it's unbelievable and then you know the u.s doesn't necessarily respond like hey
stop attacking github or we're going to attack you like but yeah it's just weird right you could uh
like i guess so just looking at it mathematically it seems like you can trivially
break through the Chinese firewall
just by using some kind of BitTorrent-based internet browser, right?
Well, I mean, I think there's lots of ways around it
for people who know or want to get around it.
But the problem is there's still intimidation.
If you circumvent this, we will come and find you.
But they can't, right?
I mean, you could make like pretty untraceable right
yeah but are you gonna bet your life on it actually you know the hard part is um is not
not getting the information um but then is is not using it like in other words if i if i use like
some kind of tor browser to read CNN,
now I know things that nobody else in China knows.
And so if I start telling my neighbors
about this cool CNN article,
now all of a sudden,
like that's how you're going to get caught, right?
It's like when you're,
eventually you're going to tell somebody
who's like sympathetic to China
and they're going to tell the police on you
and then you're gonna go to jail
like that's actually how you'll get caught yeah i've tried to talk to people about it and
i always get different uh responses from people who have spent time in china or lived in china
or born in china um but you know i think part of the chinese government is just is not trying to
keep a determined individual from not being able to see the information,
but to kind of just stop it from entering the zeitgeist of society.
Got it.
It's not become,
like the average person
just hearing a whisper of a word on the street
can't just go look it up and figure it out.
Like you'd have to be seeking it out,
going, determining that you're going to go find it.
I was working,
once I worked at this company
where they blocked a bunch of pages on the internet.
So Gmail was blocked and things like that.
There are more than one such companies, yes.
Yeah.
I wrote this fork of Google Chrome
called Google Crime, C-H-R-I-M-E dot E-X-E.
And it was just a fork of Chromium that would just basically bounce the data off my computer at home and let me
get on Gmail. I found out like a few months ago that there are people at this company
still using it. And it's not updated. So there's a bunch of people who are still using like google
crime circa you know seven years ago to get on gmail
everyone has smartphones now i know right that's what i said but but they're like no well you know
we want gmail on the desktop and this is the way to get it why i guess it's like you know the like stuff has come
so far on mobile now like i have my phone and it gets you know automatic notifications without even
using that much data it pushes them to me it just pops up a notification like i don't need it on my
desktop i think it's like it's just the risk reward right like they feel like i mean the google crime
stuff's already done so there's no risk and they don't feel like they're gonna get fired or anything and so it's like there's just virtually no risk and so even
if the reward is just marginal like you have gmail on your desktop and your phone they just do it
anyways i would say these people should find a new job but if they're just using your tool from
seven years ago instead of rewriting it for themselves to get it updated fair fair point those people are probably listening um anyways
all right time for a book of the show book of the show so um oh i had something i really wanted to
talk about but uh anyways we can save it for next show.
But actually, we'll talk about it after Book of the Show, just a very short interjection.
So my Book of the Show is a theory of fun in game design, which is pretty cool.
This book was loaned to me from a friend.
And basically, it goes over a theory of fun. If you were making a game, then...
You might ask someone, is this game fun?
Is Pac-Man fun? Is GTA 5 fun?
Why are these things fun?
These are super hard questions, at least for me.
Because it's deeply psychological and things like that.
But this tries to formalize it and i felt like
it did a pretty good job it's pretty interesting um you know obviously a lot of it comes down to
like patterns and the satisfaction that you know your brain gets when it encounters different
patterns when it recognizes the pattern and things like that um it also just talks about game design
at a high level and it's pretty it's a
pretty good read it's very short book it's almost written like a comic book so it's not it's not
heavy or anything but uh yeah it's pretty cool a theory of fun i feel like it's like weaker strong
it's not fun it's funner or more fun or less fun is pac-man funner than uh gta the internet tells me all people do in the
new gta is find crazy ways to die yeah yeah pretty much it's all the videos i see about it
one summer that oh wow look how realistic this is and like in-game photography that's one thing and
the other thing is like look at this crazy way this guy died yeah gta i feel like did a
huge disservice i don't know if this is true for the public at large or just me but you could pre
order gta 5 a long time ago like i think like six months ago you could pre-order it and they would
give you like three million in fake like gta 5 money because i guess the way it works is like
even when you're playing single player,
you need an internet connection.
And so it keeps you from cheating,
even in single player,
and you have to use in-game currency
to buy things.
Now, you can't actually spend money.
It's not like a freemium or anything like that.
You can't turn real money into in-game money.
But the in-game money has to be kind of respected.'m assuming gta6 will have something where you could spend real money
it's like going that path but the uh but so yeah so they gave you like three million i think in
fake money then like about two months before it came out i saw some article about it and i was
like oh that's cool so i went to see if you maybe I'd pick it up. And they had like said that you get one and a half million in fake money because basically like you're no longer an early adopter.
So they only gave you that in fake money.
And I kind of felt screwed like, hey, just because I didn't preorder it earlier, you know, like screw me out of 1.5 million of fake money.
So I didn't buy it.
And then it came out.
Now you got zero.
And then, yeah. And then it came out and a bunch of people like oh this game's great so i was like okay maybe i'll
buy it but now there's nothing like you start with zero so now i'm like forget it i'm gonna
wait until they've got you because now you're gonna buy you're gonna pre-order gta6 the first
day it's available for pre-order oh that's their long-term strategy yes Maybe, but for GTA 5 it did not work
because now I just feel like,
why would I play when I'm going to be $3 million behind?
I'm going to actually wait until it goes on sale
instead of spending the $60.
I feel like that's how I'll lose $3 million in virtual.
Yeah, I'll lose $3 million in virtual currency,
but I'll gain $20 in real currency.
But you'll still have spent the money,
so you'll still have lost. Yeah, margin is huge so yes and we this would lead perfectly
into talking about the uh new kerfuffle about steam charging for mods but uh we'll save that
that's right i saw that my book of the show is the programming title Monster Hunter International.
This is not a book about programming. I lied.
It is yet another science fiction fantasy novel.
Ah, okay.
This one happens to be, I guess it's considered horror fantasy.
Everything that's got monsters is considered horror, but this is not very dark.
It's a very light book, and I was reading it, and I was just like, this is not this is not very dark um it's a very light book and i was
reading it and it was just like this is a really fun book um i read the martian and i thought the
martian was really fun um yeah very light-hearted book i thought like it was serious but you know
like also i laughed out loud a lot um this book wasn't quite as funny um but it was really good
you know just a good fast-paced goofy story almost like you'd see
in a movie um and i read a lot of like deep thought provoking uh science fiction fantasies
this wasn't like that per se um but it was a lot of fun to read and then later i read an article
about this guy and i guess that's what he says he's trying to do is just write light-hearted
stuff like why do we all have to be artistic and literary why can't we just write good fun to read stories um cool so that sounds great what's the theme it looks like it's like a
vampire yeah it's basically about like a guy who's just almost kind of like a superhero not he doesn't
have like super powers but he just like destroys monsters so like there's monsters in the world you know the government's
trying to keep it secret and this guy like hunts them and there's other people that hunt them too
and he you know joined forces and something really bad is happening and they're going to
work to try to stop it so literally like every tv show you've ever seen um but i i listened to it on
audible because like we mentioned last time uh that's how I do most of my listening even though I say
reading because I don't have time
to read I'm way too busy or I'm
lazy to read so I listen to most
of my books and I use Audible
and we have Audible as a sponsor
now so if you're interested in getting
a month of free Audible
you can check out audibletrial.com
slash programming throwdown. Programming
throwdowns, all lowercase, all one word, really long name. Sorry about that. Um, audibletrial.com
slash programming throwdown. You can get a month free. It's pretty awesome. I recommend it after
a month you get to keep the book. Um, I have many books now, uh, lots and lots of books because I
have a long commute and, uh, them there are other ways to you know your
library has you know audiobooks too but um yeah you had the overdrive yeah but it doesn't have
nearly as many uh and you have to kind of wait for them to be available which is kind of annoying
and i'm really lazy so yeah and you can support the authors that way too support us and support
us and support our bandwidth issues all right is it time
for your sideline note or are we moving on to tool of the show um i totally forgot my sideline
time for tool of the show tool of the show i'll have to make it up to you guys
oh man i totally totally failed on that oh well next time i'll have to write it down
tool of the show my tool of the show.
So actually, so this is interesting.
So I always just used whatever default shell, you know, is provided to me.
Like usually like in Ubuntu, it's Bash.
In Solaris, it's like CSH or what have you.
But then a coworker showed me, oh, my ZSH.
So it's almost like a two-parter a co-worker showed me oh my zsh which is another great tool um for mac or linux which uh basically
converts your shell to zsh but then also adds a bunch of other really cool things and so i've
been using oh my zsh for a couple weeks weeks now. I really love it. It's
amazing. If you're running Linux or Mac, you should definitely get that. But what to do on
Windows, right? So I have one computer. The computer that I use to do all my Mame Hub
development is running Windows. And that, as I said, I'm doing development. So I kind of want
to have a shell that isn't terrible.
And so this is amazing.
It's called Baboon,
and it is basically, think of it as Oh My ZSH for Windows.
So it kind of rolls up Siquin and ZSH and Oh My ZSH all together into one program.
It's easy to install,
and then you just start it up and you have this like pretty
awesome, you know, shell, like you would have on a Mac or on a Linux computer on your Windows
desktop. It's pretty sweet. You've had a lot of good tools. But of ones I didn't know about,
this looks pretty awesome. Yeah, yeah, this is pretty killer. I mean, the whole point of it is it's for Windows.
So if you're not a Windows guy, this is like completely useless. But if you're not a Windows
guy, get Oh My ZSH. And Oh My ZSH, you will be amazed at your productivity. If you are a Windows
guy, use Baboon and it is pretty epic. I love to try this at home. At work, I tried switching to both ZSH and Phish
and we should talk about
shells sometime. Anyways,
away from the default
bash, but unfortunately
my team has a lot of people who
wrote really gnarly, awful
bash scripts to set
environment variables for building our project
and so
they're just so
specifically bash oriented and i my bash you can always do bash and then the command no because it
sets uh sets local things like it sources the scripts and you need to be able to execute them
i couldn't figure out how to make it like back properly like it's so like weird i don't so i
would have to run two and i've just never gotten around to it. Or maybe I just don't know enough
to run one from the other.
Yeah, one of the cool things about Oh My ZSH
is you have one global history
for all your terminal tabs.
But it's even better than that.
Like the first history is local
and then after that it's global.
So if like you want to like just rerun the last command
on like two different shells, like it'll do that that but as soon as you go one more command it goes
into the global history it's very clever um but i because of that phenomena like i'll usually
have like one or two tabs that are in bash and so that's because these are things where like i don't
want them to pollute my history and so you could do something like that but it's not ideal fish seems like a mostly pre-configured
zsh and i like there that when you start typing something it auto completes to the right of your
cursor like a browser oh wait it's called fish like the animal yes okay anyways f-i-s-h yes
fish shell i haven't i haven't even heard of
that shell yeah so like if you start typing like ls and then the start of a name it'll auto complete
to the right and you can just push right arrow to choose that and i think you can do the same
thing in zsh but it takes extra configuration yeah oh my zsh by default doesn't do this like
but you can hit tab you can even auto complete like git branches
and stuff like that it's pretty awesome but it does not uh anyways does not do that i said
chasing off on a tangent uh and this is all very applicable because i my tool of the show this week
is crouton and crouton is a project that allows a chromebook to install a ch root linux distribution so that
you can and now a newly added feature is you can run uh an xfce or an ubuntu an xfce version of
ubuntu or straight what is it i guess unity ubuntu um in a window application window on your Chromebook. Oh, cool.
So a Chromebook is kind of limited.
I wanted to be able to, in the evenings,
just on the couch, on my laptop,
I normally just use my Chromebook for browsing the web and typing,
or I use my iPad most of the time.
But I have my Chromebook out,
and I want to be able to hone my programming skills on the couch.
And so I wanted to be able to not just have to ssh into
my desktop but actually like on the go or whatever be able to use linux on this chromebook because
i don't want to buy another laptop just for this purpose and this is great it works awesome so i
yeah i use sweet xfce and it just opens it up as like a new window it shares once you get it
configured it's a little wonky but shares copy and paste between the chrome browser and the chrome os part and the window that is crouton you can paste stuff
in and get it configured run things uh you know script download whatever share between the two
um and it's really awesome the only snag of rent across is because my Chromebook I have, and I think most Chromebooks are ARM, and most people's desktops are some 32-bit or 64-bit Pentium Intel processor
or whatever, x86, x64.
There's some tool.
Most of the tools, the common tools, like in Ubuntu repositories,
are compiled for ARM, but some stuff is missing.
Oh, it's wild that the chromebooks are armed that's
they're probably the only laptops that are arm that i that i don't know that they are all arm
but i think many of them are the cheap ones are and now windows is starting to push to try to have
arm support as well uh but yeah so like if you download for source sometimes it won't compile
for arm if you're using weird stuff and apparently there's a way to use qmu to do on the fly uh translation but if you're doing anything more than like a
simple task it's just going to take forever well i wonder if you know like because android runs arm
so i wonder if you're using a chromebook to do android development if the android emulator runs
way faster because you actually don't need an emulator.
It's now a simulator.
No idea.
I've not tried it.
But check it out, Crouton.
It made my Chromebook suddenly much more useful
than it was before to me.
Yeah, that's killer.
Even though it's another one of those,
like I was saying before the show,
that sometimes Linux frustrates me
because it takes too long to just get something working.
And you've run across a problem
and you spend, you know, like a whole day
trying to solve your problem.
But it's because I'm trying to do something really awesome.
So, crouton.
Well, now you'll have to go and add ARM support
to all the Ubuntu packages.
Yes, in all my free time.
Yeah, right.
All right, time to discuss Fortran.
Fortran.
So Fortran is a very early language.
You don't want to be writing Fortran now
unless you are working on existing Fortran code base.
Like if you want to start a new web server or something,
you probably don't want to be using Fortran
for your new website.
But it has a pretty cool, favorable a long history very interesting and it's still in
use today a lot of people use in fact you probably run you know fortran executables or code that's
part that's been coded in fortran you certainly do and you don't even know it so that was a lot of caveats yeah so fortran stands
for formula translating system and so it uh it was the first sort of optimizing compilers this
is back you know when people were writing assembly language and i don't know did we ever i think we
explained assembly and machine language you know
like four years ago we'll recap real quick so your machine does machine language which is you know
each instruction is just uh uh you know an integer for the instruction name and then some some operands
that are all sort of represented in integer format assembly language is a little bit higher than
than just straight machine code um yeah mnemonics that's what they
call it so like you get a m-n-e mnemonic mnemonic mnemonic for each like the 16-bit instruction
may be like c-a and that's m-o-v move because move makes more sense to humans than CA, representing the move instruction to move one register to another.
So it would be like CA-01-02, move registers 1 to register 2,
and then each of those being 16 bits, then 8 bits, 8 bits,
would give you a 32-bit instruction.
That's not how they would be divided in real life,
but that would be an example.
In assembly language, you would have MO r1 r2 move register one to register two for example but it's just a
straight mnemonic is every assembly instruction one machine instruction nearly the some assembly
let me just like it's a two-pass compiler.
And in the first pass, it looks for like labels and stuff and assigns them addresses or holders.
And then so that you can do branch to a label instead of branch with a numerical offset.
Oh, I see.
So like there are things which aren't actual instructions.
Oh, I see.
And then those get kind of removed.
Yeah, so think like variable names almost, right?
But yeah, pretty much one instruction is one instruction,
except for that in things like Intel processor stuff.
And instruction you write in quote-unquote assembly language
may be many, many, many low-level instructions getting executed but it is still
one instruction as issued to the processor oh okay that makes sense yeah like certain like
but there's like wrappers of processors and intel processors and amd processors now
yeah yeah like some cisc machines could actually like sort a list and things like that in
in one instruction.
But then under the hood, of course, there's all sorts of stuff going on in hardware.
Right.
Cool.
Okay.
So, Fortran is the first optimizing compiler.
So, it actually is the first time where somebody said, let's build sort of a higher level language on top of assembly and then also let's diagnose what the person's intent was and see if we can
make like even better assembly than what they intended while preserving uh you know they're
the same logic while preserving the same computation um which makes sense because
we think today the opposite like oh if i want to make it better i'll write it in assembly
like that's the ultimate optimization but there are some optimizations they're just way too tedious you wouldn't ever
code by hand like loop unrolling like just writing the same c code a hundred times to unroll a loop
you just won't you wouldn't do that like that's just annoying people would tell you just go write
a loop but it may make sense if the compiler understands more about the state of the system
to unroll the loop for you but you would never hopefully use like a pound define or something
sure a macro or something right but like an assembly language you know there's not necessarily
the same conveniences so you may not write in that style and it's a little harder to view the
structure of the program with an assembly language interpreter than writing in a higher level
language where it can understand the flow a little easier.
Gotcha. That makes sense.
Yeah, I saw something about how like Java, like in certain very specific cases, Java is way, way faster than C because of the way the just-in-time compiler works.
It can like unroll loops.
Right. It understands at this moment moment your system, all the run time
variables are now known
and if you do it over and over again
it's the exact optimal version
right
so history of Fortran
Fortran was first designed
1953 by
John W. Bacchus
he claimed
it had 20 times fewer instructions than assembly to do the same task,
same coding task. Sounds like a big promise. Yeah, I know. It sounds like the GPU promises
that we're seeing now. So his point, he wrote programs for IBM for computing missile trajectories.
And he was saying he was lazy and didn't want to write so much
assembly that's what he's quoted as saying so he thought it would be more
efficient for him to invent Fortran than to have to do all of those all that
assembly programming and maybe it was but either way he he definitely could be
considered a philanthropist of sorts because he wrote Fortran and everyone else could benefit,
which is pretty cool.
Um,
so Fortran sort of harkens to like a very early day of computing,
definitely before our time.
But,
uh,
you know,
our parents are,
if your parents are kind of techie,
uh,
then,
uh,
if you're old as we are and you have parents who are techie,
or maybe your grandparents were techie,
they can tell you about these crazy stories of using punch cards.
And actually with Fortran, back in the day, people would use a special machine, kind of like a typewriter,
but when you typed C, it would actually punch a hole,
or maybe two holes into a card
and then move the card a little bit, kind of like a typewriter but with holes instead of –
imagine like a Braille typewriter or something like that.
And so you would type out all of your instructions.
If you mistyped something, you would just have to throw that card away and start over.
And when you were all done done you would take your stack
of cards and hopefully don't drop them and get them scrambled on the floor yeah if you drop them
forget it right like i think they're numbered it's kind of like you know how like your your
checkbook has numbers so so if you drop it you can like you know do a human quicksort
but nobody wants to do that so uh um you would take them over to like the um
i think it's like there's a special name for it like a secretary or something but there's like a
reader cool name for it no like well you take them to a person who would feed it into the machine
and then the computer basically is that what the i was thinking that but i would anyway there's a
person who would their whole job was to take these punch cards like stacks of them feed them into the
machine machine would take maybe like half an hour um and then spit out some some results on i guess
like a like a kind of like a cash register would on a piece of paper and they would you know attach
it to the to the punch cards and give it back to you so you so imagine like you would you would submit your
program depending on like how much work this this gentleman or lady had uh you'd get your program
back you hours later and you'd find like oh i had a you know some runtime error or something like
that it's just like unbelievable um that you could get anything done like that um but people
did for years and years but while you're waiting you just surfed the web on your iphone so
i wonder if someone wrote like a fortran yeah there are punch card emulators i found i was i
yes yeah are there ones for the web?
Let me check out.
There were.
There were ones on the web.
I just was looking.
They look almost like they're just for aesthetic purposes.
I couldn't find anywhere you actually punch your punch cards
and feed them in or anything.
Oh, okay.
But there is a punch card computer I found the other day,
like a printoutable.
You make punch cards, and you slide it through,
and it's an actual, like, You physically do the computations by...
Anyways, it was very intriguing.
I want to teach this to my kids one day
because I'm a nerdy.
Yeah, this is amazing.
I found a website where you can type anything you want,
and it will put it on a punch card.
But just imagine...
The worst is you punch all this stuff on the punch card,
and then your program has a bug in it, right it right like it doesn't compile and then it's like
oh yeah i mean like there's physical ramifications beyond just crackles of energy for your code not
compiling like you you have to start retyping things like think of all those dead trees you
wasted that's not green like if if you have an error do you have to type every
card from that point on to the end or can you like splice in i'm sure you can splice in why
i mean i don't think it enforces the numbering yeah i guess that's true it's like how do you
that's how you make me too man yeah oh man uh yeah that's completely mind-blowing as a new uh new meaning to technical debt
yeah that's the literal weight of the cards for your system
so uh obviously you know nobody had a computer in 1950 just hanging out they were there was a
handful of well there's more than a handful of computers but there was your one computer for maybe you know 10 or 20 people and so at least
and so um these are called mainframes and uh and so uh you know that one person who's just feeding
all the punch cards through is interacting with the computer everyone else is just you know
interacting with the punch cards um fortran still gets used today but not punch cards as far as i know hopefully
but yeah fortran still lives on in many places where you do numerical processing so you may
have come across it before i heard about it it still backs some of the most well-known uh
linear algebra systems like la pack uh lots of matlab i believe modules are still in fortran
and optimized that way um and it's just really useful for people doing scientific computing
where this is like where it kind of got its start uh and so like in high performance computing and
stuff fortran is used often and uh it just carries over that really high performance people wanted to use it and so the high performance
high performance modules
still often have
Fortran in them
that's right like if you do anything on your computer
with images like any kind of image
manipulation at all even if you just like turn
a PNG into a
JPEG you're using Fortran
code like
it's absolutely everywhere.
It's on every machine.
So it's completely ubiquitous.
But, you know, granted, most people probably don't even know
what that code is doing.
I mean, they know the intent of the code,
but they couldn't, you know, fix bugs.
Well, it's like anything.
The more optimized it becomes, the harder to read it typically becomes yeah that's true too yeah the more obtuse the optimizations chosen are
yeah right so um so there's a few modern compilers for fortran uh fortran just like c++ you know it
had c++ has has the original version which was uh written in, the compiler was written in C.
Actually, sorry, the compiler, it was written in C, and it also generated C code.
So it didn't go straight from C++ to the machine.
There's multiple iterations on that.
There were kind of tweaks to the language over the years.
And then now we have the C++11, right?
It's the same with Fortran.
There was an original version of Fortran.
There's a very popular one called Fortran. Wait, I think we have C++11, right? It's the same with Fortran. There was an original version of Fortran. There's a very popular one called Fortran. I think we have C++14
now.
What?
Yeah, C++14 is a thing.
And I think they already have C++17
is in the works now. You're
behind, man. What? I'm so
far behind. I'll have to
look into that and find out what they added in 14.
Wow. That's like a return
type deduction, relaxed const
expressions, variable
templates, aggregate member initialization,
digit separators, generic
lambdas. These are all C++14
features. Oh, generic
lambdas, really? Like
function pointer kind of thing? Well, in C++11
the lambda function parameters had
to be declared with concrete types but in 14 that requirement got relaxed oh okay this is patrick reading
excerpts from wikipedia um so yeah so compile so now you know i'm assuming g95 is implementing the Fortran 95, which is that version of Fortran.
There's also GNU or GNU G Fortran.
That's the one I've used to build SciPy.
Yeah, it's part of the GCC collection.
That's right.
So if you have GCC, which most machines do, you also have G Fortran.
And so if you have to build SciPy from source or if you want to um you'll
have to you'll have to have that installed and you'll see i did that once and yeah and then i
was like wow it's taking a long time yeah it takes forever so the interesting thing it'll actually
um like recompile the same program many times to find the best way to compile it. It's kind of like mind-blowing.
So yeah, so those are the compilers in a nutshell.
So, what are some pros
of Fortran? Punch cards!
Punch cards!
I mean, come on! Like, what language
is freaking punch cards?
Only people who have never had to program in punch cards
before would be so excited as punch cards as jason and i yeah i just like uh man i mean talk i wonder if uh
we could we could get our hands on some punch cards someone told me that some of the computer
museums have them but they think that they may not let you run your own programs anymore
oh oh i see they'll have the like place where you just gotta yeah i
really want to one day just to say i could but i don't know if you could like that seems like
something that has like moving parts that you couldn't just buy an old one on ebay and expect
it to work so like if you're like we'd have to find an emulator yeah yeah yeah that's right but
if you have an emulator it kind of defeats the point like it'd be pretty sweet if we could you should make one with an arduino oh punch card if we could take like a transpiler
like go like use if there's a g4 tran that goes to llvm then you could take like a very complicated
like you could take some neural network compile it to llM, then transpile it to Fortran, and then run it on one of those old machines.
I want to compile my JavaScript Node.js program to assembly on punch cards.
The server is like, please wait while we read these punch cards.
Please wait while we read these 17 million punch cards oh no i'm gonna make
that at work i'm gonna measure my productivity and number of punch cards it would have taken
to do my work so like instead of like system lines of code or whatever like i generated 100
slot it's like i generated 10 billion punch cards today.
That'd be amazing.
Yeah, using the transpiler and all that, you could do it. It's like you're 3 million GTA dollars.
Yeah, that's right.
That's right.
I generated 3 million punch cards worth of codes.
That's the new byline of our show.
Increasing your punch card output by immeasurable percentages.
I totally think the next logo or a logo of programming
throwdown has to be this punch card that i'm looking at right now that has that has
yeah that looks awesome that's like one of those like binary clocks where you get it like for the
novelty and then you spend a year trying to read it. Okay.
And?
All right.
So another pro about Fortran is pretty cool.
It's pretty unique.
So Fortran actually started some of the trends
of doing kind of crazy things to optimize the code.
And Fortran kind of started that whole movement.
Fortran had a directive called frequency.
So you've probably used this, Patrick.
Have you used the register directive in C?
All the time.
Seriously?
Yeah, seriously.
I would have used that a lot.
It just actually registers.
There's a better way to do it.
But yes, I know what you're talking about.
Register, because that's optional.
But there's a way to force it to be aliased
to an actual register. Yeah, I was going to say register doesn an actual register anything ah well it's supposed to be a hint but i don't know that
it actually works um but there's a way to actually force the compiler to use to save a register and
then use that register for the variable you're using uh okay it's like some kind of maybe it's
gcc specific i don't know but there's like a more forceful
way to do the same thing
yeah that makes sense like something kind of like underscore
underscore blah blah blah or something
it's probably that and it's GCC
maybe I don't remember
the syntax
so the
register thing in C is not used
anymore like modern compilers I don't think
respected anymore because they've found like statistically they took like So the register thing in C is not used anymore. Like modern compilers, I don't think respect it anymore
because they've found like statistically,
they took like the top 100 programs that had register
and they found that if you took away register,
it actually performed better
because the compiler is just so much smarter than we are.
So register became a no-op like a few years back.
And frequency is also a no-op in Fortran,
but it used to actually tell Fortran to do some Monte Carlo simulation,
which we talked about in our earlier episodes.
We talked about rejection sampling and things like that.
But yeah, the Fortran compiler would do a Monte Carlo simulation
to figure out how to lay the blocks of codes and blocks of code in a way that
is most efficient um and and it makes sense because this guy was at ibm uh working on
missile uh you know guidance simulation which is full of monte carlo sampling so he's probably an
expert on that and so he put it into his compiler which is pretty sweet i should clarify
too my use of register was because i was about to write inline assembly um for accessing special
registers on the processor so it wasn't for speed oh interesting okay i remember uh off topic doing
fpga work where uh you know like you'd write to a certain block of memory. You would just do x equals 3 and it'd just be hanging out there
and you'd never use x. I remember looking at that code and thinking
I'm not a more theoretical comp sci guy so I just saw
this x equals 3 hanging out and I was like this doesn't make any sense. Why do you do this?
Someone told me that variable x is pointing
to some special memory
and there's this other processor like fpj that's listening to that memory and so when you do x
equals three like it immediately goes into this other processor and uh um this is just like once
you get into low level stuff there's a bunch of these kind of yeah so i've done it like that you
have to mark it volatile memory map it you can use a linker if you want
or there's other ways to basically place at a specific address and then when you access those
addresses the bits come out on a special bus and the fpga listens to that bus and responds
appropriately either storing the data or writing it back to you when you try to read it and it's a
kind of a way to communicate um that's
different than like i squared c or spi or something because the data rates can be much higher because
it's meant for as if it was just memory mapped ram but it's really a processor yeah i mean i'm
assuming it the the data rate could be as high as like the trace right or as high as the other
processors running or something like that it can be really
fast it's configurable yeah it depends on the processor how do you ensure that the other person
has read it i mean they just have to provide a guarantee that they meet the timing spec
oh i see so it gets clocked out and they have to guarantee like an fpga design that
it doesn't work like a processor right
simultaneous so like the logic it flows into is capable of uh consuming the byte or bytes you
transfer before they go away got it oh i see what you're saying yeah yeah that makes sense
like it's propagation speed not uh like processor speed yeah so you basically it needs
to read that information um and pass it on to the next stage in the pipeline before you get
write it again yep something like that yep um cool so what are the cons of fortran um Fortran. Yeah, basically, don't use Fortran.
I mean, like, you know, MATLAB, R, SciPy are just way better.
You know, the tooling is way better.
The support for, you know, reading images, all these things,
just so much superior in these other languages.
So, I mean, Fortran is cool.
As I said, you know, all of us are running Fortran code,
unbeknownst to most of us.
And so for that reason, it's very cool.
And you might even have to debug some Fortran code,
especially if you're doing some image processing
or something like that.
But really at this point,
it's just kind of like a cool history lesson.
You should not try and build your next website unfortunately what the ringing endorsement of jason yeah yeah jason jason does not
uh does not support this message i do not approve this message that's right yeah i do not approve
this message um but it's cool, check it out. It's
an interesting one to know. As I said, you could shock your friends by telling them that
their computer is running Fortran code and they don't even know it.
Because all your friends want to hear that.
Yeah, that's right. You'll become that guy.
You are already that guy.
Yeah, we were that guy. We've been that guy. I am that guy yeah we're that we were that guy we've been that guy
I am that guy
alright
till next time I think that's
I think that's it for me
alright guys have a good one
the intro music is Axo by Binar Pilot
programming throwdown
is distributed under a creative commons
attribution share alike
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.