🇰🇪 yield(RC2, 1st GopherCon in Africa, LLMs, Dreams of code, and more)
This show is supported by you. Stick around till the ad break to hear more. This is CapaGo for July 1920 20 20 4. Keep up to date with the important happenings in the Go community in about 15 minutes per week. I'm Shay Nehmad.
Jonathan Hall:And I'm Jonathan Hall.
Shay Nehmad:Welcome to release candidate 2. Yay. Go 123 is, moving forward. As usually happens in these sort of times, we're read a bit less focused on new proposals and new things, and everybody's just trying to fix every tiny little bug or typo to make sure that the release is great. So obviously, we don't have proposal news for you this week.
Shay Nehmad:But I do think it's interesting, you know, we're talking about the release candidates. So release candidates, you know, as they move forward in maturity, release candidate 2 should be even more stable for you to play around with. And I found a way you can go into, go dash review Google source com where all the code reviews are. Right?
Jonathan Hall:Mhmm.
Shay Nehmad:And there's a specific, merge list you can take a look at that shows what went into the release branch, what went into go 123. So there's, like, 70 fixes here.
Jonathan Hall:Between r c one and r c 2, you've been. Right? Yes. Okay.
Shay Nehmad:And one of them is, Jonathan's fix.
Jonathan Hall:Woah. What did I fix?
Shay Nehmad:A typo and a comment? Okay.
Jonathan Hall:Sounds like the kind of thing I might do.
Shay Nehmad:So, in database SQL driver actually, now that you're the contributor, do you say SQL? That's all the
Jonathan Hall:I I I don't say it out loud. It's a a word that I will not speak. I only type it.
Shay Nehmad:It's an ancient language. Anyway, there are a lot of fixes here, which when I opened this patch set I was very surprised. I was sure like, oh, it's just 1 or 2 tiny things but I think many of them are more close to your change, like, fix comments and improve error messages, and very very, small edge cases, you know, looking at just the commit, messages here. Right? Make struct comments match struct names.
Shay Nehmad:Clarify that is not exist, is exist, is permission, and is time out work with nil errors. Some things like that. And there are some actual fixes as well. Right? Avoiding multiple records with identical stacks from mutex profile, for example.
Shay Nehmad:So if you're, trying to run a mutex profiling, it will deduplicate, you know, records and things like that. But I think a lot of them are, like, fix a small comment, update help messages, adding some to dos, documenting some stuff, emitting errors, like, very small but very important fixes to making sure that this is highly polished. So at this point, I think it's a good time to get your company, you know, at at least put on the backlog to migrate. And if you can, you know, run your CI pipelines with this new version, and report bugs, that would obviously help the community a ton. Right?
Jonathan Hall:Mhmm. So are you doing that, Shy? Are you running RC 2 in in CI?
Shay Nehmad:No. Not yet. Not yet. But I will. I definitely will.
Shay Nehmad:I we're working on, centralizing CI, workflows right now at work. We're setting up a Backstage. Right? Spotify Backstage to, like, maintain all this self serve stuff. So I wanna move some, workflows there, and then I'll do it.
Shay Nehmad:We actually have a small Go script in the Backstage implementation. So I might do it there because that's very low stakes.
Jonathan Hall:Cool. I installed RC one on my local machine yesterday, or 2 days ago, actually. What's I'm talking about in a few minutes? And I have RC 2 running in CI on one of my projects.
Shay Nehmad:And how's it working?
Jonathan Hall:No problem so far. Damn. Well, I I should say, actually, it it causes Golang CI Lint to crash.
Shay Nehmad:What?
Jonathan Hall:So Golang CI Lint needs to be updated. I don't know what it is, but it it crashes when I'm running, either RC 1 or RC 2.
Shay Nehmad:Alright. So report the bugs Yeah. To the relevant teams, to make sure that when the full release is out, right, everybody can enjoy it.
Jonathan Hall:That's right.
Shay Nehmad:What are you doing on October 19th?
Jonathan Hall:It's a good question. I'll probably be either in in Guatemala City or in Atlanta looking for a new house. I'm not sure yet which.
Shay Nehmad:You're you'll also be celebrating my birthday.
Jonathan Hall:I'll also be celebrating your birthday. But, unfortunately, I will not be in Nairobi with all these other beautiful, wonderful gophers who are attending the first ever Gopher Con Africa. Woo hoo. So the venue has not yet been announced. So stay tuned or subscribe.
Jonathan Hall:You know, go to their website, irobi.gophers.africa, and, sign up to be notified, I guess.
Shay Nehmad:They're open for speakers?
Jonathan Hall:Yeah. CFP closed just a couple of days ago. I think it closed on the day I learned of the conference. Mhmm. So, unfortunately, it's too late to be a speaker this year, but maybe next year.
Jonathan Hall:You can still go and meet all the wonderful golfers, October 18 19, at a TBD venue in Nairobi.
Shay Nehmad:I love the pricing, where you have the regular ticket, corporate ticket, which is slightly more expensive, but also student ticket. So if you're a student, and you have a student identification card, you get in a half price, which is really good. You know, students can really use both the lectures and and the networking. Mhmm. So getting in their half price, I think is a good investment.
Shay Nehmad:So 18th, 19th October in Nairobi, Kenya.
Jonathan Hall:And since you didn't bring it up, I'm going to. I like their logo. Their little mascot. Their their gopher warrior mascot.
Shay Nehmad:Oh, I haven't even noticed. Oh, it is cute. I don't remember what was the it it's holding up the, like, traditional, vertical shield. That's pretty cool. Although, I'm not used to seeing, gophers, you know, holding up armaments.
Shay Nehmad:Usually, they're like, drink your coffee.
Jonathan Hall:I kinda like the juxtaposition between this cute, fuzzy, durable animal and warrior gear.
Shay Nehmad:Yeah. So Nairobi, October 18th 19th. Very cool. So like we said, not a lot of proposals this week. So, that we found a few interesting blog posts and just topics for discussion that people have been talking about.
Shay Nehmad:And the first one, was from Reddit. I think it came up like 2 weeks ago. Does Go benefit more from Copilot than other languages? And I'm gonna pull, a Jonathan here and like attack the premise of the question first. Like Jonathan is doing to many many people on, LinkedIn now and then.
Jonathan Hall:I would never. I reject the premise of your statement.
Shay Nehmad:I I think you're doing your work trolling enough people on LinkedIn to keep it keep it honest, Right? Which is a great service, for the rest of us. But my first, like, thought is why does it matter? Why does it matter if Go is super well fitted to, you know, LLMs or doesn't work well with it at all?
Jonathan Hall:Well, I suppose it matters if you're trying to leverage an LLM, to, do your coding, help with your coding. Harvey, go downstairs.
Shay Nehmad:Hello, Harvey. So, back from that break, Jonathan has to take care of his, kid. We actually got a mention on Slack. I don't remember. This is a tangent, but someone was, like, oh, it's good that you're normalizing, like, being with your kid while you're at work.
Shay Nehmad:And it's, like, yeah. This is a fun thing we do. This is not a huge super important corporate board meeting. Our kids can come and bother us every now and then.
Jonathan Hall:Of course. They're
Shay Nehmad:cute. Jonathan's kids are cute, and my and my kid is cuter. And it's just a Yeah.
Jonathan Hall:I I reject the premise we hear from you, David.
Shay Nehmad:So let's go back to let's go back to Copilot. LMS. Right? Why does it matter that, Copilot is more useful in language x than language y?
Jonathan Hall:Alright. So answering the question, I I think I think it might matter if you're trying to get full leverage out of your LLM. But but but and this is probably where you're going. That shouldn't be the deciding factor when you're choosing a language. Right?
Jonathan Hall:I mean, you use the language that's best suited suited for the job. And maybe that could be one small part of that, the decision matrix, but it shouldn't be the the main thing.
Shay Nehmad:So I think it's the same way that, does, Go have like, you know, Go's LSP is pretty good. Right? It's pretty fast and it has a lot of features, extract method and whatever. It certainly has more tools than some other languages you could think about. Right?
Shay Nehmad:Maybe some really new languages or maybe really old languages that don't have great tooling. Like, it's a lot easier to refactor in Go than it is to refactor in assembly or c. Right? I think this question is sort of going towards that. Like, how good is the tooling?
Shay Nehmad:And if we generalize to, does Go have good tooling? I feel pretty comfortable answering that Go has one of, like, best tooling lineups for any programming languages you might choose. Comes with, like, the testing tool comes built in with fuzzing and race detection and whatever whatever whatever. I think it's a very productive language. Not a lot of people will argue that, like against that.
Shay Nehmad:Specifically, it's inter it is interesting technically to nerd out about why, it has good LLM support as well, maybe better than some other languages. What's, like, your instinct on that? Should it have a better LLM support than other languages or not?
Jonathan Hall:I think it depends on how you define better. I think in general, an LLM is gonna benefit the most from whatever language has the most input available. Or to be even more specific, most input that you want to replicate. If you have tons and tons of, say I'll just pick a random language. Let's say Lua.
Jonathan Hall:Tons and tons of Lua, but it's all really bad code, then you're gonna have a bad experience with your LLM. So how does that affect Go? I think that Go is a relatively young language, at least in terms of popularity. So there's less code than there is, say, Java or JavaScript, PHP out there. It's more often a professional language than, say, a student language.
Jonathan Hall:So you're not going to get people's homework assignments as much influencing the outputs as you would if it was, say, JavaScript or C plus plus or Java or whatever they study in universities these days. So maybe in that sense, the bell curve of what you expect to get out is closer to the end of high quality. But I don't think those are particularly features of the language. It's more about how is the language used, and do you want to to use a copilot that's trained on the data?
Shay Nehmad:So surprisingly, there are some features of the language that impact, like, the how good the LLM is.
Jonathan Hall:Mhmm.
Shay Nehmad:And it does have to do with the input data, like you said. I learned about this from, Natalie, Natalie Pistonovich from, GoTime. So in the latest, Gofer Con Israel, which was about a year ago and the next, Gofer Con Israel is coming up now. Or maybe it was 2 years ago? No.
Shay Nehmad:That's not possible. Never mind. She's, she had a lecture about, Go and AI and how, why Go is a good fit for AI. And there are a few interesting features when you compare it to other languages. For example, Python in the standard is is a white space based language.
Shay Nehmad:Right? It has a lot of white space. But the white space itself, is usually spaces. You'll have, like, 4 spaces. Go has uniform formatting, right, which is great for training because all the code looks the same.
Shay Nehmad:So when you auto complete, when you're looking for things, you're you're finding things that are similar semantically and you don't worry about formatting because all code is formatted the same Go fmt. Also, it's formatted with tabs, so it's less tokens. It is physically less input, so you get, a bigger context window for your, LLM.
Jonathan Hall:And we don't have all those pesky, semicolons and braces to get to to take token space either.
Shay Nehmad:Totally. Totally. Although, I've seen recently, new research from, I think, Facebook, like Meta, about, their buildings specialized LLMs that actually, read the language, you know, like get an AST and then do the prediction on the AST to get rid of all that noise. So I assume Copilot will get at least experimental support for that as well. Mhmm.
Shay Nehmad:So Go is, like, very uniform in its format and its styling. All the things kind of look the same, so it's a good fit for LMS. And I also think that a reach a rich, standard library helps it as well. And funnily enough, choosing tabs over spaces for the white space, formatting was a good benefit as well. On Reddit, this is a, like, this was a pretty interesting discussion where people brought up some other things as well, you know.
Shay Nehmad:And the first one is Natalie's lecture. So you don't have a like you said, it's a relatively young language. That's also a benefit because you don't have a lot of deprecated versions. We don't have Python 2 equivalent of go. Right?
Shay Nehmad:Where you can just auto complete code that doesn't really work. So it's gonna suggest code, that's pretty well written, pretty young, and formatted the same way you want. And people overall say that they like using Copilot or, you know, LLMs, especially in unit tests saves them a lot of time. So the qualitative feedback, is also pretty good, at least from this, thread. Right?
Shay Nehmad:They're saying it's amazing. I don't have to generate functions anymore. It's really intelligent, especially in Golang.
Jonathan Hall:I don't find that to be true. I I do use it, But I find it most useful, when I'm doing something very, very repetitive. Otherwise, it just and even then, it makes a lot of mistakes. So I I don't I don't trust Copilot at all. So I always verify whatever it
Shay Nehmad:gives me. Yeah. There there is this, feedback here as well. Right? Someone says, Copilot is expletive for Golang.
Shay Nehmad:I turned mine off. The code it generates is spectacularly subpar and some people are have concerns already as well. But I think this is again the gen like, the general, discussions are on that. Right? Oh, maybe use Claude's sonnet instead of open AI.
Shay Nehmad:Maybe use this instead of that. Blah blah blah.
Jonathan Hall:So which other one do you use? Let us know on, on our Slack channel.
Shay Nehmad:Yeah. For sure.
Jonathan Hall:And if it's just the one between your shoulders, that's cool too.
Shay Nehmad:So does Go benefit more from Copilot than other languages? We reject the premise of the question. Doesn't really matter. Also, Copilots are bad. Also, tabs are better than spaces.
Jonathan Hall:Also, what are these range iterators?
Shay Nehmad:I don't know. My copilot isn't suggesting them yet because there isn't enough data, so I'll never know.
Jonathan Hall:Do do you find these new range generators to be kind of mystifying too?
Shay Nehmad:Well, if only someone would demystify them for me.
Jonathan Hall:If if only they well, hey, I see this post from Zach Musgraves. It claims it's gonna demystify them for us, but we should read it.
Shay Nehmad:Well, how about you explain it for me in this audio format because that seems kinda like a useful use of my time.
Jonathan Hall:So we we all know that Go 123 is coming up with coming out with the new Range Rover Fund. Right? We've talked about it on the show before.
Shay Nehmad:A million.
Jonathan Hall:We've talked about it even a year ago. The the the proposal was written just over a year ago this this week. So we talked about it. If you don't know what we're talking about, listen to the past episodes, stop living under a go rock. You can create a specially formed function with a particular signature, and the the range keyword will will iterate over it.
Jonathan Hall:That's that's the TLDR.
Shay Nehmad:And you've been playing around with it this week a lot.
Jonathan Hall:I have. Yeah. So I was curious in in in in large part due to conversation on our Slack channel, the Capacost Slack channel, with some listeners, like, how would this work? I have a library where I think it would be a perfect fit, but Saturday, I had some spare time a couple of days ago. I give it a shot, and I pulled up this post.
Jonathan Hall:It was an 8 minute read from Zach. And of course, I skipped through 80% of it.
Shay Nehmad:To get to the code, right?
Jonathan Hall:It went straight to the example code and just plagiarized it blatantly. But the TLDR, actually, so I wrote my own post as well, which links back to this one. It just is talking about my own experience with the range iterators. My TLDR is I love them now. And, most of my fears about how complex they were and the bad naming were totally overblown.
Jonathan Hall:Yes, the proposal itself is complicated to understand, but that's because there's so much going on behind the scenes that you don't have to care about either as the consumer of a narrator or the author of a narrator. It's really easy to use. That's my TLDR.
Shay Nehmad:Cool. I was really worried about the new keyword.
Jonathan Hall:Yeah. I was too.
Shay Nehmad:But but now you say it's
Jonathan Hall:fine? There is no new keyword.
Shay Nehmad:What do you mean? You can say yield now. It's like Python.
Jonathan Hall:There was no keyword, but if you look really closely, that's just the name of a function. That's the a callback. Yeah. That's when the light bulb hit, went on for me too. It was like, Oh, it's just a function.
Jonathan Hall:I can call it whatever I want. Yield makes maybe sense contextually, but, yeah, I was so concerned that this would not compile with old versions of Go. It does. I I'm I am building my iterators in Go 1.17 before generics even existed, and and they compile just fine. They're not useful there.
Jonathan Hall:Don't get me wrong. You can't just magically iterate over those functions, but they compile.
Shay Nehmad:And there was one interesting you know, we always, loved to hate on the name, seek 2.
Jonathan Hall:Mhmm.
Shay Nehmad:Right? And I think you sort of had a discussion around the naming as well. Can you name it whatever you want? Should you name it Seek 2 as well?
Jonathan Hall:Yeah. So one of the points in my post was, as I did this exercise of building 5 different iterators from a project, I never once had to write seek or seek 2. So, like, fine then. I don't care what you call it then. Call it whatever you want.
Jonathan Hall:However, there are cases. If if you're writing an iterator that iterates over an iterator, for example, then you will need to use that name. So it's not that the name complete doesn't matter, but it's much less important than I initially thought. You might also want your function to return that type. I don't do that because I want my code to compile for old versions of Go.
Jonathan Hall:But as a as a documentation or a type safety check, you might actually want to return either dot seek or either dot seek2, for example. I still think slight issue with the name. I think they should have called it seek 1 and seek 2 since they reversed the number of arguments being returned. I think that would have been more clear. I think seek and seek 2 just looks asymmetric, but it's really a very minor thing.
Jonathan Hall:It's not nearly as big of an issue as I think you and I thought it might be when we were complaining about it on the show before.
Shay Nehmad:So so that's that's exactly the thing. Right? Talk is cheap, but action is is expensive. We talked about how hard using the range generators and the name and blah blah blah for over an hour, and your proof of concept was already in under an hour. Yeah.
Shay Nehmad:So just a word of warning to any every like anybody here, that listens to us, too carefully. It's like, oh, they said on the podcast blah blah blah. So saying is easy, but the fact that Jonathan actually wrote the blog post and actually migrated, his whatever CouchDB, open source thing. Right? Kvig?
Shay Nehmad:Yep.
Jonathan Hall:Mhmm.
Shay Nehmad:That matters a whole lot more. Which is why we try to highlight people that, you know, write the blog post and write the proposals, and our opinions on it is should be a very small part of what you get out of this show.
Jonathan Hall:Yeah. We don't know what we're talking about. We're just a bunch of doofuses who like to talk about Yoh.
Shay Nehmad:Totally. Alright. I think it's time for our lightning round. Right?
Jonathan Hall:Oh, yes. I love that.
Shay Nehmad:Alright. Lightning round. First thing we wanna recommend is dreams of code new video. This CLI component was trickier to build than I thought. They built in a 17 minute super super, storytelly, beautifully shot video, a small CLI loader thing in Go.
Shay Nehmad:And it really goes to the details of, oh, you need to delete. You need to, fix all the bugs. They also developed it pretty well, I think, with TDD and things like that. So some pretty interesting things to learn, and a beautiful setup with amazing keyboards and buttons and things like that, which I like. So go give that a watch.
Shay Nehmad:Really good YouTube content if you're into learning from videos as well.
Jonathan Hall:And up on my list, introducing Quartz, a deterministic time testing library for Go by Spike Curtis. What a great name. Mhmm. So Spike decided that he doesn't like flaky tests, and I was sold Open a line, I hate flicky tests. I'm there.
Jonathan Hall:The premise of this package is to make it easier to test code that depends on intricate timing. So if you're if you're testing a ticker or context cancellations or things like that, where timing is critical, I know I have code that does this. And even when I use long timeouts, you know, one second or whatever, occasionally, it fails in CI when something's going slow. This should solve that problem. I intend I haven't used it yet, but I intend to try this library next time I'm writing a timing sensitive test.
Jonathan Hall:Link in the description. Quartz is the name of the library. Check it out.
Shay Nehmad:We should tell dreams of code about Quartz. They would sort of improve their test as well. Finally on my list, new release for OV. OV is a terminal text viewer written in Go. Basically, it's like less or more or like watch or tail.
Shay Nehmad:Just has a ton of features and colors and is, is gonna spruce up your terminal real nice, which will make your, you know, you writing a single word and waiting for your LLM to auto complete it look really really cool, mister robot style. So Ovi has a new release. If you haven't installed it on your terminal yet, you can go ahead and do that now. And that does it for our lighting ground. Boom.
Jonathan Hall:That was fast.
Shay Nehmad:Stick around for the ad break to hear some meta stuff. Welcome to our outbreak. Thanks a lot for people who, sort of volunteer to cohost, towards the end of the summer, where we're planning to take some time off, on our Slack channel. So we'll definitely reach out to you soon and try to set that up. Thanks a lot.
Shay Nehmad:Thanks a lot. Thanks a lot. It's really cool. If you do wanna join that list as well, just let us know on Slack, and we'll reach out to you. It's not that complicated.
Shay Nehmad:We're not that big of an operation. We're just 2 dudes who don't really know what they're talking about.
Jonathan Hall:We we are giving preference to those who have not co hosted before. So don't be insulted if we don't reach out to you if you've already been a co host. Yep. We love you. We're so glad you were a co host, but we wanna share the opportunity.
Shay Nehmad:So if you do wanna reach us, capago.dev has all the links you need, links to stuff like past episodes, transcriptions, our email news atcapago.dev, our Slack channel, hashtag cup dashodashgo on the go for Slack. Our swag store where you can buy hoodies, shirts, the hoodie by the way, I was doubtful, but I got some for dev ops days in Amsterdam because Amsterdam is cold when I went to meet, Jonathan. And I've I have used it more than once. It's very comfortable. So where I work, Orca, they really we have 1, AC Tyrant.
Shay Nehmad:Mhmm.
Jonathan Hall:Do you
Shay Nehmad:have one of these as well? Like, someone who just blast this on 16? I
Jonathan Hall:work from home. I work from home.
Shay Nehmad:Do you blast the AC at home?
Jonathan Hall:When I want to. And I don't I don't want to. Yeah.
Shay Nehmad:I don't I don't have a choice. And I'm sitting right under the AC. So I brought the hoodie and it now lives on my chair, at the office which is really nice. Because nobody seals my chair as well. So here hey.
Shay Nehmad:Another use for it, you can use, the hoodie to mark territory. Anyway, you can buy some swag on, capago.dev. If you wanna support the show, the best way to support it is through Patreon. Thanks a lot to all our Patreon supporters who try to make this hobby a bit more sustainable. We do this for fun, but it does cost us a bit of money to edit the show.
Shay Nehmad:We have a professional editor. Shout out, Filippo, for editing our words and, you know, for hosting and things like that. Joining as a member on Patreon is the most direct way to support the show. If you wanna support other ways, you can leave a review or share the show on Apple Podcasts or Spotify or wherever you listen to your podcasts. We don't pay to advertise, so word-of-mouth is basically the only way the show gets around.
Shay Nehmad:The show gets around sounds sounds bad.
Jonathan Hall:This show goes around.
Shay Nehmad:That that's better. Around. Okay. Where else can you mention or or talk about the show? So we talked about, like, professional reviews on the on the apps.
Jonathan Hall:So, if you want something a little lower key, a little easier to do if you're a a social media person, follow us on Twitter or dare I say X, whatever. We currently have 449 followers on Twitter. Cup_o, underscore go is the handle. If you're more of a fediverse person, I'll just say it that way. That's pretty factual without throwing value statements into it.
Shay Nehmad:We're
Jonathan Hall:also on Mastodon, couple ago at techhub. Social, where we currently have 72 followers. And And I also just had to look up our YouTube channel, and I was surprised to see we have 214 subscribers on YouTube, and people are actually consuming the show there. We have had 30 hours of quote, watch time on YouTube in the last month.
Shay Nehmad:So I think it's, because, Google Podcasts died. Right? They killed it. Killed by Google. Hashtag killed by Google.
Shay Nehmad:Maybe people who listen to podcasts using Google Podcasts have now transitioned to using using YouTube music and then they count the views that way. But hey, if you like using these apps and it's easier for you to listen to the show there, we're very happy to to, like, have you, serve you there. So, yeah, if you're I'm rarely, logging into, social media, just trying to lower that, in my life. But if you are listening to the show and you, like, have Twitter open right now, maybe just shout us out. Having more people listen is really fun for us.
Jonathan Hall:Yeah. And when you see if you if you follow us, when you see the thing come by in your feed, just hit that that art button, hit the reshare, and it helps spread the word.
Shay Nehmad:Awesome. So thanks a lot for listening this week, everyone. Next week, hopefully, hopefully, we'll have an interview. We'll finally go get back on that horse. Really trying to schedule that.
Jonathan Hall:We've been trying, and it's been a bit difficult. Everyone else is on holiday during the summer too, so it's a little bit hard to schedule during the summertime. But we'll
Shay Nehmad:Yeah. Holiday with the kids, like, Jonathan just demonstrated, etcetera, etcetera. That's it for this week's program exited. Goodbye.