[go: up one dir, main page]

Cup o' Go

Follow us now on LinkedIn!

★ Support this podcast on Patreon ★

Creators & Guests

Host
Jonathan Hall
Freelance Gopher, Continuous Delivery consultant, and host of the Boldly Go YouTube channel.
Host
Shay Nehmad
Engineering Enablement Architect @ Orca
Editor
Filippo Valvassori Bolgè
Sound Designer / Audio Editor based in Milan

What is Cup o' Go?

Stay up to date with the Go community in about 15 minutes per week

Jonathan Hall:

This show is supported by you, stick around till after the news to hear more about that. This is cup of go for November 15, 2024. Keep up to date with the important happenings in the Go community in about 15 minutes per week. I'm Jonathan Hall.

Shay Nehmad:

And I'm Shay Nehmad.

Jonathan Hall:

Hi, Shay.

Shay Nehmad:

I realized we always have the same Yeah. Wondering if we can slip in, like, different I'm Jonathan Hall, and this is a show about Rust, and people will just not notice. Right?

Jonathan Hall:

Yeah. Maybe. Yeah. Well, we'll try to mix it up for next time.

Shay Nehmad:

Yeah. Keep keep ears sharp. And also, your, train tickets sharp in case you're going to Hanover?

Jonathan Hall:

Oh, yeah.

Shay Nehmad:

That sounds like a trainee place, although I don't know if that's actually true.

Jonathan Hall:

Oh, I'm sure they have trains, that go.

Shay Nehmad:

Wait. Is is a place is a place that has a lot of train trains trainee or rail y? Because most of the time they have rails. Trainee is like if they have a lot of gyms. Anyway, talk about the meetup before I tell any more bad jokes.

Jonathan Hall:

Yeah. So there's a meetup happening November 19, in Hanover. So if you're in Hanover, that's, in Germany. We don't know what they're talking about. It'll be a mystery until you, go to the Hanover meetup.

Jonathan Hall:

I'm sure it'll be a great conversation though.

Shay Nehmad:

Alright. Let's not make it too awkward. Everybody together now. Happy birthday to you.

Jonathan Hall:

You know, when they tell when they sing it

Shay Nehmad:

to you and you're just sitting there, you're like, yeah. Just don't know what to do.

Jonathan Hall:

And it's worse at a restaurant when the waiters and waitresses come out and start doing that.

Shay Nehmad:

I would die. I would die. I was just to get up and leave. Go turns 15. Blog posts on the Go blog.

Shay Nehmad:

Happy birthday, Go.

Jonathan Hall:

This is the big one. This is the quinceanera for Go.

Shay Nehmad:

A quinceanera? What does that mean?

Jonathan Hall:

Quinceanera is a traditional celebration when a girl turns 15 in Latin America. She gets in a formal dress and

Shay Nehmad:

They already passed the bar mitzvah, so now it's quinceanera, next is 18. But, yeah, this blog post, goes deep into changes from the last 5 years and really highlights for me the longevity of, like, the language and processes and the leadership of the language. Right? Because you see, they planned the things 5, years in advance and then, you know, change, for forward loops is part of a 5 year trajectory. Right?

Shay Nehmad:

Forward language compatibility is Go 121 which were introduced by Go 14, like, 114, which was 40s and a half ago. And then 122 introduced the scoped var loop var thing, which we discussed ad nauseam. And, like, it happened in 2 releases. Very, very cool things. Also, about the tooling that they developed while developing these things.

Shay Nehmad:

For example, the hash bisection, which we discussed on the show, where you can sort of bisect code instead of, bisect the git commits. Mhmm. Which we try to understand and, pass through the podcast. Very, very cool things. They also mentioned the opt in telemetry, which was a big change, and I remember it being a big community win as well.

Shay Nehmad:

The enhancements to the standard HTTP router. I just had a a person on my team, the onboarding exercise, you have to develop a small server. Right? Include and put it, like, it's one small part of the exercise. And they just use the standard library, you know, get in post, and I was like, yeah, man.

Shay Nehmad:

Here we go. That just works. It looks so good, so clean, stronger randomness, execution traces, and the first v two, which was a very controversial. Right? And they mentioned a lot of things we talked about here.

Shay Nehmad:

Right? FIPS, which we're gonna talk a lot about next week, and finally with making go better for AI. So the whole last paragraph is about making go better for AI, like building production AI systems and LLM infrastructure. I think it's mostly talking about, like, AI infrastructure, AI applications, not, like, actual AI, workloads. Right?

Shay Nehmad:

Right. Yeah. So very, very cool. And they rounded out with a thank you for all the contributors and the thriving community. So I don't know if I'm a contributor.

Shay Nehmad:

You are. I only did some code reviews and proposals. You actually have some code.

Jonathan Hall:

Tiny bit, like, 10 lines or something. Yeah. Yeah.

Shay Nehmad:

And the thriving community. And I definitely feel a part of that community.

Jonathan Hall:

Definitely a part of that.

Shay Nehmad:

Yes. So you're welcome, Go. Actually, that's an interesting question. Do you feel a language is such a weird concept? Right?

Shay Nehmad:

Because it's first and foremost a business thing. Right? It's a business tool developed by Google. Mhmm. Do you feel like you gained more from Go or gave more

Jonathan Hall:

to Go? Oh, I've definitely gained more from Go than I've given back to it. For sure. I mean, well, okay. Actually, maybe that's more interesting question than I first thought.

Jonathan Hall:

Technically, I have gained more. I've gained a lot from the center library, from the language itself, and so on. I've given back, like I said, like 10 lines of code to the Go project, but I've also contributed to some open source libraries. I've I've maintained a few. And then this podcast and my YouTube channel and my blogging about Go, I I am giving back to the community in that sense.

Jonathan Hall:

That that's hard to hard to say. I don't know.

Shay Nehmad:

I think because Go, like, it is a Google thing, but, like, I'd never felt Google, monetized it and it never pulled me towards Google that much. Like, the biggest thing I can think of is the AI, blog post from very recently. They were, like, they mentioned the Vertex before they mentioned the Azure and AWS and OpenAI for, like, AI applications. And maybe the fact that a lot of Go cloud things are protobuf and Go, so that sort of draws me there, but, like, not really. It doesn't feel like a corporate thing.

Shay Nehmad:

I definitely, by the way, thank you, Go team. I like being a part of the community. I did some conferences and meetups and this blog and blah blah blah and and led some Go guilds at at various companies. Definitely definitely gained more from, like, learning this language than not. I'm wondering if it is actually the case that were I to specialize in a different language, I might be in a really tough position.

Shay Nehmad:

Mhmm. You know, if I were to specialize in Skala and Skala's community is kind of on the wind down. Right? Or if I were to just stay in, like, a very mediocre language that's that's not very hirable or peep people are not building and disting things in, like, it could have, this this choice is not huge because you always can switch, but just the fact that I've been with Go for so long, very cool. It doesn't feel 15.

Shay Nehmad:

It feels very young still. I don't know.

Jonathan Hall:

Yeah. I I mean, I haven't been using it for 15 years, so that's probably part of why it feels younger to me. But but also just, like, sort of the vibe around the language. It still kinda feels new and

Shay Nehmad:

shiny. Yeah. Maybe, actually, just looking at how hard it is to change a single thing about a for loop that bothers everybody takes, like, 5 years. Maybe it's not that young as I we're thinking of it. Yeah.

Shay Nehmad:

Not a spring chicken anymore. Happy quinceanera go. There are still a lot of interesting things to discuss. Let's get on it.

Jonathan Hall:

I wanna call attention to a talk that was done, at Govergogon recently by Cameron Balahan. I think I said that right, who is I believe the product manager for the Go team. He did a talk that, it's really relevant to what you were just talking about called the business of Go and he talks about how, they balance business requirements for Google and the rest of the and how that interacts with the rest of the community. Like they don't wanna build Go just for Google. It really needs to be something that's used by the community.

Jonathan Hall:

So it's a good, expansion on the topic you were just talking about.

Shay Nehmad:

Alright. I'm I'm adding it to my to do. I'll definitely watch it. But first, I wanna finish listening to this episode. So let's finish recording it.

Jonathan Hall:

There'd be a cassette of baseballs, the movie. We're still in the middle of making it. Oh, that's true, sir. What the hell am I looking at? When does this happen in the movie?

Jonathan Hall:

Now. You're looking at now, sir. Everything that happens now is happening now. What happened to then? We passed then.

Jonathan Hall:

When? Just now. Wear it now now. Go back to then. When?

Jonathan Hall:

Now. Now? No. I can't. Why?

Jonathan Hall:

We missed it. When? Just now. When will then be now? Soon.

Shay Nehmad:

Alright. Some updates on past news items. Support for Mac OS 11 in Go 125 has been accepted. No surprises there really. Just if you are building for Mac OS 11, remember to upgrade.

Shay Nehmad:

You should always upgrade to the two versions before the one that's coming out. Right? Can you remind us what's the life cycle, thing in Go?

Jonathan Hall:

Two versions.

Shay Nehmad:

The current Two versions from since what?

Jonathan Hall:

Well, so the current the current version and the one before that.

Shay Nehmad:

These are okay. And the previous ones are not getting security updates anymore, so you don't wanna stick around with them. Right. Cool cool cool. A more interesting discussion is about memory regions.

Shay Nehmad:

Yes. So we're gonna try to, go a bit deep into this one. And if you remember, we already discussed a similar topic when we talked about arenas. The arena experiment that was introduced in go something?

Jonathan Hall:

Yes. It was definitely go something.

Shay Nehmad:

I don't remember.

Jonathan Hall:

I don't remember.

Shay Nehmad:

But I think it was like 3 versions ago. Yeah.

Jonathan Hall:

It was like 1 20 or maybe 19. I don't remember.

Shay Nehmad:

Yeah. So, just to refresh your memory, also this, whole discussion is about memory. What is what was the arena experiment? So let's say you have a workload that needs to, allocate data and you don't want the garbage collector to collect this data. You wanna do it yourself.

Shay Nehmad:

Mhmm. The reason you like, what are the workloads that would be relevant? Basically, just very high performance places where you really try to optimize and the garbage collector is not doing a good enough job because your memory usage is very predictable so you can say, hey, I know when I want to allocate and release this memory. So in other words, region based memory management is arenas, right? You take a part of your memory and you say, I'm in charge of this one.

Shay Nehmad:

No. I think this is not ubiquitous. Right? I think not a lot of people are doing this but I think it's very important that the the language tries to do this in a way that's safer than just, alright just call malloc and free and and do it a 100% yourself.

Jonathan Hall:

Right.

Shay Nehmad:

In Go arenas, first of all, are pure Go and second of all, it's a memory safe implementation. And so far as use after freeze will not result in corruption, only crashes. So you still can shoot yourself in the foot, it's just with a Nerf gun and not with a shotgun. Right? It's gonna crash, but you're not gonna introduce security vulnerabilities or corrupt the memory or things like that, which is better.

Shay Nehmad:

Right? Yep. And everything was solved, and there's nothing else in this discussion. Sounds good. Yeah.

Shay Nehmad:

Yeah. So that's that's obviously not what happened. The proposal to add arenas, is on is on hold and actually on indefinite hold. Yeah. And the reason for that is API.

Shay Nehmad:

So you can't use arenas in all the APIs. It has a few rough edges, but it just composes really poorly with the language in the standard library. Let's say you have an arena that you want to, use memory arenas for. What, what, API in the standard, library you use like this week that you can pull off the top of your head?

Jonathan Hall:

Me? I've used, the JSON encoder or decoder, FMT, of course.

Shay Nehmad:

Oh, so so f m like, JSON is really a good idea. Let's say you, want to decode into a buffer and you just wanna reuse that buffer all the time and manage that memory because the JSON is always gonna be the same and blah blah blah. Right? Mhmm. You don't want the garbage collector to mess with it at all.

Shay Nehmad:

You wanna define an arena. How would you tell JSON that you that you want to pass an arena and not just a pointer? Now you need to change the the API.

Jonathan Hall:

I I would have yeah. I don't know. I I could imagine a couple different ways. One is changing the JSON API. Hopefully, that's not what they do.

Jonathan Hall:

Hopefully, there's like, an IO reader or writer wrapper around some data in that memory, arena or or

Shay Nehmad:

Then you need to change the API for IO reader and writer to make them accept arenas. So there there are a few, rough edges. Basically, for an API to use arenas, it must accept the arena to allocate into. Right?

Jonathan Hall:

Yeah. Yeah.

Shay Nehmad:

Because if you pass a pointer into JSON, that's fine. But if JSON, allocates, some memory itself, then you need to pass the arena, to allocate into.

Jonathan Hall:

Right.

Shay Nehmad:

This is, in a sense, this is why sometimes, Rust APIs look so rough, right, where you have to define it's a box, an RC with a static lifetime, blah blah blah blah blah blah. It's because every API needs to know exactly what it what's it allocating into. Anyways, this is not a perfect analogy. And if you're listening, this is not a perfect analogy. I just don't like Frost APIs.

Jonathan Hall:

The this is the the sort of the problem.

Shay Nehmad:

Right? This is why we're talking about it. So the problem is arenas work, but in order to use them, they compose really poorly with the API. So let's say I I don't wanna resolve it by doing the API. Right?

Shay Nehmad:

What other solutions, can we think of? So the proposal here by Michael Knyznyek, I hope I'm saying that right, is to reduce cost associated with the garbage collector with composability. Like, don't mess up the entire APIs and then and and regions like arenas have to compose really well with things like sync dot pool and the unique thing and they have to work well with optimizations, etcetera, etcetera. The design, very very smart, I think. Very very out of the box thinking.

Shay Nehmad:

Instead of defining arenas, you say, okay, every thread is gonna have every goroutine is gonna have arenas if they want them. If a function is called within the scope of a region like a thread that's, a goroutine that's currently saying, hey, right now I'm in a region, Everything is gonna happen into a region in the scope of that, call. So instead of changing the API, you wrap the API. And when you wrap the API, you change the behavior of the thread itself that runs it. Fascinating.

Shay Nehmad:

Yeah. So this is obviously has a lot of, interesting nuance that we can't go into here, but I think it's a fascinating, read. The the core is that it's a decoration. It's it's it's a very basic design concept that we all learned when we learned, like, you know, like, I don't know if you had a stage in your life or, like, okay, design patterns. Now I need to list design singleton and factory and actor and strategy.

Shay Nehmad:

Right? So the first one of the first one is is you learn is decorate. Right? I'm gonna decorate a function with a different function. It's gonna add some functionality to it without changing the original API.

Shay Nehmad:

That's exactly what we're seeing here, and it doesn't affect the correctness of the code. And it's just saying that the user expects the memory to stay, local and be unreachable and then bypass the garbage collector which is exactly what arenas do in a sense. You get slightly slightly less control but it does functionally exactly what would you would use an arena for. And I thought it was very very interesting. It's recommending a package called region, has 2 functions do, which does the entire thing we just said and, ignore where you can okay.

Shay Nehmad:

Inside a specific function, now don't use a an arena. So if there's a part where you say, now I want the garbage collector to work I want to exclude memory that is known to outlive a specific region, which I thought was very very cool. The API looks simple, but probably there are tons of use cases and edge cases that we're not thinking of. What do you think?

Jonathan Hall:

I agree the API is is dead simple. I'm curious how it works with things like global variables and and I don't know. This is some quarter cases. I'm sure they've thought about this or they will have at least by the time this is accepted. So I'm gonna have to read this in more detail.

Jonathan Hall:

But I guess TLDR, it looks ingenious. I I have questions.

Shay Nehmad:

So although this is fairly fleshed out, this doesn't have a prototype yet. And now they want to gauge interest from the community. This is difficult. Right? This is not gonna be easy to implement, and it's gonna mess up a ton of things.

Shay Nehmad:

So and there's interesting suggestions here. For example, someone suggested, let's use a compiler directive instead of wrapping things in in Go, right, in Go code. That's an interesting discussion. People didn't like that suggestion, by the way. It got a lot of downvotes, because it's sort of less readable and less, you know, Linter, esque, I guess, linter friendly.

Shay Nehmad:

But there are a lot of possible extensions here, etcetera, etcetera, etcetera. I really like it. And some people say this is really cool and I want to even do a Go experiment to make every Go routine a region implicitly. And some people are like, I don't like it at all. Don't bring it to to Go.

Shay Nehmad:

It's a step backward. Let's just improve the GC instead. Let's not do manual memory management. What do you think about this take? I I have a, my opinion, but I'm wondering what do you think?

Jonathan Hall:

I think improving the the GC is great, but it's already pretty darn good. And I can definitely think of cases where I would you like, I would have probably used something like this last week if it was easy and accessible to me. So, yeah, I I don't know why you wouldn't wanna support both if if it's reasonable.

Shay Nehmad:

So, a, the zero sum game of if you're gonna use if you're gonna do something, do that. I don't this is not a productive discussion in my opinion. I do wonder. There's no I feel like I already have a sense when I look at a Go API whether I should oh, it's a super common API or a package. Right?

Shay Nehmad:

Whether I should just use it and it's fine, or whether it's like a super edge casey thing that I never have to use. I don't remember what feature you mentioned, but you said, like, there's some features of Go that you never want to use or never have used or something like that. Do you remember what what I'm talking about? You mentioned it on the show once.

Jonathan Hall:

I I I can think of some features ago I never use. I don't know if these are what I was thinking of when I made the comment.

Shay Nehmad:

So anyway, what I'm saying is, like, it's sort of the case, I feel at least, that if you don't like manual memory management, manually managing your memory is what I meant to say, you cannot use it. But on the other hand, I'm thinking about it and saying, oh, but if they introduce arenas or like sorry, these are called memory regions and suddenly, you know, someone has a really really cool suggestion for, GC optimization and like, ah, but it doesn't work with memory regions so we can't, we can't implement it or we can't introduce it. It it does feel like it could introduce a lot of dependencies and edge cases, etcetera, etcetera. But it's it's super interesting. Really, really super interesting.

Shay Nehmad:

People say, oh, let's not do ignore because, reasoning about programs will be easier. Slightly concerns about using the STD, like why not just use it in run time, etcetera, etcetera, etcetera. Very cool. Whether we can do it in the compiler level, very very interesting discussion, with a lots of participants and I implore the community, to I don't know why this is the community. I implore our listeners to go join this discussion.

Shay Nehmad:

I find this super interesting. Like, I would love to open this discussion in a guild meeting at work, like, with all the Go developers and, like, try to find cases where it's relevant, whether they like the API and sort of imagine how they it would look one way or another, blah blah blah. Very cool.

Jonathan Hall:

So, Sean, you found a job listing that you wanted to talk about. This is a software engineer l 5 listed on LinkedIn. It's a Netflix job. Why did this jump out at you?

Shay Nehmad:

Well, the Netflix logo obviously is very recognizable, but I actually found it because I just looked for the word go on LinkedIn, and I didn't I forgot it was a jobs website. Like, the first thing it brought up was jobs. And then I saw games, and I remembered I don't know. I heard some asshole on a podcast saying that Go is not good for games. So what's the point?

Jonathan Hall:

So, anyway, the point here then is that, Netflix at least thinks that, somebody who knows how to use Go can help them write games.

Shay Nehmad:

Well, let's be fair. It's not a a full Go gig. Right? It's a full stack.

Jonathan Hall:

Full stack. It says go JavaScript TypeScript. And yeah. That's cool.

Shay Nehmad:

Do you think it's a good fit? Do you think it's a bad fit? What's your opinion?

Jonathan Hall:

So I just had a call this morning, with somebody who, a potential client who may have me helping them build the back end of a, a web based game for Telegram and Go. The back end would actually handle all of the game logic. The front end would just display images and stuff like that. So it's not it's not like, 3 d gaming or, you know, we're not talking about Call of Duty here, but, I do think there's a lot of room for Go to do that sort of stuff. And I may, within the next few months, have a lot of experience with it.

Jonathan Hall:

We'll see. Cool. Cool. Cool.

Shay Nehmad:

There are a lot of interesting edge cases when developing games that aren't relevant to, like, real workloads. And the first one I always think of is is maps. Right? You you're not allowed to give every you don't want the client side to show or hide enemies. So you need to know the client needs to tell you where it stands.

Shay Nehmad:

Blah blah blah. Very interesting. I I think Go obviously for the back end is is probably it probably exists in every big gaming company. Right? Like, you think about EA, all these, a wait.

Shay Nehmad:

EA is, Battlefield. What company is Call of Duty? I don't remember. Anyway, like, all these companies for their cloud services and chat and user management, etcetera etcetera, they probably use Go in the back end. Right?

Shay Nehmad:

It's reasonable to say that they use Go. Activision. Yeah.

Jonathan Hall:

Yeah. Yeah.

Shay Nehmad:

I actually don't play a lot of shooters. So

Jonathan Hall:

And I'm doing I've been working for a couple years, almost, with Unity. They use Go for their, their CMS stuff. So I don't know if they have I don't know if they manage their own game back ends, but, certainly, they use Go even at Unity, which is not a Go library.

Shay Nehmad:

For sure. So, obviously, this is not we're not we don't wanna do job listings in the show because that's gonna be a problem. But I just found it interesting. Another place where Go is relevant for games, and I, was humbled by the listeners when, I said Go is not a good fit. Apparently, it is.

Shay Nehmad:

Alright. Off to the lightning round.

Jonathan Hall:

Let's do it. Run out the

Shay Nehmad:

show. Lightning round.

Jonathan Hall:

First off, let's talk about Watermill. Watermill 1.4 has recently been released. Watermill is event driven apps. And go. We'll have a link here to a blog post talking about it and what it's for.

Jonathan Hall:

It's apparently pretty popular at 7,500, stars on GitHub and 55 contributors. If you're interested in event driven development, check out Watermill.

Shay Nehmad:

Very cool. It's always a good topic to be interested in. If you're doing event driven stuff, that probably means you want, things to be idompetent and happen 1 by 1 and a really good package we've been using a lot of work. Well, package. It's a go file in the sync library.

Shay Nehmad:

It's called single flight. And if you're unfamiliar with single flight, I just put the link to the Go file in the show notes. Just go read it. It's very short and you can just understand it, but it's basically if you have multiple Go routines trying to do the same thing, that's not allowed, it'll tell them to patiently wait in line. It's very relevant for a lot of apps and it's also super super easy to use.

Shay Nehmad:

Just an underrated, like, feature of the language I want to bring up. And finally, a link from one of our, Slack members over at cup dashodashgo on the go for Slack.

Jonathan Hall:

Yeah. Are you familiar with Brain Rot? I mean, I don't we know what happens when you don't have coffee.

Shay Nehmad:

Yeah. For sure. I think I'm too old. Yeah. I know some of these words, like ratio.

Shay Nehmad:

I know ratio. It's it's when you, like, comment on someone's tweet a bit too much, and it overtakes the likes. So it's like, oh, ratio, but not a lot beyond that.

Jonathan Hall:

Well, this blog post is about how to create a brain rot language server using go. So if you're familiar with, the concept of a of a language server, LSP language server protocol, which is basically the language that, tools like go please speak to Versus code, for example, You can read this through this blog post and learn how to sort of build a prototype or a working example, brain rot language server using Go. So it's it's an exercise in learning how language servers work.

Shay Nehmad:

Oh my god. For real for real. This library is all rizzed up. Bet, ain't no cap. It's very good because there's a literally a map called map string to brain rot entry and every brain rot entry is a term in the description.

Shay Nehmad:

So this is actually a good way for me to learn about the youth of today.

Jonathan Hall:

Which are big brain rot. Are they older or younger than Go at this point?

Shay Nehmad:

Oh, you know what? There might be listeners who were who are super strong developers in Go, I'm sure, or younger than Go at this point listening to the show.

Jonathan Hall:

If that's you, come let us know on the Slack channel.

Shay Nehmad:

Or or maybe not. Maybe the Oh, maybe not. Broadcast the fact that you're a minor on the Internet. Maybe that's not a good idea.

Jonathan Hall:

Yeah. We'll we'll wait 3 years to to do that challenge. For sure.

Shay Nehmad:

If you wanna put in that line of code, right, you can put it in now and then it's gonna go through, like, 2 versions of of, forward compatibility and then 2 versions of releasing it. It's gonna be around your birthday. Alright. That's it for the news today. Let's move to the ad break.

Shay Nehmad:

Let's do it.

Jonathan Hall:

First off, in the ad break, I have one thing I wanna talk about, Shay. I don't I don't think you've even seen it yet, but I created a new LinkedIn page for the podcast.

Shay Nehmad:

So you can fight maybe you can post, as the company when you fight with people. So it's not it looks more legitimate.

Jonathan Hall:

There's nothing on the page yet, except our logo. But, when I have a chance

Shay Nehmad:

The old logo that is because you're using the bad PNG.

Jonathan Hall:

Which is the same one that's on, kapako.dev apparently. Anyway, we intend to automatically publish every episode to that page like we already do on Mastodon and Twitter. So, if you're if you prefer LinkedIn over other social media, be sure to follow our LinkedIn page.

Shay Nehmad:

And even if you don't really like LinkedIn, like myself, hopping on and, like, pressing follow and, I don't know, re what's it called? Reposting? Retweeting? Sure.

Jonathan Hall:

Yeah.

Shay Nehmad:

Reposting. Reposting, like, the first thing we'll put here, it would be really cool because LinkedIn is a professional network, and I think it might be a good place to meet some other, people and, like, get more listeners to the show that we sort of haven't exposed the show to before. Right? So that could be cool. You have a really, like, big LinkedIn presence.

Jonathan Hall:

LinkedIn is my go to social media, not because I particularly like LinkedIn, but I I hate it less than the other options.

Shay Nehmad:

That's a that's a good reason to

Jonathan Hall:

I actually just deleted my my Twitter profile, a week or two ago because, I was so tired of being spammed on there.

Shay Nehmad:

Good for you, question mark?

Jonathan Hall:

I don't know.

Shay Nehmad:

It's all good. I I I, unfortunately, have to stick with my Facebook account, because it's connected, stupidly, it's connected to my Stack Overflow account. So I don't wanna lose that. Maybe I can reach out to support and say, like, hey. I wanna delete my Facebook.

Shay Nehmad:

But I don't know. Maybe Facebook is useful for some things.

Jonathan Hall:

Maybe we need a Facebook page for Cup of Go

Shay Nehmad:

2. No.

Jonathan Hall:

I haven't used Facebook in years. I mean, I still have an account, but I don't use it. So, anyway I think it's enough about it.

Shay Nehmad:

I think it's true for everyone. Alright. Other than reaching us via LinkedIn, we wanna say a lot of thanks to our Patreon supporters. Thank you, fam. That's very lit of you.

Shay Nehmad:

Furio for real. No cap. If you wanna support the show financially, you can drop us, $8 a month by joining as a member to the Capaco community over at Patreon. And if you wanna find that link, you can find it at capago.dev where you can find the links to everything. The Slack, the LinkedIn, the Patreon, the swag store, the email, the past episodes, the whole shebang.

Shay Nehmad:

Really looking like a real podcast after 2 years or so.

Jonathan Hall:

Yeah. It is.

Shay Nehmad:

If you're into email, that's solely cool. News atcapago.dev. That is news atcapago.dev, and you can send us an email.

Jonathan Hall:

We would also appreciate if you would leave a review or a rating for us wherever you listen to this podcast, whether it's on, Spotify or Apple Music or iTunes. Is that

Shay Nehmad:

the same thing? Apple Podcast.

Jonathan Hall:

Apple Podcasts. Yeah. I'm not a I'm not in the Apple ecosystem, so I just.

Shay Nehmad:

Yeah. If listeners haven't heard, John uses Linux. He just wanted to mention.

Jonathan Hall:

You mentioned that far more than I did. Alright. Yeah. So leave us a review. Leave us a rating.

Jonathan Hall:

Send us your feedback.

Shay Nehmad:

Thanks a lot for listening. That does it for our show this week.

Jonathan Hall:

Program exited. Goodbye.

Shay Nehmad:

Program exited. Goodbye.