The Changelog: Software Development, Open Source - xbar puts anything in your macOS menu bar (Interview)
Episode Date: June 21, 2021On this episode we're talking with our good friend Mat Ryer whom you may know from the Go Time podcast. Mat created an awesome open source tool for putting just about *anything* in your Mac's toolbar.... It was originally written in Objective-C, but it just got a big rewrite in Go and abig rename from BitBar to xbar. If you don't use a Mac don't hit skip on this episode quite yet! There are lessons to be learned for anyone interested in hacking on tools to make your life better. Plus, with this rewrite Mat has positioned xbar to go cross-platform, which we talk about as well.
Transcript
Discussion (0)
Welcome everyone. This week on The Change Log, we are talking with our good friend Matt
Reier, whom you may know from our GoTime podcast. Matt created an awesome open source tool for
putting darn near anything in your Mac's toolbar. It was initially written in Objective-C, but
Matt recently gave it a big rewrite in Go and a big rename from Bitmar to Xbar. Now,
if you don't use a Mac, don't hit skip on this episode quite yet. There are lessons
to be learned for anyone interested in hacking on tools to make your life better. Plus, with this
rewrite, Matt has positioned XBAR to go cross-platform, and we talk about that too. Big thanks to our
partners Fastly, LaunchDarkly, and Linode. Our bandwidth is provided by Fastly. Learn more at
Fastly.com. Get your feature flags powered by LaunchDarkly. Get a demo at
LaunchDarkly.com. And you know we love Linode. They keep it fast and simple. Check them out at Linode.com.
This episode is brought to you by Influx Data, the makers of InfluxDB, a time series platform
for building and operating time series applications. InfluxDb, the makers of InfluxDB, a time-series platform for building and operating time-series applications.
InfluxDB empowers developers to build IoT, analytics, and monitoring software.
It's purpose-built to handle massive volumes and countless sources of timestamped data produced by sensors, applications, and infrastructure. Learn about the wide range of use cases of InfluxDB at influxdata.com
slash solutions, network monitoring, IoT monitoring, infrastructure and application
monitoring. To get started, head to influxdata.com slash changelog and click get InfluxDB. Again,
that's influxdata.com slash changelog. Today we're joined by a go-time panelist and the world-renowned Captain Jack Sparrow impersonator himself.
It's Matt Reier. Hey, Matt.
Pleasure to be here, mate. I love your podcasts.
I listen to them all on the Black Pearl, mate.
See, I knew he would have to break into it if I just brought it up.
That's why I'm not allowed to see the doc.
Well played. Well played. Matt, thanks for coming on the show.
Thanks for having me. It's an absolute pleasure, and I i do mean that i would say similar to jack sparrow go time would not be go
time without matt the same way that the pirates of the caribbean would not be what it is without
jack sparrow quite a compliment quintessential piece to the puzzle that's for sure well i have
so much fun doing it and i meet such interesting people and you can tell we have so much fun i
think when you listen to it.
So it's just a kind of joy really to do.
So I appreciate,
I appreciate doing it.
The number one question we ask is how'd you find us?
And it's usually by,
we have go time.
Hmm.
There you go.
Yeah.
Very often,
at least not usually,
but very often.
Right.
Okay.
Once in a while,
once in a while,
actually twice now.
We've walked that one back.
Yeah.
Two people actually.
Well,
we're hoping,
we're hoping somebody will say it soon. You've gunned down a couple. No one's ever said it. Every once in a while actually twice now we've walked that one back yeah two people actually well we're hoping we're hoping somebody will say it soon you've gone down a couple no one's ever said it
every once in a while the next thing they see after that is i don't even write good i love
that show that's the best i have had people say that to me yeah isn't it yeah what are they doing
it's like we fooled you that's your problem yeah oh man. What are you coding? Not Go, okay?
But I listen to Go time every week.
Yeah.
Well, that is nice because we do try and cover subjects beyond just the language as well.
And there's so much in tech to talk about.
So I do like the fact that we do that.
We did one recently on TDD, test-driven development.
We really didn't talk about Go very much at all it was um but it's the
cops the ideas that just apply everywhere yeah well that's why the community lens to that show
was very important to get to because that lets you do that like what is the community really
would appreciate hearing from these people that represent this community that you know thrive in
this community i think that's the secret sauce, in my opinion.
That's what I love most about the show is the community aspect of it.
It's not just, you know, sure, you are a good centerpiece of the show and you bring a lot to it, but it's not just you.
It's a cadre of awesome people involved,
and you bring your own perspectives and your own, you know,
thoughts from the community and your own insights and whatnot.
That's what makes the show really special.
Yeah, like I said, I love doing it.
So one thing I've learned over the last couple of years that you've been on the show is that
you came to go in kind of a strange way it seems strange to me which correct me if i'm wrong but i
think like you wanted to use app engine and app engine supported go and maybe python i don't know
maybe c++ but you're like i'll take. Is that basically the way it went down?
Because you've been using Go a long time, so it's stuck.
Yeah, it was before it was even released.
And it was Java or Python were the two options,
and I didn't know either of them.
You also didn't know Go, though.
Didn't know Go, but Go had a little EXP experimental badge on it, which is very ent know, very enticing. And I couldn't resist it.
Funnily enough, I was able to build something very quickly. And that's a nice thing as a
developer, it gives you a confidence to carry on. And I kind of like get a bit hooked on building
things. And you get a payoff very quickly when you can deliver things quickly. So that's what
happened. And it just kept going.
And yeah, and because the thing I was building was also kind of perfect for Go,
it really fit into what Go was, I guess, for originally.
So yeah, it was just nice.
It's just kind of lucky.
And I really got very lucky.
That's why I'm on Go time is because I've been around for ages.
Yeah.
And you know. How long? How long now have you been writing Go? on Go time is because I've been around for ages.
How long now have you been writing Go?
It is about 10 years. It might be a bit more than 10 years. Go isn't even that old or it might just be. It's about 10 or 11 or 12.
Our birthdays are very similar. It was around, because we interviewed Rob Pike, I think it was episode
3, I want to say. I have to check the catalog, but this was so
early days were like you
know should we even do this show it's a new language from google yes of course but i mean
like i didn't know who rob pike was that's how green i was at the time and it was right around
the time we were born as a podcast the change all the way back in 2009 and that was the same
time frame yeah that's amazing isn't it and i remember the first gopher con in 2014 and i
happened to be living in denver colorado at the time and that's where the conference was so it
was just like down the street so i just walked down the street and went to this conference and
just met all these kind of great people brian and eric and the team at GopherCon. And I think Kelsey Hightower, I met there as well.
You know, it was just like a group of nice people. And one thing that stood out to me is they made a
point of diversity. It was something they kept repeating on stage. You know, they wanted to
make the community a welcoming place for everybody everybody and that's something that's always been important
to me so that really resonated and yeah it just felt like yeah this is like this is the right way
to do it we definitely felt that love too because neither adam nor i are gophers in the sense of go
programmers but go time was the second show i mean that was the one that we launched into or was it
rfc those were both around the same time but go time was definitely was first okay second first second first second because we felt the love too
specifically from brian and eric and many others in the go community it's like this is a really
welcoming fun group and they want us here and so hey let's do a show you know with and for them
was really why go time started yeah that's great And I actually think GoTime has become quite an important part of the
community as well. That's why it is really an honor if I'm being genuine for five minutes.
You have to say it again, because we're never sure with you. Is it sarcasm? Is it
straightforward? This is genuine here.
You're eating into the five minutes where I'm going to be genuine.
We don't give anybody five minutes you got two and a half okay yeah well i think go time you know has become a big part of that story as well and
you know it's nice to go back and listen to random episodes in the past as well that's a very fun
thing to do and it's all just kind of open and free for everyone to listen to i think it's great
so i'm really glad you did start it so are we yeah yeah yeah I think even
it's also not on this side to be a steward of that thing you know like that importance you know I
think that's we hold that responsibility very dear to our hearts to deliver that yeah you can tell
well I'm not being sarcastic when I say go Time today wouldn't be what it is without you because you invented the unpopular opinion segment, which really has become kind of a staple of the show and something that brings people to listen who don't care about Go or Write Go, but they want to hear about these unpopular opinions.
Yeah.
That was all you, man.
That was all you.
Yeah.
Well, I remember, you know, it was a kind of meme on twitter
which it still is yeah and it was a sort of this idea it's a very tongue-in-cheek segment there's
something cheeky about the spirit of go time i think that i think people do appreciate and i
get feedback in that vein occasionally so yeah it was and then you know making the theme tune
like taking this silly idea way too seriously.
Exactly.
I always find to be very funny.
So seriously that we take polls to find out if they're actually unpopular.
You know, like I say in the intro, this is very serious business.
You know, we got to find out how unpopular these opinions are.
Yeah, that's it.
That's it.
It's unpopular opinions.
And if your opinion is popular, you've really failed.
Yeah, you're really not good at this.
Yeah.
Well, I do hold a record as one of the most unpopular, unpopular opinions of all time.
So I do like to hold that over your head.
Champion.
I have one of the most unpopular, which should I just tell them what it was or should we
hold out and make them go listen? Yeah. So my unpopular opinion was that I believe that JS party is a better podcast than go
time.
And I make a great case for it on the show.
So maybe we should link that one up.
Yeah.
But the go community did not agree with me whatsoever.
I lost a segment on there.
Do you know?
Oh,
my part,
60,
90 seconds.
Yeah.
Oh,
play the right now.
So I'm not going to come on a podcast about Go
and say that JavaScript is a better programming language.
I'm no fool.
I want to walk out of here alive.
But I will happily start a proxy war
by saying that JS Party is a superior podcast to Go time.
You're off the show.
You're off the show. Let me quantify this a bit. Okay. I have some evidence. So more is better. Okay. We have more panelists. We have
more male panelists. We have more female panelists. We have more variety. We play game shows. We host
formal debates. We write and rehearse poems. We explain things to each other like we're five.
You guys don't explain anything to each other like you're five. Go time records on Tuesdays. One of the worst days of the week.
JS party records on Thursdays. Thursday is closer to the weekend, obviously better.
We cover more topics. Go time is about Go. JS party is about JavaScript and the web.
That's twice as many things. That's cheating. That's cheating. That's twice as many things.
And we know the web is huge. So tons of of variety you can't take http to a js party so in review we do poetry we have
more awesome panelists we have more variety it's on a better day and this is the big finale point
you're gonna like this one js party has 100 less matt reyer means we've really cut down on those awkward silences.
Wow.
That was quite the pitch.
It was good, wasn't it?
Really well said, I would say.
Really well said.
Wouldn't you agree?
Yeah.
Well, it's funny.
It's funny because I think that also,
as an idea, is quite funny of tech wars.
Some people really do take it very seriously in arguing about languages and things.
And, you know, go and JavaScript together.
You can make some amazing things.
So, yeah.
But the JS Party is a good podcast.
But I don't know.
Better podcast.
Not as good as.
So that's the thing, too, on that front.
The wars thing.
Like, I want to just scream, same team.
Right?
This war thing, it's good to compete.
Competition is great.
So I'm always in favor of that.
But the warring, the actual fighting, sometimes even name-calling...
It's too much.
It doesn't help anybody, really.
We're here to innovate the future of technology, not win the individualized war.
Yeah, yeah.
I think it comes from a place sometimes of, if you're inexperienced, you don't want to
waste your time with something.
You want there to be a language that's the one to learn so you can really focus.
And so I think people are drawn to these tech wars for that reason.
I know lots of examples of that where people because they're new they get sort of caught
up in it and i think with experience when you've tried different languages and you realize that
some are better at some things than others and everything has its place and sometimes it might
just be what you find fun is the important thing yeah and then once you've done that you realize
that yeah it's quite silly to be sort of fighting over this.
And we all batter off when we use them together in the right way.
Well, maybe something that speaks highly of the community then is that many people don't know this, but I produce both of those shows.
And I also contribute to both of the Twitter handles.
And I've been trying to start a gang fight for a while.
Matt, you know this.
I've been trying to get JS Party versus GoTime to be a thing.
I was thinking, remember that scene
in Anchorman where all the rival
weather guys show up and the rival news
people show up and they actually have
a slash and dash in the
back alley? Yeah, in Anchorman.
I'm like, let's get that going between our podcasts
because that would be great for
interest. And no one's biting.
So I think the actual warring
between the JS group and the Go group
is like at surface level, but there's no teeth there.
Yeah, we love each other, really.
Yeah.
Rick killed a guy.
There you go.
That's seen it.
Nice reference.
Just to loop back a little bit,
I did confirm episode three of the change log.
It was in fact titled
The Go Programming Language from Google
with Rob Pike, principal engineer at Google
and co-creator of Go.
Way back when.
Confirmed. Go back and listen to that
awesome but terribly produced show.
It probably sounds terrible, but
great content, obviously.
Different show back then, for sure.
Well, Matt, we didn't bring you on
here just to talk about Go time for the entire show.
We brought you on to talk about Bitbar and Xbar,
which are written in Go.
And one is a rewrite of the other.
Let's start with Bitbar.
Let's start with the origin, what it is,
why you made it, what it does,
and then we'll talk about the rewrite
and where it stands now and all that good stuff. okay well it was many moons ago i don't know exactly how many
moons but it was probably around 2014 bitcoin had just kind of come out and i bought some bitcoin
and i had actually at one point 16 bitcoin so you can calculate holding no i'm So you can calculate. Are you still holding? No, I'm not. You can calculate. You wouldn't be on the show if you were.
Yeah, you wouldn't need us.
I'd be on a much higher class
podcast right now. That's right.
So it's 2,555
moons, just so you know. Thank you, thank you.
That's good.
How many US dollars though? Or sorry,
British pounds. I'm sorry, euros.
35 million. 47 million
euros. So you had 16 Bitcoin and you must have wanted to watch the price of those Bitcoins in your
menu bar. I'm putting this together. Is that right?
There you go. Exactly right. So I want to just see the Bitcoin price in my menu bar. And there
wasn't really a way to do it. There was no app to do it. So I started to build the little project
just for myself. And that's why it's called BitBar, because it comes from Bitcoin.
Gotcha.
And I realized that I was able to get the menu bit done.
I was doing it in Objective-C, which I didn't really know.
So I was able to get the menu bar pieces working,
but I couldn't make a web request to save my life in Objective-C.
I'm not kidding.
If you look at the code, you need to do it. I've done a Objective-C. I'm not kidding. If you look at the code you need to do it.
I've done a little bit of it.
It's not straightforward.
Yeah, it's at least, maybe it's 15 lines of code if you do it properly.
And I wasn't doing it properly.
So it was just sort of a pain point of doing that.
So I thought, well, I know how to do this with curl.
So maybe I'll just do that and I'll learn how to run a sub process so you wouldn't do
that i think if you knew what you were doing no but what that did is it gave a sort of abstraction
and meant actually that you could write other scripts which the output of which could go into
the menu bar and so then i thought yeah that's quite nice because, you know, it's not just what I want this for.
In theory, other people could write it or I could just write other ones myself. And so I open
sourced it and I used it and a few people joined in and added some features. Actually, they added
some great features like image support and colors and different fonts and things and then i think it was 2016 it popped into the top of hacker news
and suddenly then it sort of went crazy and got all this attention and just sort of randomly you
know at this point it was a couple of years old and it's just been sat there dormant as far as i
knew you'd sold your bitcoin you moved on yeah didn't you still use it to track anything else yeah i use it for lots of things i
mean back then 2016 oh yeah probably because there were always little things that i just would you
know at the time i what i cared about you know and it's very hackable because it's basically
if you write an executable any executable in any language you like as long as it prints to standard out each line becomes a menu item in the menu and there's a
special way that you can say cycle through these items in the actual menu bar and then show these
items in the drop down and then people added support for if i click this item then i'm going
to run some code and do some action you you know. It was always very hackable.
And that means that it attracts developers' attention, you know, because it's a fun thing.
And it's almost like the boring bit of figuring out how to do the menus is done for you.
And you just get to use your knowledge of something else to then build something.
And that's what happened when it got to the top of hacker news suddenly
there was this influx of plugins people writing all sorts of things and solving all kinds of
crazy problems well that had to be a pleasant surprise how many times did you have to submit
it before it popped in i just missed it yeah no i did yeah actually every day once a day every day
finally in 2016 it got on heck i actually don't
think you can do that can you i don't know let's just submit it once now true true duke true it
might actually go in but it probably gets buried immediately yeah yeah it's not my style i think
there's a time there's a statute of limitations if you submit the same url that's been submitted
recently i'm not sure what recently means it'll just upvote it so it'll count as an upvote which makes sense yeah that's
cool yeah no it was true duke on hacker news posted it true duke yeah one of your sock puppets
don't know who that is yeah so what kind of user base did that came out of that because a lot of the hacker news folks you
know they kind of hit it and quit it you know it's like big old interest and then here today
gone today but you have substantial contributors and it like you said it's a open plug-in kind of
infrastructure because as long as you can create a program that
writes the standard out in the format that you specify then you can write a plugin pretty easily
so is that what really got all these people writing plugins yeah i think so i think it's the
ease at which you can contribute something and the immediate payoff you get it's that same thing
that attracted me to go the fact
i was able to deliver something very quickly i think that also applies there and you can kind
of do it at development time you can make a script and iterate on it and refresh it and you just see
it live updating and stuff so the development process is very easy and that was kind of an
accident if i'm honest i've since learned to really pay attention
to developer experience, user experience,
even of dev tools or maybe especially of dev tools.
But I think it was a bit of a got lucky,
really, with that design.
I love that happy accident
because it was like your lack of Objective-C skills
accidentally created a very nice abstraction that you
probably would have bypassed. Right? Absolutely. And you're like, wow, this is actually pretty nice
layer. Because I can just shove whatever else I want in there as long as it conforms.
Now I cannot just do Bitcoin. Yeah, that's it. It's kind of like taking a weakness and sort of
owning it and you know what I mean turning it into a strength and that's the
thing like often you see people they sort of like want to either compete or they feel like they
don't know enough to contribute and so won't and the lesson I think there is that sometimes
do something different you know if you know something maybe you can contribute in a different way it
doesn't have to be the obvious way and i think that's quite nice as well so step back think
outside the box and see if there are other ways you can do it so yeah i don't know maybe that was
kind of a weakness of mine where it just kind of turned into a strength
what about that day though like the the hacker news day where it was popular
how did you find out you know how did you react you react, you know, in terms of like, did you
dig your heels in and like get back in with the community and start writing code again?
You said it was dormant.
So kind of how did you react to this new claim fame?
Yeah.
So there were 65 pull requests in one day and I was getting an email for all of it.
So that's how I found out.
I just suddenly had loads of spam. And that was a
big surprise. I had to take a day off work because, you know, I wanted to reply to people in the
community and, and also wanted to get the plugins merged into the repo so that other people could
use them. So this instant community sprung up. It wasn't something that grew organically.
It was all of a sudden,
there were lots of people using this
and lots of people contributing to it.
So it was great.
It was like winning the lottery or something
and very exciting,
but also kind of nerve wracking.
And the code, the original code wasn't great.
I really didn't know Objective-C very well at all.
People even submitted fixes where, you know,
you have to manage your own memory then.
They've since added the ARC stuff,
the automatic reference counting for objects and memory allocation.
They didn't have that.
So you have to retain objects and release them at the right time
and things like that.
So that's actually really difficult to get right.
And so I think people also contributed there and fixed things and helped out you know so yeah i
was kind of a bit nervous and a bit kind of worried about that but also just basically very excited
that there were all these plugins and i was excited by what the plugins were doing it was kind of
people building amazing things with this and it
was great this episode is brought to you by our friends at launch darkly feature management for
the modern enterprise power testing in production at any scale here's how it works launch darkly Thank you. end users. When you're ready to release more widely, update the flag status and the changes are made instantaneously by the real-time streaming architecture. Eliminate risk,
deliver value, get started for free today at LaunchDarkly.com. Again, LaunchDarkly.com. so go back to 2016 you got all this excitement you got all these people writing you have basically
i get i would think it's like a relatively finished piece of objective c software
that can read from any kind of executable why rename it why i know that it's a rewrite but
why rewrite it this is like you know joel spolsky's
gonna be mad at you or who was it that wrote the big rewrite post was it joel yeah so i mean you
know second rewrite syndrome or whatever it's called don't do a rewrite just keep on keeping on
yeah but you didn't do that no no i think i i kind of know where they're coming from with that. But if the language dies, maybe do a rewrite, you know.
Okay, well said.
Yeah. Objective-C really, you know, I started doing Go, obviously.
So I was just spent all my time on Go and not doing Objective-C.
And then Swift came out.
So then people are using Swift instead.
And so not just me it was
i couldn't find contributors to help maintain the project and there were some issues in some cases
and as the operating systems changed i was gonna say that's gotta be the problem right yeah little
things like the vertical alignment of the text suddenly was different and needed work and turned out to just be not easy to solve
especially if you don't know objective c so it kind of started going stale and we just weren't
able to keep it alive and so yeah the decision came as like you know people were asking for it
and there were other projects that supported the bit bar plugins the now called x bar
and so you know there's definitely people still liked it and were still using it so it seemed
like the right thing to do and we did a go time episode with the creator of whales which is a
go powered and javascript see best friends front end it has it's a desktop app for desktop applications what
does that mean is that that means yeah i think so explain that please it's a framework for building
desktop applications using javascript as the front end and go as the back end and you know
it uses a web view and with clever styling and some other tricks it really you know like you can do transparency in
the window for example so it looks and feels like a real native app on the mac and so we did that
episode which you can probably go back and listen to with lee anthony and i was chatting to lee one
day on twitter and you know he was telling me about Wales to the rewrite that he was doing.
And I asked him like,
what do you think we'd be able to put together a desktop app for this and
interact with the menu bars and things and support this.
He was a little tipsy because he's in Australia.
He lives in Australia.
So even as he's from Wales,
not the project from the country Wales.
The project Wales is...
Which is why he called it Wales.
It is.
Although, yeah, because it's like rails.
It was like web-based rail.
Yeah.
So I think it was that.
So I was texting him and he was tipsy, I think is the polite way to say it.
So he was agreeing.
He was like all over this idea of loving it.
And I was like, okay, well maybe uh wait till the morning and see if you still feel the same and then you know
about 10 hours later i just got i just got a message it just said in in all caps i regret
nothing and so yeah we just set about we set about bill writing the rewrite and we got to write it in Go.
So that's nice.
That means now, you know,
the X-Bar project now is maintainable
and we can work on it and it's well structured
and it makes sense.
And, you know, a rewrite is, I think,
often better than the first version anyway,
because you learn so much from that first version.
So it is, you you know it kind of manifests
that idea and it looks nice you know and it's we built a plugin browser which you know because
it's a proper desktop app it has transparency in the window so it just looks gorgeous and the
project came back to life so loved it that's cool so I think project size also matters when it comes to the rewrite.
I imagine a lot of Bitbar was the plugins,
which were written in non-objective C.
And I'm assuming you just adopted the same format,
so those probably all work with Xbar.
Is that correct?
Yeah, absolutely.
One of the goals was all the plugins had to work
because we didn't want people to write have to
rewrite or change their plugins in any way so that's something i learned from go is that backwards
compatibility promise is so meaningful it's not just a nice to have it's actually takes more effort
but it's so worth it and it's kind of showing respect to everybody that's contributed to the project. Right.
So, I mean, people warn against the big rewrite, but small rewrite, not so bad, especially
when the first version, I mean, it's kind of like you just shipped a prototype for a
while.
I mean, we're supposed to throw away our first versions, right?
Yeah.
That's one of the problems with a lot of software is we write our prototype and a prototype
is not meant to be the production piece of thing, right?
It's supposed to be like the first version by which you build the real thing.
But we tend to just put those things into production and just build and add on to them
over time. It's smart to write a thing. That's why they have the term spike, right? Go spike
out a thing, proof of concept or prototype, and then write it for real. Now yours was just a
really long, you could think of it like a really long one of those and then when it came time to take it seriously after it has a user base it's found niche etc now let's do it take what we learned
and let's do it in a language that you're very proficient in and do it right the second time
so i think that's wise yeah i agree i think that probably is a nice way to think about it
i mean i like rewrites actually hemingway famously said there
is no writing but rewriting or something like that where when you're writing something the
first version of it really isn't yeah a thing yet you have to that quote looked like the first time
he wrote it yeah it's probably awful it's probably like it's probably awful writing but not writing
but do it twice it's probably that you know the man didn't quite
yeah exactly yeah he couldn't form well a lot of our thoughts are formed through the process right
yes that's where you're getting that's angry that's where i'm getting yeah he was also famous
for the shortest story i believe ever for sale baby shoes never worn oh it's a little bit dark
so sorry about that no but we're gonna kill the
mood adam no but that's kind of beautiful you know that's the thing though people you know
writing code and writing words though is very i think you have to draw a parallel there because
i think famously hemingway also said everything you're always writing just get it out there
whatever it is just get it out there because it's it's like you know temporary art until it's perceived and executed upon and it can actually be you know iterated upon
you know others can view it you know it's it's something it's it's substantial at that point
yeah and you know we make this big deal about rewrites and i think contextually as you said
it does make sense yeah the argument is contextual yeah Yeah. You just learn. It's what you learn in that process. And honestly,
even to the point where I really resist designing software too much, there is obviously value in
designing software and you should be designing software, but you can definitely very easily
over-design upfront. And then you're sort
of locked in to these ideas you had at the beginning when you knew the least. And so,
yeah, I think through that process and the learning that pops out of that and the opportunities that
pop out too, I didn't design XBAR the way it was. I got there because I tried to make a simple web request using Objective-C
and I couldn't do it because of NSURL request object didn't make any sense. I'm not kidding.
Oh, it's a nightmare. I know you're not. That's funny. And yes, I took the opportunity then.
So is Wales cross-platform then? Yes, Wales is cross-platform, which means XBAR will be cross-platform.
And that is also very exciting, yes.
Yeah, so you get that for free.
So Bitbar and XBAR today is a Mac OS menu bar app, right?
Yes, that's right.
But in the future, it will become cross-platform.
And of course, all the plugins won't necessarily make sense
because a lot of them are specific to a Mac.
So there will have to be some way,
there's actually metadata inside each plugin.
And I actually wouldn't mind spending some time
talking about the design of the API as well,
because it's-
Yeah, it kind of has its own benefits too.
But there's metadata in there,
essentially inside the plugin somewhere.
It can be anywhere in the code, usually in comments. can't see it and of course the comments can look like
anything because you can write plugins in any language so we'll probably have metadata that
says which platform it's for for the plugins and we'll be able to then maybe the multiple platforms
because it doesn't say it could be multiple platforms either one plugin yeah so x bar parses arbitrary
language comments in order to extract metadata that sounds like a bad idea yeah it's does it
well it works it sounds harder than just like well why don't you just define a format for
metadata oh no there is a format but it's like xml tags but they can just appear anywhere in
the file you know it's very okay i
thought you meant you could just willy-nilly any sort of put a comment wherever you want
in because like you said different languages indicate comments in different ways okay
yeah that doesn't sound quite so bad it's not so thank you for clarifying yes that's all right but
that's nice because in xbar we added like variable support one of the things that lots of the
plugins had was if you had to configure something,
like if you've got one of them as a currency,
it shows you the currency rate.
So you edit the script and choose the currency that you want to see.
Well, what we wanted to do is make that user experience a little bit better.
So we added explicit support for variables,
which are just other environment variables, really.
You define them in the metadata.
They show up in the UI and let you edit them and then when x bar runs the plugin it sends those
environment variables in you use them in the script and that's now how you do configuration
things like that so okay that's a new feature that came from x bar that we didn't have in bit bar
so tell us more about the feel and the process of writing Go with whales in order to
produce what it will be a cross-platform but is a desktop application you said it's like web
technologies can you tell us what that felt like to use whales and to build a Go project that's
going to run on a Mac like as a binary or maybe even just the distribution and stuff would be interesting. Yeah, yeah. Well, fortunately, the whales project does a lot of the
heavy lifting for you. I mean, you essentially have your own, you can use your own UI frameworks.
And I quite enjoy building UIs as well. So I got into Svelte, which is a UI JavaScript framework.
And it has a similar philosophy as Go in that it tries
to be minimalist. It doesn't do everything you can. It doesn't give you all these complicated
features. It gives you a small feature set, just enough, and therefore it's kind of easier to use.
And it also has this other effect that I'm sure is well known, but this basically does a lot of its work at
compile time, not at runtime. So in theory, that makes the projects much faster when you use them.
And to be honest, you do notice that I think it's very snappy UIs when you use Svelte.
So that was it. Frontend was Svelte. There's an API that Wales gives you. You can just expose go
methods to the frontend and call them in JavaScript. It's all transparent, so it's very easy.
And it's kind of like Promise API. So you make a call to the backend, you get back a promise.
If there's an error, then you use the catch to handle it. So it's very natural like building a
web with a server.
But the server just happens to be running locally on the machine.
And then the Wales tools packages it all up
and bundles it together into a single binary.
And then you run it, and that's it.
There's a bit of work to do, like to turn it into a Mac app.
You have to put it into a certain folder
with extra bits of metadata and things. It's quite trivial and the wales project really helps do
that so it felt very natural to me because i build a lot of server client applications like that
yeah it's a joy to use really lee had to do work in wales to support menus because it wasn't a
priority if you think about a desktop app you know accessing the menu bar is not really something that most apps do so one of the we made a deal and he agreed to add
support to whales for that and in exchange i sent him a macbook m1 nice macbook air
all right good deal that's a good deal that's a good deal for both of you good sponsor right there
well he also wanted to make sure whales worked natively on m1 so it was really a good kind of
win-win all-around yeah situation you know what i mean so that was nice and he's a genuinely
lovely bloke as well which helps doesn't it when you like people And he regrets nothing. He regrets nothing. I've got proof. That's the best email subject ever.
That's awesome.
Yeah.
So you had all these BitBar users.
I know some big Mac people.
Like I read about,
I think it was BitBar first,
and I already knew you at this time,
but I read about it on Jason Snell's website
who is a Mac-based writer and journalist and has a big following his writing
how is the reception to xbar has everybody moved over is everybody excited was there any like
laggards or complaints what's the situation with xbar well everybody is happy to just switch over
because if you're a user of bit bar x bar is just had feature parity
the same thing yeah yeah so there's no reason to not like it yeah and you know the other thing that
happened which was very exciting was this little bit just back to when it was bit bar
years ago when i was young i used to get this Amiga format magazine, which was a computer
magazine. It had floppy disks on the front and it had like, you know, you give you free stuff and
you could have programs inside it and all sorts. And this was like, I loved this. I think for my
birthday, I got a subscription to this magazine. So every month I remember my dad would always,
it was worked in the mines. so he'd get up very early
so he'd usually get up and get the post and then leave the magazine by my bed so i'd always
remember like very tired but just so excited that it was there i knew it was there and
i couldn't wait to wake up but you know it was too early and so i've kind of listened lots of nostalgia around
that particular magazine for that reason and then years later i didn't really bother with magazines
because the internet tells you all the things so and i just randomly bought this magazine one time
and was just flicking through it and i just opened up this double page spread on bitbar
and it was just like explaining how to use it and how to write plug it and i don't see that was like
a thing that was like a big deal for me then that i'd got into this magazine was it it was mac format
then so but it's the same publisher i don't know if you have that in the u.s that you have mac world that's about
mac former but yeah it's future publishing i think maybe uk based but well i just that had to be
quite a feeling yeah it was i mean i couldn't believe it it was uh i mean i don't really know
how it feels actually it's that it's one of those i can't really articulate you frame it did you
hold on to it is it underneath your pillow what what you do with the artifact because i took a picture of it and then that's it yeah and then my wife
threw it out by mistake oh yeah yeah at least you got the picture i got a picture yeah yeah
exactly that's all i'm not very sentimental really so you know don't mind that. But just the fact that it was in there kind of blew me away.
So, but to answer your question, yes, Xbar comes along and people like it.
Yeah.
Awesome.
Yeah, I actually got the, you know, the CEO of GitHub, Nat Friedman.
Nat Friedman.
Yeah.
Yeah, Nat Friedman got in touch through a friend and wanted to have a chat and he
just loved it loves the project like this was also very nice another one of those moments
and he liked what he said was like the taste of the design of those plugins and it's because of
things like you know you have to choose the refresh rate of a plugin. And you do that by including
it in the file name. So you can do like five seconds, you know, file. So if it's like some
clipboard plugin, it'll be clipboard.5s.sh if it's a bash script. And that will refresh every five
seconds. And the fact that you can write plugins in any language, you know, it's like this kind of like very minimalist API,
really, over what you can do.
So that was another moment that was quite meaningful when,
you know, because GitHub is, I think, a great platform for developers.
And so that felt like that was some good kudos.
Validation, yeah.
Yeah, I like that.
Yeah, I mean, paying attention to the,
not that this is a little project,
but it's not like Kubernetes or this gigantic community.
It's a indie project, indie dev,
with its own motivations.
It's not like this super enterprise thing
and he's only paying attention to the big things,
so to speak, monetarily.
Yeah, I think that's right.
And I think the fact that it enabled developers, which is obviously a big focus at GitHub,
but it was something you mentioned was it's almost like just by making a different decision,
which in the beginning was just happened by accident.
But just that change in the way that you think about it
unlocks things for other people and enables other people and then that multiplying effect that you
can have always appealed to me and Nat also mentioned the same thing and that was I like that
I like the fact that you can do this almost the same work that you were going to do anyway,
but just with that attitude or that slight twist on it,
you can unlock things for others and enable others,
I think is nice,
especially for in open source projects.
This episode is brought to you by our friends at Square. Thank you. that calls Square APIs. API Explorer lets you test your request using actual sandbox or production resources inside your account, such as customers,
orders, and catalog objects.
You can use the API Explorer to quickly populate sandbox
or production resources in your account.
Then you can interact with those new resources
inside the seller dashboard.
For example, if you use API Explorer
to create a customer in your production
or sandbox environment, the customer is displayed
in the production or sandbox seller dashboard. This tool is so powerful and will likely become
your best friend when interacting with, testing, or playing with your applications inside Square.
Check the show notes for links to the docs, the API Explorer, and the developer account signup page,
or head to developer.squareup.com slash explore slash square to jump right in. Again, check for
links in the show notes or head to developer.squareup.com slash explore slash square to play right in. Again, check for links in the show notes
or head to
to play right now.
So to me, the coolest thing about this project is how extensible it is.
Two aspects.
First of all, there's hundreds of plugins already written to just be used. So if you want something in your menu bar, likelihood of it being in there is high.
Secondly, if it's not, you can just totally hack it together yourself, right?
So we talked a little bit about the plugin architecture, if it's not, you can just totally hack it together yourself, right? So, we talked
a little bit about the plugin architecture, how it all
works. I wanted to play a
little game I call, Can Xbar Do
This? So I've compiled a list.
Some of these things are existing
plugins, so it's part quiz, does Matt know
his plugin directory?
And it's also part honest question,
can it do this? Can question. Can it do this?
Can I get it to do this?
So I'll hit the list here, Matt.
These are kind of yes or no questions,
but feel free to elaborate.
Okay.
Yes or no won't cover it.
Can we play some dramatic game show music
in the background, like a bed?
Let me just check the budget.
No, no, we cannot.
I'm sorry.
Okay, fair enough.
All right.
Can XBAR do this?
Number one, can it show me the charging status of my BMW?
I do believe it can.
I think I've seen that one.
That would be correct, except for I do not have a BMW.
So the answer is actually no.
But yes, it can do that.
Yeah.
Can it show me my Robinhood portfolio?
Yes. I remember merging a robin hood plugin so yeah that's correct yeah i'm on i'm nailing this to us yeah you are an ally two for two can
x bar show me my current weight oh well it's very polite application so i, so I don't know about that.
Can it?
I don't know.
No, I don't think so.
I'll say no.
I don't think so.
Now, the question is, how would we get that done?
I think it's possible.
Where would you get the weight?
Some sort of smart scale?
I think you would have to interact with a smart scale for sure.
And some kind of API, maybe, to access it?
So that means the next one is,
can it show me your current weight?
I guess that's also false.
Okay, next one.
Can it check my Gmail for me?
Yes, there's lots of email.
In fact, email has its own category.
You can see all the plugins at xbarapp.com
and I made a kind of menu bar
that contains the category of all the
plugins it just mirrors the repo so it's like it's very lo-fi but yeah there are lots of different
email things in there too so yes i think it's yes can xbar buy and sell bitcoin each time elon musk
tweets you could make it do that if it doesn't already
yeah there are also loads of crypto in fact that might be the biggest area probably yeah
because crypto people gotta know their they have to know their numbers in real time
yeah because you never know when one tweet is gonna destroy your future you know what's ironic
to me about crypto holders is they all talk about how they're long-time holders,
but they have to know the price for every five minutes.
It's like, well, if you're holding for the long term, what's the next five minutes matter?
It's all about marketing at that point, really.
Can XBAR Rick roll me in 4K?
I guess the answer would depend. Can it play a YouTube video?
You said there's image support.
Yeah, it supports images, not videos.
Okay, so feature request.
Can XBAR generate passwords?
I haven't seen that.
Ooh, your first miss.
It actually can generate passwords.
There's a password generator plugin at xbarapp.com
oh i thought that was a cool one yeah you know how does that grab a new password lots of times
i don't know i hope it's running where's that one under utilities maybe or tools
now here's one password generator thought there it is come on matt come on man can it show me
how many people are currently on changelog.com?
What, you mean the Google Analytics or some other analytics?
Well, we use Plausible, but does it support Google Analytics?
Yes, it does support Google Analytics.
Nice.
And I believe Plausible has an API now,
so we could probably wire that one together.
Yeah. What was the question again?
Can it show how many people are currently on changelog.com?
What if that was right in your menu bar?
Yeah, there you go.
That's nice.
Talk about obsessing over numbers.
Yeah, that would be cool.
Can Xbar tell me random dad jokes?
I don't think so.
You're absolutely incorrect.
It can.
Well, it has a dad joke on it.
Oh, that's amazing.
Yeah, I know.
That's the most intriguing one to me.
It does so much.
I know. Yeah. Actually yeah actually honestly you wouldn't
believe some of them the clipboard i could i was very impressed there's a lot of clipboard well
there's a few clipboard related plugins which do great things one of them's a base 64 encoder so
you can copy some file or you copy something and then you know it runs periodically so i think they
have it to run every second or whatever it is so then anything in your clipboard it will base 64
in code and then you can just go and copy it immediately from the menu that was one the other
one was the clipboard history which has been in there for a while which shows you your last 10
copies and pastes yeah Yeah, that's great.
And you can switch between them as well.
That's nice.
I thought that was just really clever because that's like almost an application in its own right.
I was going to say it's replacing
because I have an application,
I think it's called CopyClip,
which is basically that functionality alone.
And it has some niceties where like
you can set how many it'll keep
and it'll automatically put it back into your clipboard
when you click on it and stuff like that.
But if you could replace a bunch of little utilities with x bar plus plugins
that's kind of a nice trade if you ask me yeah yeah well it is and clocks and music controls
and things like that are all in there the time ones are very interesting because there's some
funny ones and then there's some really useful ones it's quite useful for like there's a unix time one that somebody submitted ages ago and if you want to know the time in unix time all the
time you can it's right there yeah so does it only run on a schedule or can you actually interact
like could you click a button inside x bar and trigger a thing to run yes and you can even wire
up a menu item to tell it to refresh as well. There's actually quite a lot you can do to the menu items themselves,
including like you can open a URL, you can run a script.
That means you can actually, and if you have some state somewhere,
which you just is up to the plugin, how it does that,
you can actually build quite interesting interactive applications.
It turned out to be,
you know,
quite surprising.
Yeah.
As well.
People in space.
I'm excited to hear what our community of listeners come up with once they
start playing with this thing.
Cause the sky really is the limit.
Let's get back to this list here.
Can X bar manage Adam's pie hole?
I don't know what that means.
Adam, tell them about your pie hole.
Well, pie hole is,
it runs on a Raspberry Pi, and it's essentially
a DNS, essentially for
blocking all the ads,
essentially. It's called a pie hole because
it runs on a Raspberry Pi primarily, but you can
probably run on anything, honestly.
But it's best installed on a Raspberry Pi because it's a small device,
public network, and you point your DNS there first as your lookup,
and it filters out all the ad tracking and all the retargeting stuff.
And there's a master list.
It's all open source on GitHub.
And how do you manage it now?
Is it like a web admin or something for it?
Yeah, it's just an IP address,
which I won't disclose,
but you go to this local IP address essentially
and it has its own web login.
You can log into it.
I'm pretty sure there'd be an API to it.
So I'm assuming that you probably could.
The most, you know,
actually that would be useful
because the one thing I do often,
or at least often enough, is log into it to disable it for a duration of time they have a drop down where
you can say disable for five minutes ten minutes because you might want to totally browse the site
there's links that break because of the tracking and you know temporarily you want to like okay
i'm cool with this link here let me do my thing pie hole right i sort of want to stop it but it's
a network-wide
catcher for the whole network. So no matter what
device, you're not doing this stuff on individual
devices. And every once in a while you want to manage
at least toggling it on and off,
or disabling it temporarily. So that would be kind of cool to have
as an export thing.
Well, let me answer it for him, because
Matt didn't know what PyHole was, so he will not
be able to answer. There is a PyHole manager
plug-in.
So yes, you can manage that.
And I can see where that would be a very confusing question.
Not having any context there, Matt.
Yeah, I just won't blame you.
Just taking that with grace.
Pie hole is your mouth, isn't it?
Yes, exactly.
Yeah, it's a pun on your mouth.
Yeah, makes sense. So if it were Adam, that would also have been correct. It's because your mouth is round, isn't it? No, it's not because it's round. It's because it's where pun on your mouth. Yeah, makes sense. So if it was Adam, that would also have been correct.
It's because your mouth is round, isn't it?
No, it's not because it's round.
It's because it's where you put your pie.
You put it in the pie hole.
I thought it was to do with Pythagoras.
Well, that's the theorem.
Yeah.
Sometimes.
Can X-Bar show and manage homebrew services?
Let me just answer this one because I'm excited.
Yes, you can manage your homebrew services.
That's a really cool feature.
Yes.
And so then I thought, you know, at this point, I was like, you know,
there's a lot of stuff I can do, but do I want all this in my menu bar?
And so at that point you sort of get overloaded and you got to untuck and
hide and things like that. Yeah.
Then I say, well, does this really make sense as a menu bar thing?
You know, could you, you know,
give it a tiny UI versus just simply a menu bar?
So maybe you can talk about the, you know, how people
push the limits of this and how maybe your menu bar will become super cluttered. Yeah, that is a
fair point. And really, it's kind of up to people, I think, but with the image support, like it
supports images. And the way that works is you base 64 encode the image and literally print it
out in a special way. everything is just text-based and
simple but people have done some amazing things where they are dynamically generating and then
encoding images and things but you can do it for so it looks like an icon in the top so you can
actually keep it nice and neat for those times or just don't install them all i mean yeah that's another way
well they're just so useful that's kind of like when firefox first added extensions and i mean
i probably had 75 extensions installed you know because my firefox got very slow and i got mad
at firefox and i'm like wait a second jared you are also in control of these extensions you don't
have to install every extension that comes out.
Yeah.
Yeah.
So.
Yeah, there's one called plugin that's is it up,
which you give it a URL and it just pings it
and tells you if it's up or not.
Do you know what I mean?
It's like, it's so simple.
Cardi B would tell you.
Yeah, she would, wouldn't she?
Is she related to Jason P?
She might be.
You have to ask Cardi B and Jason P.
I'd love to see those two collaborating
collab yeah can we talk a bit about you know the effort into this and maybe any commercial plans
for this you know being supported as a community developer i know you got a github sponsor you've
got some tracking in terms of a goal you've've got 54% towards your 50 sponsors goal.
What are you doing there?
How are things working on that front?
Is it important to you?
Yeah, it's interesting that actually it was Nat Friedman
that said you should set up sponsors on GitHub.
I mean, when the project was first around,
there wasn't such a thing as GitHub sponsors.
And he's a sponsor.
He is indeed a sponsor.
I think he's my biggest sponsor, actually.
Would that be the $1,024 a month, a bit creepy now, sponsor level?
What I love about this, let me take the mic here real quick.
2, 4, 8, 16, 32, 64, 128, 256, 512, and 1024.
That's your tiers, which is just super cool.
Yeah.
I don't even say the subject, the lines for each of those.
Yeah.
Go on.
Do you want to?
That's a lot.
I'd love to hear it.
I'll let you do it.
Pick your favorite three.
A succulent Chinese meal.
Your stuff makes our stuff better.
Your contributions are really making a difference to us
keep doing what you're doing you're really helping us yeah a couple of coffees or one
coffee in a fancy place yeah that's a few some of some places more expensive thank you
i like the two dollars which is a tip of the hat about four dollars is two tips of the hat
or a tip from two hats that is good that is good
so that's what i love about you matt too is this humor you bring to just life in general and i
think your tears are an example of that so thank you stuff thank you yeah it's a coping mechanism
really so it's like if i look like i'm not taking it too seriously. I can't really be too embarrassed if things go bad.
I would think that would be seriously not serious then because that's serious enough to think through that detail and be that funny.
Right.
But then not serious enough because it's not like corporate enterprise sponsor.
Yeah.
You made my meal today. I don't know. Just a bit more.
Yeah.
It's just very funny i don't
take it too seriously and i don't you know i use the sponsorship there my idea is to distribute
that to other people contributing because i do want to keep the project alive and there is work
to do it's actually not doesn't have a major release yet of x bar so there are still some
things that are being worked out. And there's
still some bugs and things in it. So if people are interested in contributing, I'm definitely
interested in that. And the sponsorship will be used in some way to facilitate that. It's a tough
one, because like the tax is quite interesting on sponsorship money and stuff like that. So there
are some things to figure out. But I think I've got it sorted. I hope GitHub does something about that at some point, because that's what Open Collective
has done well, was remove that portion, because it's generally, and this is getting into the
details, but it's generally some sort of fiscal sponsor. We talked with Pia, which we'll have out
before this episode, so you can go back into our feed and listen to that with Pia from Open
Collective and all the details around that. But it's a difficult thing.
It's a difficult thing to support a developer and probably definitely more difficult
to support a developer to support other developers by way of.
It's challenging.
Yeah, I do think GitHub will end up enabling that at least
so that you can, you know, the sponsorship for a project because at the
moment everyone's sponsoring me on that not everyone in fact if you want to sponsor me please
do but people are sponsoring me personally and it would be better if you could sponsor the project
and then we could somehow split that between the contributors so yeah i'm not trying to make money
from x bar that's not really what it was ever. I did get sent loads of socks at one point because in the read me,
I had a,
an Amazon wishlist because people were asking like,
can I give you some,
send you some Bitcoin or something?
I needed some socks at the time,
but then I ended up getting about 200 pairs of socks in the post.
So I've just,
yeah, I've just got, and it was just the same pair of socks 200 times i've still got loads of them i've got red these red socks so you'll always see me
wearing red socks you won't always see me wearing red socks lifetime supply there you go yeah that
was problem solved yeah yeah socks all around so that's good then your goal then is to at least currently
with sponsors is to generate enough sponsorship of you to give back to those who are contributing to
xbar yeah i really want it to be used to make you know keep xbar alive there will always be work to
do and there were lots of feature requests which didn't quite fit into you know you want it to be
simple but maybe there's some places where it can be more complicated and that's okay so there's a
tough kind of balance there with feature set as there always is in these kinds of projects
but like the whales project i'd like to get that some sponsorship from this as well because it
wouldn't have been possible without that project.
And yeah.
And then it's just a case of use it and build your own plugins and share what
you've built,
you know,
tweet me.
I love seeing people,
the things they've built.
And if you can then also contribute that to the repo X bar plugins repo and
put the information in the show notes,
I'm sure.
Yeah.
And yeah,
please get involved
it's a lot of fun and you know your creativity really is your only limit in this well to get
more matt you can go to go time and listen to go time and get weekly doses or hits or tips
from matt xbar.com is that right xbar app.? Xbarapp.com. Xbarapp.com. Thank you for correcting me.
Or also
GitHub.com slash Matt Reier.
Well, hang on. You'll edit it, won't you?
Just roll with it, right?
Oh.
Either one of you says that,
they'll edit this out.
You know that never happens, don't you?
Do you listen to the shows?
Every time you say that, it never happens.
So we just don't say
it anymore because we know it's not gonna happen i know i actually think the the edited when you
edit the podcast the live shows are always more raw and you know obviously make mistakes but it's
not just the mistakes it's i think you do such a good job when it gets edited together the
conversations just flow really well i like to also encourage people to listen live and join in live
because it's so much fun.
We're just hanging out.
It really feels like you're just hanging out with friends
and then in a week's time in your podcast app,
there's a little podcast.
Oh, yeah.
We talked about that last week.
It's great.
Well, Matt, we really appreciate you coming on the Change Log.
Of course, we appreciate everything you do on GoTime and the Go community and the open source community.
And even your zany music videos you put out and the entertainment that you bring is such a fun aspect of developer life.
So we appreciate you coming on the show and all those other things I just said.
Yeah, thanks for having me.
My pleasure.
You're welcome back anytime you rewrite X-Bar.
All right, that's it for this episode of The Change Log.
Thank you for tuning in.
We have a bunch of podcasts for you at changelog.com.
You should check out.
Subscribe to the master feed.
Get them all at changelog.com slash master.
Get everything we ship in a single feed.
And I want to personally invite you to join the community at changelog.com slash community.
It's free to join.
Come hang with us in Slack.
There are no imposters and everyone is welcome.
Huge thanks again to our partners, Linode, Fastly, and LaunchDarkly.
Also, thanks to Breakmaster Cylinder for making all of our awesome beats.
That's it for this week.
We'll see you next week. Game on.