A totally racist episode so cache(sh) me outside how bout dah?!
So Filippo, make do your editing magic to make this not sound like we don't know what we're doing, but one more to mention. And what and
Shay Nehmad:also the part also the part where Jonathan says, make your editing magic to
Jonathan Hall:make it sound like we know what we're doing. Would be
Shay Nehmad:a perfect hook for the episode. Just put that at the start. This
Jonathan Hall:is Cup of Go for 09/18/2026. Stay up to date with important happenings in the Go community in fifteen or twenty minutes per week. I'm Jonathan Hall.
Shay Nehmad:And I'm Shay Nehmad.
Jonathan Hall:Hi, Shay. How's it going?
Shay Nehmad:It is going alright. It's like the Alaska air. It's going a for amazing, b for beautiful. Meanwhile, you're, like, in group f trying to guess, are they actually gonna say f
Jonathan Hall:for all. Filippo, you have
Shay Nehmad:to bleep that. I'm sorry. Bleeping stuff already at the beginning of the thing. That's why I fly Southwest. This episode is brought to you by Southwest.
Shay Nehmad:No. I'm just kidding. Although, Southwest, if you wanna sponsor us, we're down. But I'll need the plane tickets for all these, conferences we wanna talk about and meetups. Yeah.
Jonathan Hall:Yeah. Yeah. So on that topic, we're gonna be talking about some conferences and meetups today. We're gonna talk about a couple blog posts. Yeah.
Jonathan Hall:We don't have a long list, but we the blog posts will take a while, so so buckle up.
Shay Nehmad:There we go.
Jonathan Hall:Fasten your seat belt if you're in an exit row.
Shay Nehmad:Yeah. You're a production deploy today, make sure that you are physically and mentally able to perform the deployment.
Jonathan Hall:And if you're actually listening to this as you're boarding a plane, be sure to comment down below and like and subscribe, all that good stuff. Yeah. There it is.
Shay Nehmad:Take a selfie posted to the Slack channel.
Jonathan Hall:Alright. If
Shay Nehmad:you're listening to this while you're piloting an airplane, please Yeah.
Jonathan Hall:Yeah. We don't wanna be responsible for what might occur.
Shay Nehmad:Just like watch the road or the street or whatever.
Jonathan Hall:Alright. First up, I think we mentioned was it last week or a couple weeks ago? We might have mentioned this when we were talking to Ron Evans. Isn't he gonna be speaking at Golab? Yeah.
Jonathan Hall:So you could go listen
Shay Nehmad:to him. Italy.
Jonathan Hall:Yeah. Listen to him talk Tiny Go on November one through three in Italy at Golab. Golab.io. If you don't want to fly all that all that distance, or maybe you live there in Bolgdia and you want to fly somewhere, Where could people go to to maybe meet you, Shay?
Shay Nehmad:Yeah. So there are actually two meetups coming up in Go SF. So I've sort of taken the the Go SF group under my wing together with someone else called James Heller, Kinda died over COVID and I I arranged some meetups and interest has really peaked, peaked like p I q u e d.
Jonathan Hall:It's not it's not like peaking like a peeping dumb?
Shay Nehmad:I don't think so because I think it's only gonna go up. People are really want these meetups and they wanna talk and they want them to happen more often. Mhmm. And as a result of that, we have two meetups coming up, which is like, yeah, I have two planned out, which is new. Because so far I've planned one out, then I finished it and then like a month later I was like, ah, maybe I'll do another one.
Shay Nehmad:But we have two. The first one is coming up real soon, with Bill Kennedy, friend of the show. We had him on.
Bill Kennedy:He's living on airplanes, flying all over the planet, doing go training, everywhere up until about that. My last trip was, Athens and Israel in March '20. So, I I own a with a partner, I own a company called Art and Labs. We're primarily a consulting
Shay Nehmad:Yeah. So the first meetup is, hosted by Antithesis, also friends of the show, actually, which was, who was also on our show. We're super happy to have cup of go at Antithesis this week. We make a platform for ensuring that your code works correctly, even in situations that you did not anticipate. We do that by actually running your whole multi container system in a special virtual machine, injecting realistic faults, and then actively looking for bugs.
Shay Nehmad:And, yeah, the main talk is gonna be by, Bill, and he's gonna do self hosted LLMs in Go. And there's gonna be a raffle. We're gonna raffle one of our dance labs, ultimate Go bundles. So that's gonna be dope. After that in November, we have another meetup at assembled, which I was there for a few AI events.
Shay Nehmad:They're a really, really, like, a good event place. They're they're I assume they're a great company too just by the nature of the events and people from their company who came to the events. Where talks are still to be determined, I have some lined up already, but I think I can slot on one or two more. So if you wanna speak at the conference, you should come. It's November 5 at assembled.
Shay Nehmad:Two meetups in San Francisco coming up to And plenty of
Jonathan Hall:time to the plenty of time to fly from Bolgnia to San Francisco between 11/03/2004. You got a whole travel day in between, so there's no excuse to not do Ilhao and
Shay Nehmad:San Francisco. On October to San Francisco, then you can take a boat, I think. You have a month to get to to Italy, for sure. Unfortunately, one meetup you won't see me at is the Go For Con Israel, which got canceled.
Jonathan Hall:Oh, dear. Not enough interest in Go anymore where everybody switched to TypeScript in Israel. What's going on over there?
Shay Nehmad:Honestly, I don't know. Okay. I think the the post says, tech conferences worldwide are struggling and we're no exception. I think it's mostly like a sponsorship, thing. Yeah.
Shay Nehmad:We used to be like, more community aware and and help the con happen, but I guess the companies, you know, they're really come all the bean counters are ruining our conferences.
Jonathan Hall:Yeah. Yeah.
Shay Nehmad:That sucks.
Jonathan Hall:Tight times.
Shay Nehmad:I hope next year will happen though.
Jonathan Hall:The last one to mention, we already mentioned this one before as well, but we'll do it again to round up our conference roundup. Tiny Eagle conference is happening in Japan October 10 in Tokyo. So if you're interested in that, and I don't think I think it's in English, probably some Japanese happening there too. But if you're looking for an excuse to visit Tokyo, what what could be better than a tiny go conference and some sushi?
Shay Nehmad:And you could make both. You could do October 7 in San Francisco and Yeah. October 10 in China.
Jonathan Hall:None of these conflict. You can do them all. And if you do, we will give you a free cup of go T shirt. Just send us photos send us photos of of you at each of these events. We've mentioned all four of them, and you'll get a free T shirt.
Shay Nehmad:Sounds sounds like a worthy prize.
Jonathan Hall:Definitely. Definitely worth the, like,
Shay Nehmad:$5,000 in air travel or whatever it is.
Jonathan Hall:That's right. That's right. Alright. Enough about conferences. Let's talk about some blog posts.
Jonathan Hall:The first one I
Shay Nehmad:want It's, serendipitous that you mentioned these won't conflict. You're saying that there's no race between them. Right?
Jonathan Hall:Yeah. Yeah. You don't even have to race between them? I don't know. I'll stop with the puns now.
Shay Nehmad:My, show and tell, I I've I've, starting to feel like this, show is becoming a show and tell. Here's what I brought to class today, is this really, really good blog post by Phil in, Dataraces and the Limits of Thread Sanitizer in C and Go. So I think a little bit of, you know, maybe a preamble is needed to to work through this blog post. First, what is a data race?
Jonathan Hall:It's you want a serious answer or a sarcastic one? Because I'm trying to decide which one to go with. I'll go for a serious answer because I'm not thinking of the sarcastic one right now. So it's when you have a piece of data, sorted memory somewhere that is being both written and read at the same time, or maybe being written by two or more processes at the same time. Yeah, so if we're to give a potential inconsistency.
Shay Nehmad:Yeah, so if you Exactly. So the problem is two things try to write it at one. So two threads read the number, let's say, 10, and then they increase it by one, and then they both write 11 even though you would expect it to be 12 because you add it twice. Mhmm. And writing Go code that does this is actually very simple.
Shay Nehmad:You just create a variable, let's say, count. Right? Int.
Jonathan Hall:Mhmm.
Shay Nehmad:And then you write to Go routines by doing Go func counter plus plus twice, and presto, you have a data race. So apparently, there's a thing and also in Go, this is true for all languages. Right? Or I guess most languages. To gain confidence in this, like, concurrent code, you'd wanna enable a race detector, something that, like, looks at your code and tells you, do you have any data races?
Shay Nehmad:Because these bugs are, really bad usually. You wanna avoid them. And in Go, we have the race detector and apparently it and I learned about this through this, blog post. It relies on a thing called the thread sanitizer. So it this thing called thread sanitizer went through a bunch of iterations with it's not a go thing.
Shay Nehmad:It's an LLVM thing. So it's like even a lower level. There's a lot of different race detectors. This blog post walks you through, like, you know, how they were developed and their limitations and whatever. It's very detailed.
Shay Nehmad:So I'm not gonna try to go through it in this podcast because it'll take like an hour. That's not to say that you shouldn't read it. I think you should read it. I think it's really, really good. But to try and summarize it, so you have these, like, data races.
Shay Nehmad:Right? Mhmm. How does the race detector detect them?
Jonathan Hall:So how would you,
Shay Nehmad:like, implement the race detector?
Jonathan Hall:If I were if I were being asked to implement this in a job interview, what would I do?
Shay Nehmad:That's actually a pretty good job interview question.
Jonathan Hall:I don't know what it is, but I'll pretend that it is. But if
Shay Nehmad:your job is to implement
Jonathan Hall:Yeah. If if if your job is like, yeah, is data safety, then maybe it is. So, I mean, the one thing you could do is is, like, detect try to detect when something changes unexpectedly, but that seems hit and miss and and difficult. So I suppose I would I would probably want to to detect when a read begins and ends and when a write begins and ends and see if they happen at this if there's an overlap, maybe. I imagine that would that would kill performance, but that that's okay for for race detection, I I imagine.
Shay Nehmad:So that's exactly how it works. Your your intuition is is, alright, and you'll move on to the next step at our company. Now please tell us, how would you think outside the box if I locked you in a box? No. I'm Anyway, so the thing every time a go routine reads memory or, writes memory at a specific address or acquires or releases a sync primitive like a lock, right, you just insert extra instructions into your code.
Shay Nehmad:So you compile it with literally with like, please write down to the side which goroutine reads which data from which address or writes and whether it acquired or released some sync primitive like a lock. And then ThreatSanitizer, like, just looks at that at the output of these extra instructions, even if the program produced the correct result, like by accident, because these data races by nature depend on when the Go routines like switch context. Right? So they might switch context like totally correctly. But if it's written that, you know, both of them read and wrote memory without grabbing a sync primitive, you could say, well, theoretically there would be a data race here and detect it.
Shay Nehmad:Now, how would you do this like, This is again something I learned from this article, which is really more complicated than I thought it would be, is, something called vector, clocks. Each thread like has a time counter, so it's not really a wall clock. It's more like of like a just a thread clock, but also a vector clock where I'm like measuring what's the time for all other threads. With a global mapping of which addresses, which thread, less read and less write, you can like sort of compare them. And whenever you grab a mute a mutex or you exit a thread or whatever, you increment the threads clock.
Shay Nehmad:And then that's how you you compare these vectors and that's how you know if if there's a data race. Now this is a very simplistic explanation. There's code in the in the article that you should, like, check out. And as always, when you pop the hood on one of these things, like the data race detector or anything else, you start having questions. Right?
Shay Nehmad:Like, wait, how how long can the vector be? What happens if I spawn 10,000 threads? Like, each of them holds 10,000 rows and whatever. What are the limitations? And this is the part I actually didn't know.
Shay Nehmad:These things don't like work perfectly. The race detector doesn't work if you
Jonathan Hall:have more than 255
Shay Nehmad:goroutines apparently because No. Interesting. It's gonna lose the race. It's lose the race in the sense that it's not documented. And there's a demo in Go in the in the blog just because ThreadSanitizer has a limit of how many, threads it's, tracking and then circles back around.
Jonathan Hall:Okay.
Shay Nehmad:If you go past two five three, which is surprising, you'd expect it to be two five five, but two but one is the main thread and two is the writer thread of these extra instructions. If you have if you go over two five three and then two five three and two five four, Go routines have a data race
Jonathan Hall:Mhmm.
Shay Nehmad:It won't it it won't notice it.
Jonathan Hall:Interesting.
Shay Nehmad:Isn't that crazy?
Jonathan Hall:Yeah.
Shay Nehmad:I mean, it makes sense, of course. It's not really a limitation of of Go itself because you can have more than 255 Go routines. Right. Also, weirdly, you don't have to have 255 Go routines at the same time for this to fail over. So if your tests, you know, send the 255 let's say, you know, let's call it, half of that web requests.
Shay Nehmad:And every web request spawns to goroutines enough that you'll fail over.
Jonathan Hall:Right? Uh-huh.
Shay Nehmad:And cause this case. They don't have to all be running at the same time for this to happen because the thread sanitizer does this. It doesn't have like a limit of concurrent 255. It's just the way it writes these vectors.
Jonathan Hall:Yeah. Interesting.
Shay Nehmad:I wouldn't I would have never thought about it. And also, it raises an interesting question. Like, should you not use the race detector because it's not perfect? What I don't know. What do you think?
Jonathan Hall:I think you should still use it, at least in tests. I mean, it's it's all I mean, I've always known that it doesn't prove like, it its failure to trigger isn't proof that there's no data race. Right? You can still have data races that it doesn't detect all the time. That's why they look like flakes when you catch one in CI because it only catches it if it actually happens.
Jonathan Hall:I just didn't know that Definitely. Having too many go routines was the reason it might not happen.
Shay Nehmad:Yeah. Definitely, the recommendation is to keep running, go test with minus rays if you care about it. Yeah. But, like, when, why a race might go detected? You say like, oh, it's it looks like flakes and it the fact that the data race detector didn't flag it doesn't mean it doesn't exist.
Shay Nehmad:The first reason might be the the simplest one, coverage. Right? There's a path of the code that triggers the race and your tests don't cover that. Although I assume, you know, you being a testing like theorist, you'd be like, you should just write more tests to do that, right?
Jonathan Hall:Maybe. Although I don't I don't tend to focus on coverage stats when I when I write tests, which is a whole other thing I say. A 100% coverage, Andy? No. No.
Shay Nehmad:Yeah. Me neither. But it is it is nice to look at it, like, once a month in your major project, Just be like, is there an area I'm neglecting that I but anyway. So you might not detect it because you're missing coverage. You might not detect even if you're covering it that you're missing some specific interleaving.
Shay Nehmad:Right? Like, you are running technically all the lines in your tests, but your tests specifically don't exercise the execution pattern that will expose the race.
Jonathan Hall:And that and that's one of the reasons I don't believe in a 100% test coverage because it doesn't mean anything for for
Shay Nehmad:what Exactly.
Jonathan Hall:That being one of the reasons,
Shay Nehmad:Yeah. Not the only one, but one. Surprising to me after, reading this article is that there might be detector limitations on the data race detector side as well, mostly because of thread sanitizer because thread sanitizers might lose some information or misinterpret some information that, report them. So I knew about the first two, which are like my fault. Right?
Shay Nehmad:My tests are not good enough so they don't detect enough data races and that's like skill issue. Right? If I want to detect them, I should invest more time and effort into writing better tests. But apparently the detector has limitations of its own, which is really cool. You know, there are some cases where even thread sanitizer itself is not deterministic, which to me was very surprising because I thought the whole point is you put these instructions in when you run the minus race, it sort of alleviates the the flakiness because you literally write I told people before in the past, you add a read and write, like instruction when you pass the minus, raise flag.
Shay Nehmad:So it completely alleviates flakiness. Apparently that's not true. The threat sanitizer also has cases. I have to admit that I didn't even fully understood that case. But if you involve a mutex with misleading ordering between operations, thread sanitizer, according to the blog post, detected 14 out of a thousand runs in that experiment.
Jonathan Hall:Wow. Okay.
Shay Nehmad:It's one constructed to contrived example. So it's not like I wouldn't say that's a general stat for threat sanitizer or anything like that. It's still very interesting. Like you said, no race warnings does not mean no races, but still, of course, running race detector, is important. I was wondering if you think because running with the minus race flag is slow.
Shay Nehmad:Right? It's definitely slower. Yeah. Would you take it even slower if it detected more bugs? Let's say it's Yeah, I would.
Shay Nehmad:50 times slower, like very significant.
Jonathan Hall:I suppose it depends. Like, I would want that to be opt out or opt in. In general, yes, I would prefer slower for more correctness. But I probably wouldn't like if it was 50 times slower, I probably wouldn't want that on every run or for all code paths all the time, depending on the project and how slow the test suite is already. Yeah.
Jonathan Hall:Most of my slow chess, though, are waiting for IO. They're things like waiting for databases or network calls or the sort of stuff that we talked about with Peter Downs when he was on the show a few weeks ago, talking about testing with Postgres and stuff like that. What usually slows How my
Shay Nehmad:about optimizing stuff? What is that? A blog post from Peter Downs? Oh, yeah. About optimizing stuff?
Jonathan Hall:Now that you mentioned it. So, yeah, we got this blog post from CloudX where Peter Downs works. Peter Downs and Lucas Schwab, thanks for writing this post called Scaling GoLing CI by Replacing ActionsSetup Go. Do you use GitHub Actions, Shay? Begrudgingly.
Shay Nehmad:Yeah. You know what? That's that's like so unfair. It's a crazy well built system. Yes.
Shay Nehmad:I use, GitHub Actions, and I I love CI. Sorry. It's so easy to to crap on GitHub recently. Anyway, yes, I use GitHub actions and I'm thankful for them.
Jonathan Hall:Yeah. Okay. So anyway, there's there's this little known thing. I didn't even realize this, but if you use their GitHub actions default setup go action, is that what they call it? The little thing you can like Yes.
Shay Nehmad:Action slash
Jonathan Hall:dash setup dash go. It's the thing that downloads Go and sets up your Go environment for you automatically so you don't have to bother doing it all yourself. Well, it caches your your some of your artifacts, your GoMod cache, your compiled outputs and for tests, your test runs. It caches these for you automatically. It's already the Go tooling does this for you too on your local machine.
Jonathan Hall:But in a CI environment, of course, you have an ephemeral environment. When that run is done, everything's gone, right? So this action caches that for you so that you can retain some of that cash between runs so each run is faster. At least that's the theory. The article here starts out by explaining how they cache this and how that works by default.
Jonathan Hall:Basically, the first time you run one of these actions, it will create that cache, and then it uses that cache every time it runs again until the cache key changes.
Shay Nehmad:That's how caches work.
Jonathan Hall:That sounds right. That sounds pretty reasonable, right? The problem here is that what it caches, the cache key is defined by the operating system, architecture, the version of Go you're using and your go. Mod file essentially. A lot of the stuff that you do on your project doesn't change those things.
Shay Nehmad:Obviously, if I change my Go mod, I need to, like, reinstall the Go dependencies. So this is this it's not like this cache key is incorrect. It's not leaving.
Jonathan Hall:No, it's not incorrect. It's just it's just that it it leaves you with a stale cache a lot of the time.
Shay Nehmad:Oh, how so? Because if I don't change my go mod, why would the Oh, because it's a build cache. It's not just a dependency Right.
Jonathan Hall:And your test cache in particular. Right. So the build cache and the test cache, what you're building changes every time you change a comment or add a new new feature or fix a bug or whatever. All those things don't touch any of these cache key values, but they change what actually is built, which means that every time you do that, you're running on an old cache. Mhmm.
Jonathan Hall:So then furthermore, actually, Can me just take a
Shay Nehmad:ask you something? Yeah. Said when you change a comment, your build changes. Is that true?
Jonathan Hall:It should be. Yeah. For that file in that package. Doesn't it doesn't invalidate
Shay Nehmad:Impacts the build out.
Jonathan Hall:No. It doesn't it doesn't change the build output, but it changes the cache key that the is used because it uses the hash of the file of the source file.
Shay Nehmad:Got it. Yeah. Yeah.
Jonathan Hall:Yeah. So you're right. It doesn't change the output. So you have two keys that point to the same output in that particular case.
Shay Nehmad:Got it. But the rest of the obviously, if I change the code, then it built to a different thing. Right?
Jonathan Hall:Right. Right. So you fix that race that your race detector discovered and now your cache is completely invalid or that part of the cache is invalid because you fixed the thing. But then when you go upgrade your go to mod to pull on the latest dependency version, then you get a new cache. So you're better off for a while until your cache gets stale again.
Jonathan Hall:So what they've done at CloudX is they've built their own drop in replacement for this that gives you a different set of trade offs. Basically, it appends to the cache every time. So you're getting the freshest possible cache every time you do go test or go build or go mod download or whatever, right? Any of these things that touch these free cash things that gets updated and appended to every time you do something. So you have much faster execution.
Jonathan Hall:And they have a graph here that shows that their average build time went from a 100 around a hundred and thirty five seconds to forty five seconds just by switching from the official GitHub action to theirs. That's that's pretty impressive. The
Shay Nehmad:How much? How much did they improve themselves? You're saying from a hundred thirty five seconds to forty five seconds? Yeah. Oh my god.
Shay Nehmad:That's really a big improvement.
Jonathan Hall:It is. Yes. Cool.
Shay Nehmad:That doesn't sound like a trade off. That sounds just straight better.
Jonathan Hall:The trade off is disk space. Oh. Because this is an append only cache, it means that that cache continues to grow potentially indefinitely unless you clean it up every now and then. You'll need to be careful about that unless you don't mind just paying an infinite storage fees over, you know, the course of ten years or something like that. But overall, that's for most workflows, that's probably a reasonable trade off.
Jonathan Hall:Disks are usually cheaper than engineers' salaries, so you can afford to let your cash go to several gigabytes before you have to clean it up rather than paying your engineers to sit around waiting for CI jobs to run.
Shay Nehmad:Yeah. This is true for the normal action setup go thing too. It's just it grows way slower because it caches fewer things. Like, it doesn't prune itself.
Jonathan Hall:It doesn't prune itself automatically. You still you'll still end up yeah. You're right. You'll still end up with some some stale cache files. I don't know if GitHub cleans those up over time eventually.
Jonathan Hall:They they say that
Shay Nehmad:it doesn't in the in the blog post, but maybe maybe they do.
Jonathan Hall:I don't know. The the important distinction, though, is that the cache key is GitHub version changes on GoMod or the operating system architecture, etcetera. Whereas they have a different cache key from the CloudX version that is persistent across those things.
Shay Nehmad:Is this fancy new action open source? Yes, it is. CloudX IO. Yep. I'm gonna start it and I'm also gonna put it in the show notes.
Shay Nehmad:But to be fair, I haven't tried it out yet myself. Are you gonna are you gonna port your thing
Jonathan Hall:to don't use GitHub Actions on any projects right now, so I probably won't now. But next time I'm using GitHub Actions again, next time I'm using GitHub Actions again, I would definitely look into it.
Shay Nehmad:Cool. Well, data races and CI improvements, two, interesting tools you could talk about at lunch or coffee break with your other gopher developers. We have a few, lightning round items, and we have a lightning round, like, musical cue. So cue the lightning round musical cue. Lightning round.
Shay Nehmad:Alright. Before we get into those, we have, three small items. This show is supported by you, like we mentioned. If you want to support the show and help us to continue to do the things we do, you can support us financially via Patreon. You can find links to that in dev.
Shay Nehmad:That is cupogo.dev. Thank you very much to all our, Patreons that help us, keep this show afloat, and, it's it's incredibly useful, and helpful. So thanks, everybody.
Jonathan Hall:One other thing I should mention before we get to lightning round. Again, we went to this last week, but I started a new podcast. One episode is out so far. The second one is on the way. It should be out possibly by the time you listen to this probably by next week for sure.
Jonathan Hall:The podcast is called Better Than Vibes. It's Better
Shay Nehmad:Than Vibes.
Jonathan Hall:It is people teaching me to go yet? Can I No? I don't. You wanna give me one? I would love I would love that.
Jonathan Hall:The concept is basically teach me about how to use AI to code better. So if you have some unique insight you'd like to offer, reach out to me. I'd love to have you on the show. I'm also looking for clients. So if you would like to have a a Go developer on your team, you know me pretty well by now.
Jonathan Hall:You know what I'm good at, what I like. If you think I could be an asset to your team, reach out to me on that too.
Shay Nehmad:Highly recommended. Boldlygo.tek is where you'll
Jonathan Hall:find boldlygo.tek. You can find me, you can find my daily email there, you can find my contact deets, all that good stuff.
Shay Nehmad:One more time, there's boldlygo. Tek. And if you use the coupon code Jonathan will work for you for a year for free. Wow. Just kidding.
Shay Nehmad:Just kidding. It'll only be three months. Anyway, let's go to the
Jonathan Hall:lightning round. This week, first up on the lightning round, Ebit engine? Ebit engine? I don't know how this is pronounced.
Shay Nehmad:I think it's EBIT.
Jonathan Hall:Ebit engine. Ebit engine? That that probably makes more sense. It looks it also looks like EBITDA, like the financial term. Right?
Jonathan Hall:Yeah. Anyway, EBIT engine, we're going with that for now. EBIT engine version 2.10 has been released. But what is EBIT engine? It
Shay Nehmad:is Game development thing.
Jonathan Hall:Yes. It is a two d game development engine written in Go. So if you want to build your own Super Gopher Brothers clone or Flappy Gopher or Angry Gophers or any of these sorts of two d games in Go, EBIT engine 2.10 will do it for you.
Shay Nehmad:And the new thing in 2.10, is that it's pure Go, so you don't need Seagull anymore.
Jonathan Hall:That's pretty cool.
Shay Nehmad:I think it makes cross compilation way easier. Right? You just have to worry about so so many fewer things. Is that how you say it?
Jonathan Hall:Sure. Yeah.
Shay Nehmad:My lighting art item, I don't know how to how to talk about this one because it it's, like, lacking numbers. But I saw this tweet from Zeno Rocha, the founder and CEO of Resend. Resend is like an email sending thing, not sponsored, we don't know him. We have always been a TypeScript company, which is a weird way to describe your company, but I guess if you're a developer tooling company full of developers, like that's a good way to A few months ago, we changed our internal email pipeline to be powered by Go. And then there are some, numbers.
Shay Nehmad:The numbers are not in relation to the previous, like iteration of the software, so I don't know how to,
Jonathan Hall:how
Shay Nehmad:to think about them, but they do say p 99 of twenty six milliseconds, which does sound good to me. And then choose whatever language is best for the problem you're solving. I don't know. I thought that was interesting. It's a classic like, okay, there's a project written in TypeScript and to make it faster, we moved it to go.
Shay Nehmad:But the messaging here seemed interesting, like the founder putting it out on Twitter, I guess it's a developer focused company. If any of our listeners know Zeno, you should come on the show, man. That would be cool. We would love to have you tell us about this migration.
Jonathan Hall:Yeah. It's it's like the before and after without the before, so we we don't really know how to compare, but it is after looks good. After is yeah. The after looks good. So.
Jonathan Hall:What other things look good?
Shay Nehmad:What other things look good in our lightning round?
Jonathan Hall:Yeah. So one other thing I'll mention, even though I I promised Andy he couldn't be mentioned on the show for six months when I saw him at Go for
Shay Nehmad:Con. Raising his rate limits.
Jonathan Hall:We're letting him through. Andy Williams did fine conf about a week ago, I think, yeah, in The Netherlands. And sadly, I don't live there anymore, so I didn't get to go. But his talk about when applications design themselves is up on YouTube now from the Fun Conf conference about GUI applications written in Go designing themselves. I've
Shay Nehmad:listened
Jonathan Hall:to the first few minutes of it. Haven't gotten all the way through yet because I had to record a podcast of my own.
Shay Nehmad:Aye aye. That But
Jonathan Hall:I'll I'll listen to
Shay Nehmad:the rest here in just a few minutes. Cool things. Andy, we we've got our eye on you. These are the two mentions in a month. Yeah.
Shay Nehmad:No. I'm just kidding. I love, I love Andy. A really good public speaker. I've heard him speak in, official and unofficial places to a crowd.
Shay Nehmad:I don't know if it's just a British accent, but probably also because it's sort of like a- You
Jonathan Hall:might get in trouble for saying that, he's not British. Well, okay, he's he's British. I guess he's British. He's Scottish. British.
Jonathan Hall:So he's not English, he's Scottish, right?
Shay Nehmad:General, you know, Great Britain. Is that right?
Jonathan Hall:There you go. Yeah. So he yeah. He Scotland is part of Great Britain. So I guess it is British, but I don't know.
Shay Nehmad:Think it's
Jonathan Hall:a little
Shay Nehmad:bit more than the accent. He's he actually talks about interesting things too.
Jonathan Hall:He he actually is interesting. He doesn't just have an interesting accent. Yeah. Alright.
Shay Nehmad:That does it for Cup of Go for this week. I'm excited for next week because next week, I'm I might be recording a couple of podcasts. What? They're interesting. If you want to hear more or have any comments or anything to tell us, please come to the Slack.
Shay Nehmad:People have been commenting on YouTube, and I think some people have been commenting on, Apple Podcasts and whatever. I think I saw that. We don't we don't check that, my people's just Slack and email. That's the only way to actually
Jonathan Hall:talk to us. I've checked the YouTube comments once and twice. Yeah. Physically is a good way to to talk to us too. Yeah.
Jonathan Hall:So alright.
Shay Nehmad:Alright. Program exited. Program exited.
Creators and Guests
