Two's Complement - Strong ARM
Episode Date: March 18, 2024Ben and Matt discuss their transition to using ARM-based Apple Silicon laptops for their day jobs. Ben rewrites Bash into Java because it makes his tests run faster. Matt tries to teach VSCode somethi...ng and winds up writing JSON instead.
Transcript
Discussion (0)
I'm Matt Godbolt.
And I'm Ben Rady.
And this is Two's Compliment, a programming podcast.
Hey, Ben.
Hey, Matt.
You've got a new microphone.
I do.
I do.
I have a lot of new things.
I have so many new things today.
And we're going to find out in the edit whether or not this microphone actually works or not.
So we're going to talk for like 45 minutes.
And hopefully there's just more than silence on your side when we come to look at the recording.
I mean, I'd say, you know, one chance in three.
I'll take those odds.
Yeah.
Yeah, I have a whole new setup in lots of ways i have a new podcasting set up here with the microphone uh i have a new
work laptop that i for the for the first time in well since 2010 my primary work computer is not a linux computer wow this is this is like a whole
new world for me that's i'm still deciding if i like it or not but that is an interesting
an interesting we have to do i have to dig into that because well yeah i also have switched to a
mac oh wow uh a few months back uh But that was out of sort of a practical
consideration of, like,
I didn't like being one of the strange
people at the company who didn't have a Mac.
And so begrudgingly,
I accepted the
corporate Mac and, you know, all the
things that come with the manageability.
The corporate machinations?
Oh.
I'm sorry, I'll leave now. now yeah no no but all of the you know i understand why if you're a company particularly one like ours with the kind of uh intellectual property
considerations and things you want to have a machine that isn't just kind of a free-for-all
and so there's a certain amount of manageability and ensuring of encrypted hard disk nurse and all that kind of stuff which
you know ubuntu lags behind understandably compared to you know a full operating system
like mac sorry not that it's not a full operating system but like a corporate friendly operating
system a corporate friendly friendly operating system which is weird because it didn't it didn't
used to be like that right right it used to be sort of like like so the
last time that i didn't have a linux computer as my main computer was 2009 right when i was
consulting and basically my choices back then if i wanted to as a consultant sort of go into a
random company that i had no idea who they were going to be and have any sort of hope of like you
know connecting to their local network and you you know, being able to share a presentation.
The choices were a Windows laptop, which absolutely not, and a Mac. And so that's
really the last time that I have used a Mac as my sort of primary laptop, my primary work laptop and that was you know for consulting reasons
got it um and uh you know fast forward 13 years and now i'm kind of back to that but but yeah
like you i had this sort of you know because we started at our current company sort of very early
on and it's like you know what's the policy on work laptops it's like well you should have one
you should have one do
you do you own one already well maybe use that one for now and then we'll get you a real one later
that's right and we both yeah got managed to sort of wangle essentially a pick your own adventure
laptop from like here's a budget go get a computer we're like sure fine. We both... No, well, I ended up with one of the Lenovo Carbon X series,
which I've been very happy with.
But I think you had something different, didn't you,
from that point of view?
No, I had that one for a good long while.
Oh, okay.
And then about...
I had some problem with it.
And then about six months ago, nine months ago, I switched over
to like a Dell Inspiron, which was fine. It's a perfectly reasonable laptop. I enjoyed using it.
And then, you know, like you, I was like, yeah, you know, this is like, I'm kind of grandfathered
in here and I don't want to like spend a whole bunch of time reconfiguring everything but you know i probably should switch at some point and then someone on my team went
and took the project that we're working on and built it on a mac and ran the test and the test
ran in half the time and i said we're switching right now so true to form it was testing that got you to switch computers. Whereas for me, it was just, yeah.
50% of the original, like twice as fast, sold.
Where do I sign up?
So we're going to have to talk about how on earth that could be the case
and how you're even able to do that.
Because like my stuff, so like the way that I use my computer
is a very, very much glorified thin client to a real linux machine that lives in a
data center somewhere and has all the cpus and all the ram and all the network connectivity for all
the weird things i need it to to have yeah i can't get on a laptop and i can't even get on wi-fi for
some of the things that i'm i have to be able to run and debug and whatever so it makes sense to
have a machine somewhere else and it's kind of nice to be able to run a debug and whatever. So it makes sense to have a machine somewhere else. And it's kind of nice to be able to say,
can I have more RAM?
And someone clicks a button and I have more RAM
as opposed to someone coming around with a stick of RAM
and sort of saying we need to power down your machine.
So that's cool.
That's cool.
There's manageability aspects there.
But then the Mac to me is just a sort of an encumbrance
that once I've got it configured correctly,
doesn't get too much in the way for my
full screen linux desktop that i'm actually working on but so so i never do anything locally i have
like two or three things installed locally and um that's it but you're now saying that you're running
on a mac yes yes so this is different yes And I have kind of used the sort of like
Mac as a dumb terminal in some situations
in the last few years.
And I think it works okay.
It works fine.
It is like kind of like,
it makes me a little sad
that you've got this incredibly powerful machine
that you're basically just using
to shuffle pixels back and forth right
um but it it uh but aside from that like it works great um but the thing so the thing that i the
things that we were seeing um is with the tests that we were running i'm gonna have to explain
a little bit of context here yeah it really make this make sense but i guess that's the point of this podcast um wait we have a point i thought the point was just you know every friday afternoon
we you and i get to hang out and not feel too guilty about it news to me right like wait there's
trying to do something um so the the thing with the tests in this project is that they are at a very particular sort of
like phase in the project.
So as I, the way that I think about as software projects grow, you know, you measure them
by things like, you know, complexity and two ways, I think, and capability and two ways
to sort of measure those things.
Like how many lines of code do you have and how many tests do you have?
And sort of like if you're, you know, building things at least the way that I espouse them to be built, you wind up being able to run your tests, you know, hundreds of tests per second, right?
And so what that gets you are some sort of like interesting metrics that you can look at and see, where are we in the lifetime
of this project? Because when you're in very early stages and you've got 100 tests or 200 tests,
they should be able to run basically instantaneously, on a single thread. You should
have to do no additional work, no special tricks to get your tests to run in a second or less right and this
is because of all the things that you talk about in terms of uh making tests uh targeted so one
test in your instance might be something like take a list add an element to the list is that element
in the list yes okay that's one whole test right and then you've got a different test and another
test and another test so that you can you know it's isolated this isn't a test of like the test is do a comprehensive try of every
possible combination of operations on a list that's not a test that's that's right yeah right
if you were running a test like that you would be running it in a different environment probably
you'd be running it in ci and honestly like and that's more of a sort of property-based test type
thing yeah yeah but you're talking about even a test where you're like yes exactly like even a test where you're like spinning up a database or something and
doing all those kinds of tests i write them very infrequently first of all and even if i did i
wouldn't run them in this way got it this is very much yeah i'm with you keep going yeah yeah so
you've got like you know hundreds of these small focused fast tests right and then you the software
gets bigger and bigger and bigger and then you eventually have like tens of thousands of these tests maybe you have like
10 000 and at that point even with very well written tests that you're sort of crossing a
boundary there i think we've talked about on the show before sort of the rule of eights yes
and one of the earlier episodes in fact yes exactly and you know you've got like you know when you're in that early, early phase and you've got like 100 or so tests, maybe they'll run in like 800 milliseconds.
And that, you know, might as well be instantaneous for the purposes of developer workflow.
Right.
And then when you start to get up into like the thousands of tests, even if they're well written, they start getting closer to that like eight second range, even 10
seconds, 20 seconds. And you start, you stop being able to work interactively, right? So,
as you make the transition from 0.8 to eight, you can still work interactively.
As you get beyond that phase, as you get beyond the sort of 10,000 test phase,
you stop being able to work interactively. Now you can put that off a little bit longer by
running your tests in parallel. Right. Right. Uh, cause at that point, the overhead of distributing
the work of the tests is worth it. And so you, cause right now, if I run my tests in parallel
on this project, it gets slower because the overhead of distributing them across multiple
cores. Is actually greater than the fact that each test takes less than a couple of hundred microseconds even, right?
Exactly, exactly.
And the overhead of doing all that just slows it down so much that it makes it slower.
But once you get up into the sort of 10,000, 20,000, 30,000 test range, then you can scale
across multiple cores and still sort of be in that eight second
feedback loop range. Right. Yeah. So, and you can keep going with this and that might even be a
whole other episode talking about the other levels beyond that. But where we are right now with this
project is the tests run fastest on a single core. Right. And so I was talking to a bunch of our infrastructure
folks and I was like, Hey, so, um, our tests are, you know, taking like 10 seconds now,
can we just throw hardware at this problem and make it faster? And they're like, yeah,
we can give you as many cores as you want. And I'm like, well, yeah, but that doesn't help.
So we, we ran some tests. So on our sort of like remote desktop setups,
the tests that we currently have take 12 seconds.
I think we've got,
and that's including some integration-y style tests,
but they take about 12 seconds.
On my Linux laptop, they took nine seconds.
So they're actually faster on the Linux laptop.
That is very interesting.
Yeah.
On the MacBooks, they take five seconds. That is impressive. And so this is basically like
doubling the lifetime that we get to live in this, you know, not quite honeymoon phase,
but this like very interactive, simplistic world where all of our tests run in a single thread.
You run all of them on every change. They're nice and fast and you get to work in this iterative style. And so we've been working on this project for about, you know all of them on every chain, they're nice and fast, and you get to work in this
iterative style. And so we've been working on this project for about 15 months now.
And basically by doing this, I'm kind of buying myself another 15 months.
I guess so. You double the speed, unless you increase the size of the team and the output,
or whatever. If anything, you would have maybe asymptotically slowed down or something.
Yeah. But then there's also, and this is especially true with Java,
there's sort of a fixed overhead for running sort of like any non-trivial
number of tests, right?
You're probably going to spend, you know,
somewhere in the order of a second or two,
just like loading all the classes and starting up the JVM.
Right.
All of those types of things.
And I suppose that's definitely worth saying, right?
So that was a thing I was going to ask you about is like, how are you able to take the tests that you're going to be running
in our big fat infrastructure that's all x86-y,
is all big server class machines,
run it, first of all, on your laptop, like natively,
and secondly, then switch your laptop out
for a completely different type of computer,
and you've kind of given it away there.
You've moved to Java, or you've this is all well this is this project has always we i mean a long long time ago we had a big old discussion on this very podcast
about when you should pick c++ when you should pick java when you should have python or whatever
and i think you know although um although something like python which a lot of the code base that our company has is written in,
is processor agnostic.
Every library that Python uses is not agnostic.
So we would probably have difficulty running,
even like if it was Python,
the kind of quanti-mathy Python code that our folks write
wouldn't run on a laptop without,
sorry, an ARM-based laptop like the apples are but java just does it's yeah right exactly yeah all the work that i've been doing
i've basically spent this whole week you know this is uh i'm gonna give away our time here but
like we're sort of at the end of the year you know things are a little slow we finished everything
that we needed to do for the year i'm like like, all right, I'm going to take this week. I'm going to move things over.
And none of the Java code had to change at all.
Actually, that's not true.
There was one thing.
There was one thing that I needed to change,
which is some extended socket options that I had on a TCP socket,
which were not supported on the Mac.
Right, but that's presumably a very straightforward yeah if statement or whatever
you kind of accept that now yes my i remember talking in fact when we were talking in the
episode uh c++ versus java i think we were talking a little bit about some of the previous attempts
that uh we had had um and other companies where i'd worked with folks who were like hey yeah if
if it's in java then i could run it on my my mac was was exactly what happened there
this is but before it was arm based whatever and i'm like sure but the the first time that there
is a bug in the native code that doesn't compile on your mac because it's a different operating
system whatever then i'm i'm tapping out of this because i don't have the time to support
two operating systems however similar they are and you know obviously mac os
and linux are fairly similar as they go it would be very different maybe if it was windows
um and that was enough i think to put off my friend from moving to to java or at least didn't
come he didn't come and bother me about that kind of thing all right obviously you just found your
first but it was trivial how far down that road do you
think you will go maybe you won't have as many issues as we would have in like a more trading
system focused thing where we have even more weird uh yeah options and things i don't yeah
i think i think the nature of the problem that we're solving with this means that it's very unlikely that we're going to run
into something like that. Because this project runs entirely in AWS and Google Cloud, first of all.
Right. So the whole concept of any sort of customized hardware is just like, that's just
not a practical solution for us, period. Yeah. Right. And in addition to that, one of the things
that I've certainly seen is there's it's not
conway's law but there's some sort of weird you know conway's cousin's law or something like that
where it's like you know the operating system that you develop on affects the architecture of
your system yeah no for real and so if the model that we have which we're going to have is one
where we are developing primarily on Macs,
occasionally on Linux.
And my intention here is to kind of support both for development purposes.
But if we're developing on Macs and deploying on Linux, then we're going to be very reluctant to change the architecture in a way that's not compatible with that model right it's not to say that we
won't but there's going to be a sort of pressure right to be like you know can you just design
this so that it also runs okay on a mac right um and that means we're going to be doing so like a
lot of what i've been doing this week has basically been taking our very sort of like ubuntu and linux
specific scripts and tools and you know all thespecific scripts and tools.
Bash scripts and things like that. All the places where
we've got some path that's got Linux-64 in it and
doing $uname.
Exactly. Stuff like that.
Once we've made that switch,
and combined with the fact, again, that we're running in the cloud anyway, I think would be very unlikely that we would wind up in a situation where it's like, oh, yeah, we've got this weird proprietary binary thing that we have to plug into the middle of this.
I think the key in that is that you're all going to be doing this.
Yes. that you're all going to be doing this yes whereas with with the situation i was in before it's like
one developer was like yeah this would make my workflow really really easy if i could just do
it locally so i'm going to do it locally and everyone else is like well good luck with that
yeah and then they were like you know hey i've just hacked the code it's six ways to heaven so
that it works on my funny setup and it's like no no this is like the person who comes in and like
reformats all the code because it looks better in their editor and you're like no no this is like the person who comes in and like reformats all the code
because it looks better in their editor and you're like yeah i don't care no no or whatever you know
or like you know yeah yeah every file has like a dot emax rc in it you're like stop putting dot
you know stop it you know nothing against emax or vi but like you know there are certain things
that you don't want to like say well there's a a tax and a cost that i'm prepared to impose upon my colleagues and that should be extremely minimal especially if it's only
benefiting me or a very small subset of people that's just sort of general yeah yeah absolutely
and i mean this is i for me that is a really important thing to do is as a team decide these
are the tools we're going to support as a team. And these are the tools that unfortunately just,
I know that you're a Vim expert,
but we're not going to be writing this Java code in Vim, right?
Right, right.
And I think it's really,
it's like a really important aspect of team cohesion
is to be able to come together as a group and decide that
and really like be okay with it and mean it and commit to it.
That's a really interesting aspect of
this is that whole cohesion around a team that you get around a set of principles and be those
principles as simple and i realize we're now we're going off in a completely different direction here
but those principles are do we vaguely agree on how to name things do we vaguely agree on the code
format do we enforce it perhaps do we have
like yeah yeah bits that are in some formats bits or another is that okay or do we want a unified
stuff do we use the same tools do we allow people to choose the tool that's right for them where it
makes sense or do we just say no you just have to use you know visual source save for your code
your source code yeah um and that can make or break a team oh absolutely uh yeah i mean like i if
somebody prior to me choosing to move to the mac if someone had told me as indeed they did at a
previous employer of ours you have to use a mac for everything that's a very big uh quality of life for me as a developer change i'm i'm built i've been
built i'm built to use linux right that's my yeah you know i'm only get away with this mac because
my keyboard has a button i can hit that flips it between the control and all being the wrong way
around to the right way around but as i go in and out of the mac itself yeah and the linux machine i'm um uh controlling remotely but um
yeah some of those things could be break you know could break you i could imagine yeah
yeah so you decide that this as a team that this is something you're going to go forward with and
therefore it's you know makes sense obviously you're also the lead which gives you a certain
amount extra uh vote but you know if you could if you made everyone else miserable you wouldn't have a team
anymore right no and i mean this one is particularly easy we had someone join our team back in october
and they had come in and they had you know gotten their standard issue macbook and they had
installed intellij on it and all these other tools and then clearly you know like had used a mac
before and really liked it and it's like yeah so show me how to load up the code and edit and intelligent i'm like oh yeah
you need to do this on linux and i could see her face fall oh i'd be like oh okay i was like oh so
presumably this is again to give away what time we're recording this if we're releasing this in
what march or whatever um that's a nice christmas present for her to have like congratulations
you can now edit on the machine that you're running on and use all your keyboard shortcuts
and whatnot right right right but yeah i mean it's so it's not a hard sell for me and the other
folks on my team are definitely like oh yeah no this is great um and me too of course it's like
you know i've worked this way before like i can it's going to take some time for my fingers to
adjust to the keyboard shortcuts,
but we'll, it'll, it'll all work.
But yeah, I mean, I think that, that whole aspect of team cohesion, you know, we've talked
about inner subjectivity on this podcast before.
It's really hard to have inner subjectivity if you don't have the same tools.
Yeah.
Like, like obviously like the build tools and the testing tools and, and, and those
things are important, but also just like, oh yeah, when I was refactoring this thing, I extracted this
thing over here and then I clicked this button. I did that. And then, and someone might be like,
oh yeah, no, I wouldn't do it like that. It's like, well, why not? It's like, well,
cause that would be really hard with my editor. Honestly, that is really, really interesting.
So I, I, on our team, which is a C plus plus team, uh, that we're about 50 50 vs code versus sea lion and vs code
is a fine ide but it is a little bit less batteries included um which means it's a lot
more responsive although you know sea lion is getting better as well you know obviously there
are trade-offs and both and i i find i use both of them for different reasons. But yeah, I do find that like my working environment, when I can just refactor things without thinking about it, when I can put my cursor in a test and say, run the test, please.
I mean, it goes, oh, you mean the test that your cursor is in right now?
And I'm like, yes.
And that's just control shift F10.
And it's so different when I go and look at my colleague next to me who's in VS Code, and I'm like, oh, just run that test.
He's like, I don't even know how to do that.
And I'm like, oh, is there not a button to do it?
And it's like, all right, well, let's just debug it.
And he's like, well, I can't.
He files up GDB in a console next to him.
I'm like, I'm sure there's a way to teach VS Code,
and there is, and you can configure it and stuff,
but it's like it's not a one-button thing.
It's like, oh, you have to create a little bit of JSON
that explains what this particular thing is doing.
And I'm like, why would I want to write...
And all those things, right?
And you realize, yeah,
we have a fundamentally different development experience.
And obviously there are things that are positive
about some and the other.
It's like, you need to be able to know how to run GDP.
You need to know how to run these things
from the command line.
But if you can do it in an IDE with a single click uh go for it you know like coverage
the other day i was like i just ran with coverage because there's a button in my ide that just says
oh yeah i know the right flags to pass the c make to make it do all the coverage things so if you
want to get coverage on that test you just ran and then i'll pause the output and color the lines
that way i just click a button i love it
yeah but yeah anyway so we digress which is well i mean this whole thing's a digression that's the
whole point of it but uh yeah it is um it is important to have some commonality yeah i mean
i think the more of a cohesion yeah i i i value that a lot. And it's sort of like, I really want the people on my team to agree on the tools that they're going to use and the techniques that they're going to use. And we just not say we can't change it. We're doing that this week, right?
Yeah, yeah, for real. going to change we all change together and we change for a reason that we all agree with and understand we don't we don't necessarily all love although in this case i think everyone kind of
does but like being able to commit to it and be like this is maybe slightly less optimal for me
but it's more optimal for the team and it's more optimal for the company and therefore i'm committed
to doing it yeah right and i think that kind of uh consistency and sort of commitment is one of the things that defines what a team is, right?
Because they're all committed to succeeding and failing together, right?
Like it's much harder to make that commitment when it's like, okay, well, yeah, I sort of see in an abstract way how this helps the company.
But like at the end of the year, they're going to be looking at what I did and they're going to be looking at what these other people did and they're going to be comparing them in different buckets.
Yeah. And it makes it really hard for me to be like, all right, I guess I'll just use this thing
that I'm not very productive in. Right. And, and take the time and energy that it takes to learn.
That is a fascinating observation. Yeah. So like, you know, you need to have to have people who
succeed and fail together in order to be able to have this cohesion. Otherwise it's, I find it to
be very sort of difficult to maintain, but if you have it, then it's like, you know, someone joins my team
and it's like, when you're working in Java, you're going to be using IntelliJ. Full stop.
Right.
Like there's no option here. Right. Like that's how all the tools are set up. That's how all the
techniques are set up. That's how the whole environment is set up. That's what you're
going to use. And if you don't know how to use it, that's fine. You'll learn.
Yeah.
Right.
It is. Yeah. Yeah. Yeah. what you're going to use if you don't know how to use it that's fine you'll learn yeah right it is
yeah yeah yeah no that's that's that's cool the whole team cohesion and succeeding or failing
together is very interesting a lot deeper than i was thinking when you were just basically
you said to me before we started recording i got my mac let's talk about why i got my mac and then here we are and i'm like wow
i've had such a like a moment of like it uh what feels very you know uh affecting an insight into
like what makes a team is like yeah we're in it together and that means we either succeed together
or we fail together and we only succeed if we choose jet brains products is that what you're
saying we're not sponsored not Not sponsored by JetBrains.
You know.
Although you will find my ugly mug on the sea lion.
Yeah, that's right.
JetBrains is sponsored by you.
That's right.
Oh, dear.
Yeah, that is funny.
So anyway, you've got a Mac.
Yeah, I've got a Mac um they're impressive pieces of engineering oh they they really are they really i wish i knew i honestly wish i knew
more about like sort of went into what went into it in the architecture of the chip and everything
i do too i mean we have we have a mutual friend who is very secretive and works for apple and
keeps hinting at the amazing things that he's doing i don't think it's anything to do with this but it like this gives you the idea of like
what level of thing can go down in a big company like apple like the amount of engineering effort
that they can focus on something like essentially ground rebuilding uh a processor you know they as
far as i know they they license the architecture for arm but nothing else
they like this is like essentially it's like um you know get it paying for getting the vhs
compatibility or the dvd sticker uh that says you know this is a dvd uh this is dvd compatible
but you're like i don't buy any of the parts from like you know jvc or toshiba or whoever
i've built one from scratch and from like literally from the component up it's compatible with arm
chips but it's not made by arm and i don't use any of their blueprints i didn't license their
blueprints i didn't buy any of their pieces or their intellectual property i just made my own
arm chip it's like the most bonkers thing to do.
And that's because they believe strongly that they could do it better than ARM could.
And I was going to ask you about this
because of all the people that I know,
I figured you would be the one
who would understand it better than anyone else
that I could talk to on an afternoon.
Well, yeah, but I just mean to say,
I'm sure our listener is screaming
into their headphones now going,
headphones, right?
It doesn't work like that.
No, exactly.
But so I sort of was confused because when I heard that Apple was building headphones now going headphones right it doesn't work like that no exactly but but so so it's i
sort of was confused because when i heard that apple was building a their own processor yep i
also heard that it was an arm process exactly wait a second isn't there a company that does that and
so what you're saying is is that they basically license like the like the the op codes effectively yes the yeah the the the the architecture is copyrighted if
you like and they license that and it says that like yeah if we emit bit streams that look like
this we will interpret it this way and that means that it's you know that's what arm is now arm do
license and sell you uh so arm have never physically made chips themselves.
That's not what they do.
They've always been IP-based.
So they have always given,
essentially they give out the plans to the ARM chip.
Back when they were part of Acorn,
they were just making it for themselves, right?
They had written Verilog or VHDL
or whatever they've written the processor in,
which is like a completely bonkers thing to even say out loud the processor is written in code which it is right
um the result of compiling that is literally the floor plan of where all the transistors go
and then you get you know your your essentially multi-level uh you know svgs of each layer and
you send them off to the fab and the fab i mean this is extremely simplified and not quite right but you know the fab takes each layer and then they just burn it one after
another onto a layer of silicon with all sorts of clever washes of set of things and bombardment in
between to like layer on all the different bits and pieces and then you get back a chip hooray
but you know you didn't make that chip you just had the design for the chip and you gave it which
is you know that's fine that's how most people do this now intel do actually make their own chips right um i don't know actually i'm not sure amd do but this is why partly this is why the whole
uh taiwan thing is such a big deal because almost everyone who isn't making their own chips goes to
tsmc which is a taiwanese company that make the world's chips and you know for all the political reasons that's that's kind of a
problem for some places um you know for the us in particular they've realized that if all the chips
that are being designed in the us get sent to one place a long long way away to be made and then
come back and they're hopefully the same thing that you sent them out as then that's maybe a
problem for security like if your military is depending anyway we're getting completely off track here but so arm have
always sold intellectual property you could license the chip from them and they would say
here's the source code to the chip and here's some like areas that have been pre-laid out if you like
um and then you can go and edit the code yourself. And so that's how the various manufacturers
for the system on the chip places are like,
oh, I'm going to add on like analog to digital converters.
I'm going to add on embedded RAM.
And then I'm going to send that off to the fab myself.
And then they're going to come up with an arm
that has two megabytes of RAM on it
and an army of analog to digital converters
and all this kind of stuff.
And now you've got a Raspberry Pi, right?
That's the kind of thing that you're doing.
Again, I'm probably missing. In in fact i am getting it completely wrong but like something like this um and then um but so those companies that were
producing arm machines were likely likely using some of arm's reference implementations of their
chips to to go to market so what you think of as an arm chip like inside my my android
phone i'm holding up to the camera right now um the the uh oh crikey now i can't remember the name
of the chip in it but you know the the the cortex or whatever it's in it um has been probably come
from arm modified by whoever's manufactured it and then sent off to be fabricated.
Whereas my understanding is Apple have gone,
that's nice and all.
We're going to do it from scratch.
We're going to build it from scratch.
Like it'll be compatible.
Right.
And in order to be compatible and for us to say that it's compatible,
we need to license it for all the reasons,
which I mean, I have no idea how absurdly expensive that idea is.
You know, like we're doing it all ourselves ourselves but in order to call it a car uh even though we haven't like licensed the car from
anyone else we have to pay all this fees to the car manufacturer and then we it's like it's got
four wheels that we built ourselves and like it's just yeah sorry i'll keep switching analogies here
uh yeah but they've done an amazing amazing job job. It runs so fast, as you've discovered.
Yeah, yeah.
It runs cold.
We're doing video conferencing at the moment, you and I,
and I've got my hand on top of it,
and there's no fan that I've ever heard come in on it.
It's absolutely amazing.
I mean, right, okay, small nerd thing here.
So ARM chips have always been extraordinarily power uh efficient
it was never really i believe the the intention that that would be the case but it just they
observed that what their design was very low power uh and uh the legend is the the very first arm chip the arm one that was delivered to acorn in i guess the
late 80s uh yeah sometime in the 80s uh they plugged in and it was plugged into a bbc micro
of course because that was how this thing was going to go down and they'd written a bit of
code to print out hello world and so they connected it all up and they turned it on.
And first of all, it worked first time, which is miraculous, right?
The fact that the board comes up and it just worked first time.
And the little Hello World got printed across the parallel port,
or sorry, the tube, the connector that came from it.
And then, having celebrated the fact that it worked first time,
they realized they hadn't plugged it in yet.
And that caused an awful lot of confusion the power rails were not connected but the parasitic um like this all of the the other things that were plugged into it for like the clock and all
the other bits and pieces were enough to power the circuitry because it was and they were like
oh my golly this is super this how low power is this
when it is like hasn't been fully plugged in and it's still there just because it's plugged into
a secondary computer that's like reading the lines and stuff so that's incredible again i've probably
butchered that story as well again you know comments welcomed to correct me in the appropriate
places but but uh yeah so ARM have always been efficient.
Ah, wow.
I mean, I was going to say, like, one of the great things I've noticed about my MacBook is that the battery life is ridiculous.
And I kind of had this.
I also have an iPad, which is an M1 chip.
And I think I basically never charged that iPad.
Like, I bought it, like, you know, a year ago.
It's just been slowly 1% every three or four weeks goes down.
Yeah.
Apparently it's absorbing energy from the surrounding.
Maybe it is.
Maybe it is. It's like one of those really high end wristwatches that are, you know,
like self winding by the very motion.
Yes.
It's incredibly, incredibly efficient.
So it's like,
and that was actually one of my complaints with the,
with the Dell laptop that I had, is that it would really chew through the battery.
I actually had a few times where I took it over a weekend, didn't plug it in, and I would come into work Monday morning and the battery would be dead.
And it had been sleeping the whole time.
But even the sleep power draw was so much that it couldn't last more than 48 hours.
Yeah, I've never been that sure about how good Linux is at putting it into really
into sleep mode as well.
You know,
there's so many,
there's this delicate dance between the BIOS and the operating system for
negotiating how,
which bits of Ram to keep powered up and which bits not to,
and things like that.
And then when to wake it back up again,
how to wake it up.
I remember,
you know, the, the having to go into a bios
on my one of my lenovo's and sort of have to put it into legacy mode so that it could talk to linux
rather than windows which of course is the default for these things right so who knows what who's
really to blame there but no it's definitely the case that uh with my lenovo which i use for my
personal stuff that i'll often have it on my lap uh with my lenova which i use for my personal
stuff that i'll often have it on my lap in in the other room and then i will find my lap is on fire
because something somewhere is taking up all the cpu and i don't know what it is probably chrome
yeah that is a fair point yeah cry which is not really close for either it's also the 330 tabs i
have open well yeah one of them is possibly you
know doing something stupid right like still in the google meet from two hours ago that's right
yeah it's like showing the conference room video and the audio yeah yeah it is like oh right i
should probably it is worth you know just just taking a moment and we should probably stop in
a second because we're getting to time here but but I'm currently looking at you on a screen, on a 4K monitor.
You're several miles away from me,
and Magic is both compressing the video on my side and sending it to you,
decompressing your video that's been sent to me,
then compositing it into a window on a 4K monitor.
I have another 4K monitor next to me that has like a waveform of this recording
going on and i know that if i pick up my mouse and grab the window i can move it around essentially
at 100 frames a second there's not any lag between the movement of the mouse and me moving this
picture of you right around and you just have to think how much data is being moved around
yeah whimsically by me like wiggling the mouse by holding down the way
like oh my gosh i remember rendering an mp3 audio file to an uncompressed format so i could listen
to it because my computer wasn't fast enough to decode mp3 oh yeah uh and yet now i get annoyed
when there's like 18 people in a room you know in a meeting room
and like sometimes they it drops out a bit or the fan comes on and i'm like oh really do we have to
like i'm decoding like 12 different video streams and compositing them and i'm running chrome in the
background oh yeah we're very we're very blessed we live in a blessed time for this kind of stuff
or you could also say spoiled that works that works too yeah yeah it's yeah it's sort of a
weird variation on um risk compensation psychology which is another thing we've talked about in the
podcast it's sort of the whole thing of like as you have more safety mechanisms people just use
those and the level of safety that they actually achieve remains constant because they just do more
dangerous things they have because they have a seat belt on and now they drive faster right
yeah and it's the same thing with with computing power is the more of it you give people the more
of it they're going to use well that's i mean yeah we we don't we definitely don't want to start a
new topic now but we had a dinner table conversation with my family the other day about exactly that
that with with the idea like all apps nowadays are you know chrome repackaged as a binary running a
javascript program that's communicating with a dom that's
being rendered and then drawn back to the screen rather than using like the operating system
widgets that would do it it's kind of natively um but you know it's convenient why would you
spend all this time to to you know squeeze everything down into uh into 512k of ram or
whatever one used to have to be able to do something right
when you're like ah just make an array of big enough how big is big enough i don't know four
gig you don't really think about it it's like that's fine yeah yeah yeah well i guess we should
uh we should call it at that point otherwise we, we're going to have the longest podcast ever. I guess it's not too bad.
I'm going to go back to converting my bash scripts,
calling uname in all the various places.
Actually, so one of the interesting things that I think is going to fall out of this
is I'm actually going to shift more stuff into AWS
that used to run locally.
Oh, interesting.
Because I sort of have this problem now of like,
okay, if these things are running on the laptop,
then as you were saying,
like we normally have this stuff like very, you know, it's running in a data center. Yep. Oh, interesting. remote execution in AWS in lieu of doing it locally. Because locally is much more local than it used to be.
Yeah, that makes sense.
So I'm going to go back to that
and hopefully get it done.
Well,
good luck with that, Ben.
And I guess I'll chat to you
I was going to say next time, as if
we don't talk to each other in between these podcasts.
Yes. Well, as we've alluded to several times it's about to be christmas we're at the end of the year here so happy holidays to you and i'll see you
in 2024 when this video with this video when this podcast comes out right exactly
you've been listening to two's compliment a programming podcast by ben rady and matt godbolt
find the show transcript and notes at www.twoscompliment.org
contact us on mastodon we are at twos compliment at hackyderm.io Theme music is by Inverse Phase.