Episode Transcript
Available transcripts are automatically generated. Complete accuracy is not guaranteed.
Jonathan Hall (00:00):
This show is
supported by you. Stick around
till after the news for moreabout that. This is Cupid Go for
02/21/2025. Keep up to date withthe important happenings in the
(00:20):
Go community in about fifteenminutes or twenty minutes or
thirty minutes, sometimes. I'mtrying to recall.
Shay Nehmad (00:26):
And I'm Shay
Nehmad. As long as it's time dot
duration. Right? Isn't thatgreat that Go has a native
duration type?
Jonathan Hall (00:35):
I like that.
Yeah. Yeah. I was recently
playing with that. The the log,system I'm using, expects
duration to be an integer, and Iwas sending it, I think, the
stream representation, and itwas screaming up my log, so I
had to change that.
Why are you logging durations?For HTTP requests or certain
other tasks that happen. It'sOh, nice. Sometimes useful to
(00:56):
know, especially when they startto exceed certain thresholds.
Shay Nehmad (00:59):
I wonder if my
microwave implementation uses
time dot duration.
Jonathan Hall (01:03):
Your microwave
implementation. I don't know.
Shay Nehmad (01:06):
Like, someone
implemented the the button.
Yeah. By the way, don't you feelI don't know if I'm the only one
that does this. Do do you use amicrowave? I know some people
are against it.
Jonathan Hall (01:15):
Yeah. I use it.
Shay Nehmad (01:16):
Do you sometimes,
like, instead of doing the
thirty seconds thing, do, like,twenty seven seconds just to
make sure you use all thebuttons, you know, on the on the
panel to make sure that youdistribute the load.
Just me? Okay. Moving on. Wehave a pretty cool show for you
(01:39):
today. We have someannouncements to do, talk
through, talking a bit about thejob market.
We don't do that very often. Thesync test, blog post, which is a
pretty cool new feature. And soGo rewrites and some some Go
projects in the lightning roundas well. And we have an
interview to, cap it off afterthe break. Right?
Jonathan Hall (01:59):
We sure do. We're
interviewing Carlos, the
maintainer and and author of GoReleaser and a few other popular
open source libraries. So stickaround for that.
Shay Nehmad (02:07):
Very cool. Very
cool. If you use Go Releaser,
and many, many, many, many, manypeople do, such including my,
like, my previous team.
Jonathan Hall (02:17):
And including
Rust and Zig people,
potentially. For sure.
Shay Nehmad (02:22):
So kick us off.
Jonathan Hall (02:24):
Yeah. So, first
off, we have a couple pre
announcements for securityreleases. We don't know what
they are yet, but, on Monday,new versions of
golang.org/x/oauth2 andgolang.org/x/crypto will be
released.
Shay Nehmad (02:40):
So Nothing scary.
Jonathan Hall (02:41):
That we know of.
It might be super scary. We
don't know. Maybe this is likethe end of the world stuff, but
we won't know till Monday. So aslong as the world doesn't end
until then.
Shay Nehmad (02:49):
For sure. So just
do I need to put on my calendar
to upgrade my crypto packages onMonday?
Jonathan Hall (02:56):
You should you
should upgrade your crypto
packages every day.
Shay Nehmad (03:01):
The I'm wondering
how many people do this
proactively, like, when theylisten to us or they just come
into work and, like, dependabout this opening a PR and
they're like, oh, this ringsfamiliar. Oh, right. They talked
about it.
Jonathan Hall (03:12):
Yeah. Interesting
question. I don't know.
Shay Nehmad (03:15):
Well, talking about
people coming to work, like that
segue? It's my segue. I follow,the pragmatic engineer,
newsletter. I'm actually a paidmember.
Jonathan Hall (03:26):
Oh.
Shay Nehmad (03:27):
Yeah. I did it by
accident.
Jonathan Hall (03:29):
So I wonder if we
have any accidental Patreons for
Shay Nehmad (03:32):
the show. Well, I I
all dollars are green. No
problem as far as I'm concerned.But, yeah, the the programmatic
engineer is actually, like,unironically, pretty good, like,
blog posts, but substack kind ofthing Mhmm. With deep dives
about various things.
So this one's a paid one. Idon't know how much I love,
(03:53):
like, promoting paywalledcontent, but it is a state of
startup and scale up hiringmarkets. I know how many people,
are looking for a job right now,like in our audience, you know,
might be looking from theircurrent companies sort of thing.
You know what I mean? Mhmm.
But it's always good to haveyour finger on the pulse of the
(04:13):
market. Right? Just to make sureyou're up to date. You never
know what's gonna happen in yourcurrent company. And, generally,
the vibe, if you open, like, Idon't know if you follow, like,
programming credits, like CSmajors and r slash programmers
and all these sorts of places,but it seems like it's doomsday.
Nobody can get into any job atall. And the field is completely
(04:34):
dead, and there's no need forsoftware pro developers at all
anymore. You if you follow thesesub sub subrades.
Jonathan Hall (04:41):
That's
interesting. I've I've noticed,
an upward tick in inopportunities since the
beginning of the year. Although,maybe that's just my very
specific niche.
Shay Nehmad (04:49):
I don't know. So
there there is when you look at
numbers, there is a low in joblistings. That doesn't mean
there are fewer jobs or lessneed. It's just a number. Right?
You can you can interpret it invarious, ways. This blog post
talks about, like, startups,early stage startups, what sort
(05:09):
of tech stack they're lookingat. Well, like, there's a lot
of, a lot of things they'retalking about, like changes in
the market. And, you know,people want very, very strong
engineers right now and are lessinclined to hire juniors because
a lot of junior like, real,junior developer work, things
that, people with zero userexperience can do, sort of can
(05:32):
be emulated maybe by, like, AIand cursor badly. Yeah.
Very bad. But just just goodenough to not hire these people,
etcetera, etcetera. So there's awhole blog post about it. The
only part I wanted to highlightfor this podcast, even though
the blog post is interesting, isthe hiring by tech stack, right,
in early stage, VC backedstartups. First of all, what the
(05:55):
first thing they say is that 50%of hires are back end engineers.
Right? K. So back end seems moreimportant in the early stage of
a startup. 25% are full stack,and AI and machine learning
specialists are, like, 10 to15%.
Jonathan Hall (06:11):
That surely that
depends a lot on on the startup.
Like, I'm working with a startupright now where I'm the only
back end engineer, and there's,like, three front end
developers. But it's a it's agame. So that's I suppose I
suppose if you average it out,maybe the majority of startups
are not doing
Shay Nehmad (06:25):
a front end. A VC
backed startup game. It's just
like a company.
Jonathan Hall (06:28):
I don't know if
it is. It might be a startup
back. I I think they've got someVC. Interesting. Yeah.
But, I mean, it's it's stillpretty small potatoes, though.
Shay Nehmad (06:36):
This is coming
from, like, a a recruitment
agency. So I guess this is,like, the average when you
average out all the noise in allthe companies, this is the
average experience you'd get.And another caveat, this is just
in The US. Although usually TheUS market tends to reflect
what's happening in the rest ofthe world, just with higher
salary. And, you know, listenersfrom specific countries, you
(06:59):
know I'm talking about you, youknow when developers from insert
specific country here are thebest compared to the you.
Jonathan Hall (07:05):
Mhmm. Mhmm.
Shay Nehmad (07:07):
Anyway, so the text
stacks for back end, TypeScript
is easily the most common. I'mdoing TypeScript back end right
now, by the way, in my newstartup. Very frustrating.
That's a fact. It's a typelanguage bolted on to a
JavaScript engine, like abrowser software.
Big mistake. But it's reallyeasy to go fast, and there's a
(07:27):
lot of frameworks that help yourun super, super fast, like
NestJS and things like that. Iunderstand why it's a good
choice for startups. Then it'sdo you disagree or do you is it
like LinkedIn flaming what'shappening right now or do you
Jonathan Hall (07:42):
Yo. Honestly,
it's not my my it's not the
language that I I findproblematic per se. I mean, I I
do for other reasons, but that'snot what I'm talking about. I
don't know why you would chooseto build your back end in a
single threaded language thesedays. Mhmm.
Because, I mean, all else beingequal, chooses choose another
simple language that's notsingle threaded.
Shay Nehmad (07:59):
So I think people
are really sick with Python
because of all the toolingissues, but that's getting
better with, whatever, Astra aredoing. You know, I don't know if
you know, but they're doingrough and doing u v. And they're
sort of solved the the toolingproblem in in Python to the best
of their ability. Mhmm. It's alot better now.
And Python 13 doesn't have a aglobal interpreter lock anymore,
(08:22):
so I think it's a viable choice.These two are the top two
languages. Third one on the listis Go. And the Yeah. The
recruitment agency, Ashel fromthe recruitment agency says
that, Go has gotten somewhatmore popular over time.
So that's his his take on that.And, like, comparatively, Rust
(08:43):
has is, remained very niche.Like, if you're working in a
crypto company, Rust is verypopular. They are looking for
people with hands on experiencewith Rust because there aren't a
lot of people like that. Thenthe other hand, if you just
wanna get into a startup, thechance of your Rust experience
being useful is is maybe you cantransfer some of your experience
(09:04):
into the language you're workingin.
Right? Like, probably a veryexperienced Rust engineer can
write pretty good TypeScriptcode, but it's not, like,
immediately hands on valuable.Mhmm. Other, honorable mentions
because there are almost no,people who need it is Ruby,
Flutter, Elixir, Java, c sharp,like dot net, PHP, and Haskell.
(09:25):
Basically, the recruitmentcompany says these languages are
irrelevant in the, like, earlystage startup VC US world.
That doesn't mean there are nocompanies that work with these
tech stacks. This means it's notwide enough for, the recruitment
agencies to have caught wind ofit. Seeing go up there with
TypeScript and Python for me wasinteresting. I always thought of
(09:47):
my interest in Go as yeah. It'sit's a relatively niche
language.
Like, I thought of Go as likevery niche compared to Python
and TypeScript, but recently itfeels like it's super
mainstream. But on the otherhand, I'm, like, in the thick of
it. So I I don't know. What whatdo you think?
Jonathan Hall (10:03):
I I think Go is
definitely entering the
mainstream. Maybe it alreadyhas, I suppose, as a way you
draw that line. It's youngerthan either of those two, so
it's it's, expected that itwould be less popular just by
sheer force of of of knowledge,I guess, or whatever. Mhmm. If I
knew all three languagesequally, well, I can't think of
any reason I would chooseTypeScript or Python over Go for
(10:25):
back end work because Go hasthat that multi threaded
capability.
Now, not everybody needs thatnaturally, but
Shay Nehmad (10:32):
I think a lot of
people have a bad experience
with Go trying to model veryhigh level, business stuff that
is very fluid from, like, fiveyears ago. Like, if you try to
do go for your startup fiveyears ago before, a lot of
recent improvements and a lotof, like, five years ago, the
(10:53):
comp the language was, like,half its age, basically. Right?
We've gotten a lot of experiencein the last five years as a
community. Right?
Like, five years ago, you wantedto build the microservice back
end. You had to generateeverything. You had to do a lot
of cogeneration because youdidn't have generics. And you
have generics, so you can avoida lot of cogeneration. Just an
example, right, of a problem astartup might want to solve.
(11:14):
Although, for another linkedlike LinkedIn hot take, if
you're a startup where you'redoing microservices. Right? But
that's another topic. Let's notlet's not open that kind of
worms. Right.
But just the the popularity isthe popularity is a big is a big
attractor, I think.
Jonathan Hall (11:29):
Yeah. And and
that closely relates to what I
was probably the most importantaspect of any of these
languages, which isn'tmultithreaded or performance,
whatever. It's how easily canyou hire developers. And so if
you're trying to you know,especially if you're a startup
well, I guess, it depends on onyour technical expertise. If you
are a technical founder and youhave the ability to vet your
developers, maybe it doesn'tmatter so much.
But if you're a nontechnicalfounder and you don't really
(11:51):
know how to hire developers,you're gonna have a better
chance probably, hiringdevelopers with TypeScript or
Python experience to the Goexperience just because there's
more of them out there andthey're easier to find.
Shay Nehmad (12:01):
Mhmm. The
Jonathan Hall (12:02):
And if you're if
you're at scale up stage, then
that's another anothersituation. You know, can you
hire enough Go developers withthe experience level you need to
to scale your product? Maybemaybe not. Maybe that's easier
to do with TypeScript or orPython for the same reason.
There's more people in themarket.
Shay Nehmad (12:16):
I definitely think
that there's a shift, like, it
might have not hit therecruiting, agencies yet, but I
think there's a shift to smallerteams with more experienced
developers because you can do alot more with, like, AI tooling
automation, blah blah blah. Atleast that's a promise. Right?
There's also another benefit ifyou're doing, full stack, which
(12:38):
is the other 25%. People say youneed react like, the common
cases you need react for thefront end and TypeScript, for
both front end and back end.
And having a single language forfront end and back end doesn't
necessarily mean yourarchitecture is very nice or
whatever, but it definitelymeans that it's a lot easier for
the same developer to, like,switch context and fix, like, do
(13:00):
a a feature end to end. Right?And I think a lot of startups
Lovable is a good example. Wetalked about it last week in our
live episode. Like, they thinkthey'll get pretty far with ARR
with, like, a pretty bad, on atechnical merit perspective, a a
not great back end language, andthen they'll have, like, the the
market validation and the timeto rewrite it in Go or rewrite
(13:23):
in a rouse or at least theimportant performance bits.
Jonathan Hall (13:26):
Mhmm. I don't
Shay Nehmad (13:27):
know if it's
misguided or not, but it it's
definitely reasonable. Right?You're building something and
you don't know if people evenwant it or will pay for it. Why
care about the, like,multithreaded performance before
you know it's ready?
Jonathan Hall (13:38):
That that that's
that's absolutely valid if all
else is equal. And that that'swhat what you know, I made that
that comment earlier. Now if allelse is equal, I would choose Go
over Python or or or TypeScript.You do make a strong argument.
If you can only afford one ortwo developers, maybe you want,
developers types of scriptexperience because they can do
both front end and back end.
Shay Nehmad (13:58):
Anyway, so a pretty
cool, cool blog post. We don't
do a lot of shout outs for,like, other non Go, like, media
outlets. Right? Yeah. Butdefinitely, if you're looking
for something to read that's notTwitter on the train, Pragmatic,
I can definitely recommendPragmatic Engineer.
I've been following the guy fora few years now, and he's
putting out some really goodcontent. I think he's a proper,
(14:20):
like, journalist full time now,not a engineer, but, still very
cool. And if you now go, yourstate in startup world should be
fine, but you should probablyknow TypeScript. That's that's
the main
Jonathan Hall (14:33):
I still don't
know TypeScript, and I haven't
found a reason to learn it. But,I do but do JavaScript.
Shay Nehmad (14:37):
So Oh, just imagine
three v eight engines in a tread
trench code trying to behavelike a real language. Cool.
Let's talk about Go Go.
Jonathan Hall (14:46):
We should talk
about something else now. Let's
segue oh, sorry. You weren'tdone. Go ahead and finish what
you were saying.
Shay Nehmad (14:52):
I was trying to
segue.
Jonathan Hall (14:53):
Yeah. I was
trying to segue too.
Shay Nehmad (14:54):
So let me do
Jonathan Hall (14:55):
Let's try to
segue wait a
Shay Nehmad (14:56):
minute. Let's do it
together. Wait.
Jonathan Hall (14:58):
We need somebody
to to solve this. No. We should
we should have tested thisbefore recording, how to do
these segues without tramplingon each other.
Shay Nehmad (15:07):
Yeah. But how can
we do testing for sync like,
things that happen at the sametime?
Jonathan Hall (15:13):
Yeah. I wish we
had, had known about testing
sync tests before we recordedthis program. That was a really
clumsy segue. I hope it workedout.
Shay Nehmad (15:21):
It it definitely,
drives home the point that,
doing, async and sync things isdifficult. What's this blog post
about? How can it help me?
Jonathan Hall (15:30):
Yeah. So, we we
we I think we mentioned it last
week. We certainly mentioned itbefore. A new feature, a new
experimental feature in Go onetwenty four is the sync test
package. And, you to enable it,you have to enable go experiment
equals sync test on your on yourbuild line.
So, like, go, test or goexperiment equals sync test, go
test is would be how you dothat. Right? So it's not there
(15:52):
by default. But what does it do?It makes it easier to test, code
that is timing sensitive.
So the example they give here,in the blog post this is an
official blog post from the Goteam, by the way. So the example
they give is, writing a simpletest for the context dot after
func capability. That that's a afeature that was added, I don't
(16:14):
remember, a couple versions agoto the context package.
Basically, it lets you registera function that will be executed
after that context is canceled.How do you test for that?
And so they they write a littlenaive test where you do an
assertion that says, make surethis function has not been
called, then call cancelfunction, then make sure it has
been called. If I'm explainingmyself clearly, it you you
should be able to imagine somerace conditions here. Like, if
(16:36):
you assert after cancel toosoon, maybe it hasn't actually
run yet. So maybe you put a atime delay of ten milliseconds
or something in there.
Shay Nehmad (16:44):
I hate seeing
sleeps in test though because Of
course you do. Why on one hand,like, why do I have to wait? And
on the other hand, it alwaysfeels kind of flaky.
Jonathan Hall (16:53):
Indeed. It is
flaky. And and and, actually,
they talk about that in detailhere. So, you know, say say you
do ten milliseconds, and thenmaybe it'll work fine on your
local machine, but you upload itto your, your slow overloaded
shared CI server, and maybe ittakes a second for that to
happen. So you had a longersleep.
Now your tests are even slower,and you have a hundred of these
in your in your entire testsuite. Your your test is just
growing and growing and growing,and they're still flaky.
(17:14):
Occasionally, they're gonna failbecause occasionally, you know,
timing is bad and it takes twoand a half seconds for that
thing to run instead of onesecond.
Shay Nehmad (17:20):
Poor old, Jenkins
server running on the, like,
bottom of the server rack withcobwebs is, like, struggling.
The little server are good. Sohow can we solve this?
Jonathan Hall (17:30):
Yeah. So the
solution no. The the
experimental solution here issync test. It introduces two,
functions. One called run andone called wait.
So you use sync test run thesame way you use t dot run, for
example. You pass it a function,and by passing a function to
sync test dot run, you youcreate what they call a bubble.
And within that bubble, you cancall sync test dot wait. And
(17:52):
what that does is it waits forall Goroutines within that
bubble to block. So that meansthere's nothing else running in
the background, nothing, nothingthat's, you know, reading from
the network, I guess, or or Idon't know if it actually
guarantees that, but certainlynothing doing calculations.
Nothing is happening in thebackground. So you're certain
that, when you call sync testdot wait, when it returns,
(18:14):
you're in a sort of a cleanstate in within your bubble that
everything is is done happening.So then it's safe to do your
assertion. You don't have towait an arbitrary amount of
time, ten second tenmilliseconds or a hundred
milliseconds or five seconds.You can just use sync test dot
wait, and it will block untileverything else is blocked, and
then it will continue.
And the blog post goes on. Yeah.That that that's just basically
the first third of the blogpost. The rest goes into more
(18:36):
details, which I'll save for youto read, dear listener, rather
than reading the entire blogpost to you. But that's the
that's the basic gist of it.
I can think of a few caseswhere, I could definitely use
something like this. I guessI'll probably just start
grabbing my tests for, time dotsleep and see if I can use this
instead.
Shay Nehmad (18:52):
And there are
specific use cases here they
mentioned, like, testing fornetwork code and IO operations
and, like, how how toreimplement this with the sync
test. Mhmm. This isexperimental. Right? So it means
that I don't have this bydefault.
Jonathan Hall (19:10):
Right. You have
to enable it. And the the API is
not guaranteed to be stable. Itcould change. Of course, that's
the whole reason for anexperiment is to see how people
react with it.
If there's something theyforgot, they need to change some
some of it. So it it's it'spossible that, the API will
change potentially if we go 1.24or or sorry, 1.25. I would
imagine that the hope is torelease this for general usage
(19:33):
in 1.25 assuming nothing seriousis discovered that prevents it
from being generally useful.
Shay Nehmad (19:39):
Cool. There's an
issue for feedback. So if you do
play around with it and find,like, places for improvement or
something like that, at thebottom of the blog post,
there's, like, the proposalwhere you can share your
feedback.
Jonathan Hall (19:50):
Indeed.
Shay Nehmad (19:51):
Very, very cool.
How does this I'm wondering. I I
I didn't see any mention of itin the blog post, but, like, I'm
wondering how this works with,test race. Right? Mhmm.
Like, the race detector. It'sprobably, like I think it should
work. I don't know if thesefeatures are completely, like,
congruent or if you suddenlyturn on sync test, it messes up
(20:14):
the test detector. You know whatI mean?
Jonathan Hall (20:16):
I would I would
expect that it would work fine.
Shay Nehmad (20:19):
The race detector,
I mean?
Jonathan Hall (20:20):
Yeah. The race
detector should work fine with
it. It's a good question.
Shay Nehmad (20:24):
It's it's very hard
to to reason about, at least for
me. Yeah. It it it's very simpleon the surface to explain why
you need it because it's veryobvious to see the bad
implementation and the goodimplementation, but just a few
more mutexes and one more pipeand one more channel, and my
brain is like, I don't know if,I'll do it correctly. But it's
(20:45):
definitely an improvement ofwhen trying to do it manually.
Right?
Yeah. Cool. Cool. So the call toaction is if you have these
sorts of tests, try to rewritethem with sync test, turn on the
experiment, and share feedback?
Jonathan Hall (20:55):
Absolutely.
Shay Nehmad (20:56):
Would you use,
like, an experimental feature in
CI right now if it works well,or would you wait until the
release? For, like, a not for aside project, for, like, a
client project or a live Yeah.Yeah. That's a good question.
Jonathan Hall (21:07):
I would probably
wait for the general release. Or
I you know, one thing I canimagine doing is writing the
test twice. Mhmm. Once using theold method, you know, like,
rather than rewriting my test,copy my test and then rewrite
them using sync test.
Shay Nehmad (21:20):
Interesting.
Jonathan Hall (21:21):
I don't know if I
would actually do that, but I
could it's it's something thatcomes to mind as a possible
solution.
Shay Nehmad (21:25):
It would definitely
be useful for feedback. Yeah.
Exactly.
Jonathan Hall (21:28):
Cool. One, final
proposal I wanna talk about.
This is one that's been on myradar for years. I'm really
excited that it's gettingattention again. It is currently
and likely accept.
I imagine next week, we canreport that it's been accepted
unless some of our listenersthink it's a terrible idea and
they go leave feedback. Don't dothat. And actually, this
proposal, I believe, has beenaccepted before, and then it
(21:51):
somehow got lost, like, I don'tknow, in the weed somewhere. So
it's it's, been reproposed, theexact same proposal, not even a
new proposal on the same topic.Same proposal has been
reproposed, went through themeeting, again just to make sure
that the new, variation is whatthey want.
The proposal is to add supportto the net h t t net h t t
(22:12):
package to support contentnegotiation. Do you know what
that is, Shai? Or Or are you oneof those folks who just always
returns JSON no matter what?
Shay Nehmad (22:20):
I'll be honest. I
I'm probably always, returning
JSON. Yeah. Yeah. Or plain textif it's, like Or
Jonathan Hall (22:27):
plain text.
Shay Nehmad (22:27):
Or HTML if it's
HTML.
Jonathan Hall (22:30):
So the the whole
idea here with content
negotiation is something thatprobably a lot of people don't
even realize exist because theyjust always return the same
thing. But HTTP gives you theoption for the client to tell
the browser what format theywant the content in.
Shay Nehmad (22:44):
Oh, for sure. Yeah.
I do use that when I use, WTF as
my IP. Because they have WTF asmy IP and WTF as my IP dot slash
JSON
Jonathan Hall (22:53):
Okay.
Shay Nehmad (22:53):
Which sends the
same API request and then
returns, you know, either anHTML page or a JSON object,
which tells you, your IP addresswith a lot of profanity in the
JSON key, which I really like.
Jonathan Hall (23:05):
So so basically,
you can you can the the the
client can pass a an acceptheader that says, here are the
content types I can I canconsume? This is commonly used
maybe for for images. Right? Idon't know if it's that common
anymore, but certainly, browserswill do this. They'll say, I
accept WebP and JPG and PNG orwhatever, and they give an order
(23:25):
ranking of, I prefer WebP overJPG you know, and so on and so
forth.
And then content negotiationswhere the server takes that
header, parses it with itsweighted, suggestions, and
compares that against thecontent types it knows how to
produce to determine whichcontent type it should produce
for that particular request.
Shay Nehmad (23:42):
Okay.
Jonathan Hall (23:42):
So, you can also
use this for text types. So you
could have, some I've I've seensome APIs where if you just use
curl, for example, it'll returnan HTTP I'm sorry, an HTML
response that says four zerofour. But if you put accept j
application JSON, it'll return aJSON representation with the
same error message. Same sameconcept. So this is gonna become
part of the center library, orit's likely accepted it will.
(24:04):
Previously, you had to use athird party library if you
wanted to do this in yourserver. So I'm really excited to
see this, make it into thecenter library because it's a
feature I've used occasionally.I don't use it in every project,
but I've certainly used it insome projects. And, I I really
think it belongs in the centerlibrary. It's part of the HTTP
RFC spec.
Don't know what else I can say.
Shay Nehmad (24:23):
Isn't adding things
to the HTTP though isn't h HTTP
like frozen? Wouldn't you needHTTP v two to add this, like,
feature?
Jonathan Hall (24:31):
I don't think
it's frozen. I mean, I I don't
think it's anything officiallythat says it's frozen. It is a
little bit bloated, and thatthere was some commentary on
that talking about putting it ina different package. There was a
an early suggestion to put it ina subpackage, you know, below
the HTTP. I think HTTP util waswhat they thought of doing
initially.
Although, since then, theydecided HTTP utile was a bad
(24:52):
idea to even exist. So, yeah,they decided that ultimately
unless one of our listeners oryou goes and changes their mind,
the proposal is to put it inthat HTTP.
Shay Nehmad (25:02):
Why what suddenly,
I realized looking at this
proposal, it's from, like, 2017.What happened to, to to pop it
back up?
Jonathan Hall (25:13):
Yeah. So the
most, recent activity started on
January 21, just a few weeksago, when the Prometheus team,
was finding more use cases forthis. And so they they brought
it back up, and brought theattention of the Go team to it.
Go Prometheus.
Shay Nehmad (25:28):
Nice. Well, I hope
this, gets merged just to
because you seem very excitedabout it. Yes. Well, we have a
lot of very interesting, thingsto discuss, but we are out of
time. So let's do them not a lotof justice in the lightning
round.
Lightning round. Just two quickprojects that, popped into my,
(25:55):
onto my radar from Reddit. Thefirst one is, Minecraft. Have
you played Minecraft?
Jonathan Hall (26:01):
I tried once, and
I couldn't get into it.
Shay Nehmad (26:03):
Wow. My wife and I,
hours and hours on end. So OG,
in fact, that I got it for heras a present on a CD. Woah.
Yeah.
Haven't seen one of those in awhile. Anyway, someone
implemented, like, all theMinecraft clone with all the
basic features where you couldwalk around and and delete
blocks and add new blocks andphysics and shaders and
(26:25):
whatever, in Go. And then as Ioften do, I went to this
person's GitHub page, and I sawthey also mentioned they also
implement something that I mightactually use. Like, this is a
cool project. Then on Redditsaid, yeah.
I thought it would be cool to doso. I did I did it. But then I
saw they implemented Tmuxsession management. Do you use a
Tmux too? Like
Jonathan Hall (26:44):
Sometimes. Mhmm.
Shay Nehmad (26:46):
So I I use,
Tmuxminator, which, like,
creates the sessions for you andyou can save them in a file. So
whenever you open your PC andyour, like, Tmux session might
have died or you restarted orwhatever, you just go
Tmuxminator start, and you haveall your sessions and they're
named so it's easy to navigatebetween them. Unfortunately,
(27:06):
over the last, like, year or so,I've fallen down the rabbit hole
of using terminals with tabs.Started with iTerm and then
wrap, and now I'm in Ghosty. Anddoing both tabs, the terminals,
and the TMux is kind ofredundant.
Yeah. So I've sort of fallen offthe TMux train, which is
unfortunate because I think itwas actually a lot more
productive for me. But, yeah. Ifyou do, TMUX, there's TMUX
(27:33):
session management implementingGo. It's called mynav, same guy
who did the Minecraft thing,with a release just three weeks
ago.
So it's even like, it even fitsthe the Capago news ish theme
because there's a new version,released, three years ago where
you can have your workspacedirectly from a Git URL, which
(27:55):
is nice.
Jonathan Hall (27:55):
Alright.
Shay Nehmad (27:56):
So, yeah, two cool
projects. Awesome.
Jonathan Hall (27:58):
I think I heard
recently that was it Sony? It
recently stopped producingwritable CD media. Better stock
up now before Yeah. For for
Shay Nehmad (28:09):
if you ever need to
save 500 megabytes of of a
video. Yeah. Alright. That doesit for news this week. Stick
around for a short ad break andthen an interesting interview
after that.
Welcome to our ad break. AsJonathan mentioned in the
(28:31):
beginning of the show, this showis supported by you. This week,
we have a new Patreon member.Thanks a lot to Jay Martin for
joining our our Patreonsupporters. If you wanna support
the show, this is a hobby.
We do it for fun and to learn,but it's a pretty expensive one
because we pay for hosting,editing fees, and, you know,
it's our time, etceteraetcetera. If you wanna support
(28:53):
us, you can kick in $8 a monthvia Patreon, and we would
greatly, greatly appreciate it.We wanted to say thank you to
all the community for joining,well, whoever did join, the live
episode last week. It was a lota lot of fun. We got great
feedback.
We'll probably do that againsooner than the two hundredth
episode. But just want to saythanks to everyone for joining.
(29:14):
I know some people had technicalissues joining. I'm really sorry
about that. It is our firsttime.
But, yeah, it was a lot of fun.You can listen to the episode,
on wherever you listen topodcasts normally, and you can
also watch the video of us doingthe the episode on YouTube. If
you wanna reach us, you can findus at cupago.dev, where you can
find links to all these thingsrelating to the show, past
(29:36):
episodes, transcripts, link tothe, Slack community, hashtag
Cupago, kebab case with hyphens,or you can email us at
news@cupago.dev. That isnews@cupago.dev. We recently got
a very useful email telling usone of our links on the site was
broken, so I can I can assureyou that the email works?
If you wanna support the show inother ways, you can buy Swag in
(29:58):
the Swag store, which you canalso find in cupago.dev. And you
can also share, the show with afriend, a coworker, or a co
student. You can also help usclimb the rankings with a review
and a rating on Spotify, ApplePodcasts, or, like, wherever you
listen to your podcast. We don'tpay to advertise the show, and
word-of-mouth is the only waywe, get to new people. Hey,
(30:25):
Jonathan.
You're seeing what I'm holdinghere? Holding here? This is an
audio show. Suddenly, I realizedthis joke isn't going to land at
all.
Jonathan Hall (30:32):
I see it.
Shay Nehmad (30:33):
I'm so stressed
out, you know, trying
Jonathan Hall (30:37):
to release
Shay Nehmad (30:37):
my project. I've
been crushing this, stress ball
so hard. My hands are gettingtired. Who can help me release
go? Who can help me release allthis stress?
Oh, hi, Carlos.
Carlos Becker (30:51):
Oh, yeah. That's
part of me.
Shay Nehmad (30:55):
Alright. We have,
Yogi and a stress anger
management consultant. Carloshere on
Jonathan Hall (31:01):
the call.
Carlos Becker (31:03):
Hey. Hello.
Shay Nehmad (31:04):
Hello, Carlos. So
Carlos is, the brains and bronze
behind the Go Releaser. Beforewe dive into it, how would you
present yourself to our,beautiful audience?
Carlos Becker (31:14):
Okay. Hello. My
name is Carlos. I'm from Brazil.
I live in Brazil.
I've been working with softwarefor over ten years. I don't
remember how long exactlyanymore. It's enough to a few
old. I can say that. And I'vebeen working with Go since Go
01/1943, something like that.
(31:36):
And I created Go Reducer and abunch of other libraries and
CLIs. And I also work at Charm,so we do Go there as well. And,
yeah, I think that's a goodsummary of it, I guess.
Shay Nehmad (31:50):
Cool. Cool. And for
people who don't know, what is
Go Releaser other than one of myfavorite Go projects and the
projects we talked about on theshow multiple times?
Carlos Becker (32:01):
Yeah. I've
listened some of them, I think.
Yeah. So go Google is there is atool to help, as the name
implies, releasing Go software.Since some versions of Go, it
now also releases Rust and Zigand TypeScript depending on
which, compiler you're using.
And the plan is to add morelanguages there. But, basically,
(32:23):
you give it a set of targets. Itcompiles them to binaries and
creates archives, Docker images,w W installers, Honeybrew tabs,
RPMs, and signs and creates Sysbones and all the all the
release fields you need,greatest the change allowed you.
(32:44):
So it's basically you create aYAML file, push a tag, and it
does pretty much everythingmight want, hopefully, for you.
And, yeah, that's it.
Jonathan Hall (32:54):
Now that it isn't
just Go, does does the name need
to change? And if so, I suggeststress releaser.
Carlos Becker (33:02):
Yeah. I was
thinking about that yesterday,
actually, and I already talkedabout it with a couple of
friends a couple of times. Ireally love the the logo we have
right now, so that that's thethe only thing holding me back.
But I think I'm probably gonnahave to change it for two
reasons. One of them is thelanguages that's that's now
(33:23):
supports more than one language.
And the other thing is thatGorillazers commonly wrongly
read as Gorillazers. So therethere is that problem. Oh. I
don't know what a Gorillazerscould be. But yeah.
Like a block from blockbusterfor snuff films. Yeah.
Jonathan Hall (33:42):
Yeah. Something
like that.
Shay Nehmad (33:43):
The logo is pretty
great. It's like the gopher,
just riding to the stratosphereon top of a rocket.
Jonathan Hall (33:49):
Yeah.
Shay Nehmad (33:51):
So I just wanna
say, like, I I've used the I've
worked at the Orca Security,which is a a pro license holder
of GoReleaser, and we super lovethe tool. Very useful if you're,
like, a company and you have,your thing and you want your
customers to be able to use itand you don't wanna be worried
about all the release and deployand all these, like, automating
(34:14):
all this nonsense. The thing yousaid about writing a YAML and it
just works, like, yeah. Happycustomer here for sure.
Jonathan, do you use a GoReleaser for any of your
libraries?
Jonathan Hall (34:23):
I I do. I use it
I use it for my KIPOC, package.
It's, open source library and aCLI tool. So the CLI tool is
built and released to GoReleaser.
Carlos Becker (34:32):
Cool. Yeah. Nice
to hear you. You sure use it and
like it. That's it.
Yeah.
Shay Nehmad (34:38):
It's it's pretty
widespread compared to, like,
you know, 15,000 stars, and all,all that stuff. So I'm
interested in hearing, so youwanna add more languages. What
other cool things are, like, onthe roadmap?
Carlos Becker (34:54):
I have a couple
of things I want to do. One of
them is related to Dockerimages, because right now, the
configuration is a little bitrepetitive because initially,
there weren't, like, Dockermanifest. It was just Docker
images. Now there's manifest, soyou have to create the image
images configuration, and thenyou probably have to copy a a
(35:16):
bunch of labels from oneconfiguration to the other. So
it looks like a big chunk ofreally similar YAML code, and
then you have to wire those intothe manifest.
So that's something I want toimprove. Probably also use,
like, the Docker libraries in Godirectly so you don't have to
use the Docker CLI to actuallybuild images and the manifest
(35:39):
and, like, kind of copy how theDocker something action. I don't
remember the it's like the nameof the action is Docker build
image action or something likethat. It it a bunch of copies
culture being inspired maybe bytheir, configuration because it
it's a a good configuration, Ithink. So I'm gonna do something
(36:02):
similar about that.
And the other thing that came upa couple of days ago is that
since forever, we've been doing,like, creating formulas on
Honeywell, but it actuallyshould be a cask. So there is
that change that I'm alsothinking on how to do. Both of
these will probably be breakingchanges. So it's probably
(36:23):
something for Google, these arevictory. And also now that,
another thing I just rememberednow that we have more targets
and more languages, I also wantto change some internal things
that aren't so fun to talkabout, I guess, but yeah, some
restructuring here and there.
Yeah. That's kind of the biggestthings on my roadmap for now.
Shay Nehmad (36:45):
What's the
difference between a cask and a
formula in in Homebrew? Like, Iknow I have to sometimes add
minus minus cask, but I actuallydon't know why. I'm just copying
the command line of the websiteand and doing whatever it tells
me.
Carlos Becker (37:00):
Yeah. If I'm if
my memory serves me, I think a
cask is is supposed to be usedto install pre compiled binaries
and apps and things like that.And the formula is supposed to
build from servers. So sinceforever, we've mimicked building
from servers, but we actuallyare installing pre pre installed
pre build packages pre buildbanners, actually. Yeah.
(37:21):
And I just got an issue a coupleof days ago about it, and it
makes sense. Before, it didn'tmake sense to change it because
I think Linux built in a supportcasks or something. But now
apparently it does.
Jonathan Hall (37:34):
It's
Carlos Becker (37:34):
probably going to
happen eventually.
Shay Nehmad (37:37):
Cool.
Jonathan Hall (37:38):
How much time do
you spend on this? I mean, this
this sounds like a reallyambitious project supporting
multiple languages and multiplebuild targets. And look. You
just look at the feature list.It's a lot of stuff.
And I I know it's been buildingup over time, but it still has
to be a certain amount of effortto even maintain what you have
without adding new features.What what kind of time are you
spending
Carlos Becker (37:57):
on this? So I'm
not very consistent, I think.
There are days I don't doanything and other days, like, I
that I sit, like, five hoursstraight or something. So I
don't really know how much time,but it's not that much time
anymore. In the beginning, itwas more because there are there
are more missing features, Ithink.
(38:19):
Now it's mostly, like,maintaining the latest big
features I added were, like,the, the other languages
support. Yeah. It's almost tenyears old now, so it's it's got
a lot of efforts and hours in itfor sure.
Jonathan Hall (38:35):
I'd I'd also like
to talk about you have a paid
version, a pro version. I don'tknow how many people are aware
of that. I mean, I know a lotI've I've spoken to many people
who have heard of and useGoReleaser at meetups and so on.
I don't get the sense that thepro version is as well known.
Talk to me about that.
What let's let's start withthis. What's what are the
differences between the proversion and the free version?
Carlos Becker (38:57):
The pro version
has some extra features,
basically. It has, the recentfeatures I added there is, like,
AI to, change your changelog ifyou want to do that. There are a
couple of extra optionsregarding Tink MSIs and you can
import, rebuild binaries fromother sources. And, it's a bunch
(39:19):
of small leach things. I thinkthe biggest difference there is
that you can actually split thebuild by, operating system or
target and merge it, later to,so you can like, if you use
Seagull, for example, you canbuild like windows on a windows
machine and some Linux machine,etcetera, And then do another
(39:39):
job, like, merging everythingand, like, pushing the images
and all that stuff in the thelast part.
Yeah. But it's basicallysomething I probably should have
done sooner. A lot of people saythat I should do that, and I was
like, who who will pay for it?You know? I I didn't I didn't
value myself enough, I think.
Jonathan Hall (40:00):
Yeah. So that
that brings up my my next
question. If you're willing toshare this publicly, I'm curious
how many subscribers you have tothe pro version, or or if you
don't wanna share numbers, justsome sort of sense of scale. Is
it a lot of people? Is it just afew?
Carlos Becker (40:13):
It's about if I'm
not mistaken, the last time I
looked, it was about 200subscriptions. So it makes
around four k in a row, give itgive or take. So it's that's
good to go for me running itsolo.
Jonathan Hall (40:31):
For a side
project. Yeah. Yeah. It's not a
it's not it's not a full salary,but it's a good side project.
Yeah.
Carlos Becker (40:36):
In Brazil, it
actually can be a a a good
salary. Yeah.
Jonathan Hall (40:40):
Could be. Yeah.
Yeah. Yeah. That's not your only
open source project, though.
I mean, I actually recognizeyour GitHub handle mostly from
your e n v package, which Iimport in almost every project I
work on. Is that something thatthat came out of Gorillaser, or
is that completely independent?
Carlos Becker (40:55):
I think that's
independent. I don't remember
starting it from Gorillaser. IfI'm not too crazy, I think I was
kind of inspired by some Javalibraries that I used back in
the day. I think there was onetoo many. I think it was
environment variables to Javaclasses or something like that.
And I was like, no, that's agood idea. Did that with Go
(41:17):
mainly to learn, like, the theReflect API and all that that
stuff. People apparently enjoyit, and it's on version 11 now.
So it's there.
Shay Nehmad (41:31):
And I again, this
is sort of another, going back
to, Jonathan's question. I knowI use charm. I use gum a lot.
Charm basically make, like,very, very good command line
tools, and that's what I know,at least. I love the, like,
terminal UI frameworks and GUMespecially because it's so easy
(41:52):
to plug into bash scripts andjust have a super nice picker
and, like, not worry about ittoo much, and, that's really
cool.
What do they do that, like,makes money? Like, other I I
love the I love the tools thatthat I I almost don't wanna know
how the sausage get made sort ofsort of a way because I really
(42:12):
like the tools, and I really,really like the branding. It's
so, like, pink and nice. But butwhat's the like, what does the
company actually do? You knowwhat I mean?
Carlos Becker (42:23):
Yeah. So we are
working on that. Right now, we
are leaving off, investments. Sowe don't have any any paid
products yet, but we arefiguring that out. And I can't
say more about it for now.
So Oh, Okay.
Shay Nehmad (42:38):
Now I wanna know
even more.
Jonathan Hall (42:41):
Sorry, Shai. You
can't know how the sausage is
made.
Shay Nehmad (42:43):
For sure. And what
do you do in, Charmer? Because
Charmer has a lot of projects.Right? Like, various libraries,
animations and Sage apps andstyle libraries that do you like
dabble in all of these projectsor is there like one thing
that's you?
Carlos Becker (43:00):
There are a
couple of projects that I
created. I think I contribute topretty much all of them at least
a little bit. But I work mostlyon Wish, which is the SSH app
from your, on mods, which is theAI command line thing. I
recently did a lot of things inGrum and, saw bubbles that, are
(43:24):
used everywhere else, which is,for those who don't know,
bubbles is a component libraryfor, for command line apps. I
contribute to Bubble Tea more orless often.
And, yeah, I I think pretty mucheverything. I I touch
everything, but recently,publicly, I think it's more Wish
(43:45):
and mods and GUM, I think. AndVHS is true.
Shay Nehmad (43:50):
Do you tend to,
like, reach for, you know, the
the charm things more often?Because, theoretically, you can
do command line applicationsjust with flags. Right? You
don't really need all these goodlooking things. Do you think
it's a it's a good default, orshould should people only reach
(44:12):
for charm when they actuallybuild a terminal UI?
Carlos Becker (44:15):
You you mean the
differences between a a TUI and
a, yes, and a CLI. Right?
Shay Nehmad (44:21):
So the difference
between the CLI and and TUI is
that TUI is look better, andthey're more interactive, and
they might have, like, featureswhere you can scroll and enter
and they are stateful, etcetera,etcetera. Do you think that the
default should like, when youdevelop a new a new tool, is
your default at this pointalright. I I want it to look
nice and be interactive, first,or is your default still like
(44:43):
the Linux mindset of let's justkeep it simple and do a CLI
first and only do a TUI if itmakes sense?
Carlos Becker (44:50):
It depends a lot
on what I'm I'm building. If
it's something that couldbenefit from being interactive,
I I probably do it interactiveat least at some point in time.
Maybe not, like, for starters,but eventually. But, yeah, I I
really like, like, automatingthings. So even if I do
something that works, like,interactively, I also try to
(45:13):
make it work non interactivelybecause shell scripts and so on
and piping things throughthrough each other and all that
good stuff.
So that that's my my line ofthinking, more or less.
Shay Nehmad (45:27):
I tend to reach
for, gum pretty often. Gum is
the it allows you to reallyquickly insert, like, a picker
into your scripts and whatever.But then what happens is when I
wanna rerun the command reallyfast, I I find that I can't
because I can't just, like, typethe command, press enter, and I
because I have to go through,like, a interactive segment. And
(45:50):
then I'm, like, kicking myselfin the in the channel, like, ah,
why did why did I implement thisinteractive part? But some of
the TUI's I've been using for,like, when you actually do
interactive stuff, they've beenreally, really, really nice.
Is gum and, like, the charmbracelet stuff the most common
ones? Because I know that thereare a lot of TUI frameworks in
Rust and in other languages. Arethe there is the charm stuff,
(46:12):
like, the most, popular ones, oris it, like, a a tough battle
out there for for domination ofthe TUI framework thing?
Carlos Becker (46:21):
Honestly, I don't
know. I I think charm is, if not
the most popular, but one of themost populars. I I don't know.
Like, there's Textual in Python,I think. Protatoo in Rust that
are also pretty famous.
There is the old one in c, andPersis. Yeah. There's I don't
(46:43):
know how to measure popularityeither. Like, if it's GitHub
stars, probably it's charm. Ifit's usage out there, I would
bet on main curses, I think.
Jonathan Hall (46:54):
For sure.
Carlos Becker (46:54):
There's a lot of
old things out there for main
curses. So I guess it depends.
Shay Nehmad (47:00):
GitHub stars are
such a weird metric. You have a
tool that that measures GitHubstars, right, or or prints them,
I think.
Carlos Becker (47:08):
Yeah. It tries to
graph them, like, over time. It
was mostly me being curiousabout, like, how projects get
to, like, 10,000 stars orsomething. But I don't know if
this changes this change it, butwhen I created it, you couldn't,
like, get it exactly build thegraph properly because it only
(47:32):
returns the stars that are stillthere. So if someone started,
like, I don't know, two yearsago and then on star.
The, your repo it's it justwon't show up basically. So it's
not very precise. I think thereare other tools that, like, keep
watching and starring on theirown databases so they can see,
like, when you lose a star andthat kind of thing. But I in the
(47:56):
end, I don't really care thatmuch about it. I think it's it's
just nice to see the the graphthere.
Yeah.
Shay Nehmad (48:03):
I always wonder if
it's a vanity metric or if it's
a real metric. I love whenpeople star my projects, but,
obviously, none of them havebeen as successful as, something
like Go Releaser with 15 kstars. I assume the, like, the
paid licenses are a much moremeaningful validation of of,
like, the work is actuallyuseful or download numbers or or
(48:27):
number of issues, things likethat are are much more I don't
wanna say valid because they'reboth valid, but I I would say
more real or more concrete,like, feedback that the project
is actually good than feedbackthan GitHub stars. Right?
Carlos Becker (48:40):
Yeah. I think so.
I think the thing with GitHub
stars is that we don't reallyknow how everyone else uses
them. Some people star anythingthey like. Some people only star
things they use.
Some people use it as, like,bookmarks or whatever. So it
means someone look into it and,at least felt something, so they
(49:02):
start it. But I don't know howgood it is. If we think, like,
financially, yeah, for sure. Thelike, the MRR and all those
metrics are are better successmetrics, I think.
But at the same time, Gorlaserwas just up in service for a lot
of years, I think five years orsomething. So a lot of people
(49:25):
don't know about the paidversion. A lot of people don't
need the paid version because Ihad already built so many
features in the free version.
Shay Nehmad (49:33):
Which I'm happy I'm
happy about just to like, I
don't wanna I want I don't wantyou to leave this interview.
Like, yeah. Next release ofGorillaser. Everything is behind
the paywall.
Carlos Becker (49:44):
No. I will never
do that. You
Shay Nehmad (49:46):
only get half the
binary. You get 50% of the
bytes. You have to pay me forthe rest.
Carlos Becker (49:53):
No. I would never
do something like that.
Jonathan Hall (49:55):
You remember back
in the shareware days when the
the free the free version wouldhave, like, a time dot sleep
thirty seconds before it wouldstart running?
Shay Nehmad (50:03):
There are some good
stuff from that era, man. I
never did this, of course, but afriend told me that you, like,
get a a, like, a shared keygenerator for, like, a software
you want to use, and it had themost awesome music and the best
artwork on it. Like, you open itup on your Windows, which is
like just you click on it. Youget a, like, a UID. It's
(50:24):
basically a UID generator.
Carlos Becker (50:26):
Yeah. Need first
piece most wanted to have the
key generator like that.
Jonathan Hall (50:31):
You know what
Shay Nehmad (50:32):
I'm saying?
Obviously, we don't, EA, I don't
know who owns is it two k now?Two k, if you're listening,
obviously, we're we're justtalking about things we saw on
our friends' computers. Wealways paid for our copies
fully. Don't worry about
Jonathan Hall (50:44):
it. Yeah.
Totally.
Shay Nehmad (50:46):
So, Carlos, for the
Go Releaser and the other blog
post that you're putting out andall your links and whatever,
where can people find you ifthey wanna reach out about the
projects you've told us? Asyou've told us off the record,
some things that might becooking and you're not willing
to divulge yet, but maybe peoplewanna talk to you about.
Carlos Becker (51:06):
Yeah. So go
redeezer.com for everything
Gorillizer related. You can goto carlosbecker.com for my blog
and personal site. I'm also onMax and GitHub, as, at carlos
with two a's and the numb numberzero in them, which is a very
(51:26):
bad username, but it's beenthere forever, so I'm not going
to change it. Yeah.
I mean, I think those are thethe main places. I'm most active
on on Max and yeah. I think onMax.
Jonathan Hall (51:39):
That reminds me
of one of the first questions I
ever had when I saw yourusername is why the two a's or
why is it Carlos?
Carlos Becker (51:47):
So it's a funny
story. When I created my first
Gmail account, like, I don'tknow, 2,000 something. I tried
to create cardosgmail dot comand then, it already exists. So
Carlos one already exists.Carlos zero already exists.
And then I just got annoyed andput like another a there and
(52:10):
that's it. That that's how I
Jonathan Hall (52:11):
got it. And it
worked. There you go.
Shay Nehmad (52:14):
It's definitely,
definitely better than my, thing
where I did, like,shy@thegmail.com. And then it
was, already taken. And then Idid, okay. You know what?
Dude500@gmail.com, which is mypersonal email.
And, you know, I've beenapplying to jobs at, like, super
serious places or, like, goingto my insurance agent or, like,
(52:37):
what's your email? Like, it's du d e five. And I'm really
hoping that they don't spell itout in their head.
Carlos Becker (52:46):
I I I have a fix
for you. Get the domain and
Shay Nehmad (52:50):
I do. I do. Yeah.
Now I have hello@chinachmod.com
for sure for sure.
Jonathan Hall (52:54):
Oh, I I thought
you were gonna say you were shy
at dude five hundred dot com.
Shay Nehmad (52:59):
I I you know what?
The the best, the the the best
outcome of this, like, problemis that when my daughter was
born I don't know. It's not thefirst thing. Like, first thing I
hugged her and then I cried, butdefinitely in the, like, five
hours after she was born, shealready had a Gmail account,
which is like,firstname.lastname@Gmail.com. In
(53:20):
Google, you can do, like, familyaccount.
Like, I took care of that. She'snot gonna make the same mistake.
Jonathan Hall (53:26):
She doesn't have
a college savings, but she has a
Gmail account. For sure.
Carlos Becker (53:30):
That that's a
good column. Yeah.
Shay Nehmad (53:32):
I I didn't buy a
car seat. Like, I tied her to
the roof, but she had a is aChivo. No. I'm just kidding.
Alright.
Alright. Carlos, thanks for,jumping on the interview. We
have a stumper question. Anton,you wanna line it up?
Jonathan Hall (53:46):
Yes. Yeah. So,
the the audience, of course,
already knows the questionbecause we've asked it a couple
of times this year. But thequestion, who has been the most
influential, as you've beenlearning Go? And I know you've
been using Go for a long time,so you might have to think back
really hard.
But, who in the Go ecosystemhelped you the most? Maybe they
wrote a book or a blog post orsomething like that.
Carlos Becker (54:08):
So right back
during the beginning, I started
learning Go because I wasworking as a site reliability
engineer. So I I figured out,like, well, Docker is written in
Go. Prometheus is written in Go.Prometheus is written in Go. So
I wanted to learn Go to be ableto maybe fix issues that I had
(54:29):
and things like that.
And I, I did fix some issueslike that. So I think the most
influential developers for meback then, where I think the
ones in Prometheus were the mostbecause, I forgot their names
now, but I remember that theywere very strong opinion
strongly opinionated in thesense of, like, keeping things
(54:52):
simple. Like, if you can dothings in one way even if it's
not, as convenient as this otherway you are proposing, maybe
let's stick with that one singleway for now. That really
resonated with me at the timebecause, I came from Java, which
has 3,000 ways of doingeverything.
Jonathan Hall (55:12):
Mhmm.
Carlos Becker (55:13):
And, like, you
never know which one is the
best. Most of the time thereisn't the best ways. It depends
on the case and not that. So,yeah, that person that I forgot
the name now is is one of thebiggest inflation influences on
me. Later on also, MitchellHashimoto from HashiCorp because
(55:36):
of Terraform and all of thatline of software too.
Yeah. I I think those are theprobably the in goal is this
true. Yeah.
Jonathan Hall (55:48):
Yeah. We
Shay Nehmad (55:49):
should we should,
like, set up a hall of, of fame
for all these, people. Like,people are mentioning different
people as their, you know,influences. I think that's
interesting.
Carlos Becker (56:02):
Yeah. I think we
can all, like, read the same
things, but different thingsresonate with everyone. So
everyone turns differentconclusions from the same input
sometimes. And Yeah. That'sbeautiful.
Jonathan Hall (56:16):
Cool. Well,
Carlos, it's been a pleasure
chat chatting with you. Thanksfor all the work on Go Releaser.
I continue to use it in in yourother libraries and appreciate
them. So thank you.
Shay Nehmad (56:26):
Yeah. And don't
forget stress releaser. I think,
you know, for a rebrand.
Carlos Becker (56:30):
So send me name
ideas.
Shay Nehmad (56:33):
Yeah. Just just
imagine just imagine the swag.
Right?
Carlos Becker (56:39):
It's a good swag
idea, actually. Yeah. But, yeah,
thank you for for having me heretoday. It was really
Shay Nehmad (56:46):
fun. Awesome.
Wonderful. That's all we have
for you this week. Join us nextweek.
Although, I might not be on theshow next week. It might be just
Jonathan. And thanks a lot.Program exited. Goodbye.
Program exited. Goodbye.