
This show is supported by you. Stick around to the ad break to hear more. This is Cup o' Go for March 15, 2024. Keep up to date with the important happenings in the Go community in about 15 minutes per week. I'm Shay Nehmad .

I'm Jonathan Hall.

I'm gonna just pencil in that about in the in the notes here. How are you feeling?

Oh, I'm under the weather. My kid woke me up 3 times, 4 times in the night. I'm gonna go take a nap after we're done here.

Yeah. So am I. Please accept our if you're into that sort of stuff, this is the sick corner. Sick go news. Nineties commercial. But yeah, this episode is gonna be extra nasally. So let's get started because it's not gonna get any better.

Let's talk about some meetups. You were in a meetup this last week, weren't you? Did did you make it? Were you too sick to make it?

I made it. Okay. I think I got better. I missed last week. Thanks to Dalena, by the way, for filling in. And I got better, and then I did the meet up, and then I got worse, which is very, normal when you go to meet ups or like conferences, right? You just get sick afterwards. So I was I was pretty good. The meet up was interesting. It was hosted at my company, my current company called Oka Security.
We had pretty high attendance, a lot of people joined. We finished the pizzas, you know, that's the Okay. The indication. It was kind of a difficult choice to host a meetup at all. As you know, we've stopped doing meet ups on October when the war started.
We felt kind of uncomfortable, you know, hosting a fun event, and and pizzas, and swag, and whatever, while all this is still going on. Yeah. So we actually started the meet up with a slide being like, let's just contextualize this. There's still hostages. There's still, like, war going on. Some people couldn't come because they're, you know, in Gaza right now fighting. Mhmm. It was very we we had to put it all, like, put out all the awkwardness and all the open questions upfront.

Mhmm.

We did that, and then we started the actual talks. And the talks went really well. I gave a talk about, Rigo, someone else from my company gave a talk about, Go Releaser, which we talked about a few times in the show. And then Nachshon from Reddit, gave a really good talk about how to build a Kubernetes operator. So that was pretty cool.
The crowd was engaged, people were networking, people were handing out CVs to another. Like everything you wanna see in a in a Go meet up basically. Nice. Yeah. So it was pretty good. I'm definitely planning to, host it again at Orca next year, if that all works out. Yeah. And there's another meetup, someone mentioned on the channel.

Yeah. On our on our Slack channel, Joe Davison mentioned that the Manchester Go meetup is starting back up again. Apparently, it hasn't been running for a while. I don't know if this is a a COVID thing and they're finally getting back to the swing. But if you are in the Manchester area on is it April 3rd? You can join the Manchester Go meetup and learn about Temple, t e m p l, which I've seen making the news rounds. We'll probably talk about it on the show at some point, but not this week.

Yeah. Do you get the feeling when you this isn't, like, my 6th or 7th Go meet up slash GoferCon, event. Do you get the feeling that, you start to see the same faces again and again when you come to the same Go community in the same country.

Oh, yeah.

People come up to me like, oh, we know you from, Gofer Con Israel or Jardin, which if you remember, filled in for me filled in for you, sorry,

for months. Yeah.

When you were in Guatemala. She came in during the talk and was like, hi. You know, I I was in the middle of talking, but I was like, hi. And, Miki and Guy Miki is actually our first guest, if you remember. Yeah. The first episode. So he's still, you know, running the conferences and the meet ups. So he was there obviously. And Guy Brandwine, which is another, you know, one of the co organizers. You start seeing the same faces.
Right? Yep. Yep. For sure. It's fun to see that it's actually a community, not just in the virtual sense. It's actually a bunch of people. I have their phone numbers now and they know me and they help me out when I need, you know, someone to fill in for me in in the show or stuff like that. Yep. An actual professional community. Meetups are good everybody, go do them. Go do them. Alright. Let's talk about some proposals.

I have one for you, Shay. Yeah. Yeah. What does this number mean to you? 1,000,000,000 136,000,000 214,245. What does that number mean?

I guess it's the number of times I had to do men, tar because I don't remember the tar flags.

So there's a new proposal or it it I guess it's declined now, but I thought it was fun to bring it up anyway because this number is just so much fun to say. The proposal was to add that number as a string layout for the time formatting. If you're familiar with time dot format, you put in 1 for the month, 2 for the day, 3 for the year, etcetera, etcetera.

That's the American way. And then the European way is, the correct one where it's it's the almost correct one.

Oh, yeah.

That's a day, month, year. And then there's the really correct one, which is year, month, day, because it's sortable.

Yeah. Anyway, so the the the proposal was to add this number, 1136214245 as a formatting constant in this format string to represent UNIX timestamp seconds, a second since January, 1, 1970. It got declined. I I can't say I'm sad to see it was declined. I think it would have made for some really awkward formats, and there are other ways to accomplish the same, obviously.

So how do you how how would you replace it, though? This is this is horrible, don't get me wrong. Thanks a lot for your suggestion. Again, this is not personal. Dave Pivke from Rapid City SD? What's SD? South Dakota. South Dakota.

Rapid City, South Dakota.

So thanks Dave, but this is very hard to remember. So I wouldn't wanna see it in a time parse call. He says this value is unambiguous and I just can't believe that's right.

The, so the alternative you asked, if you actually need to do this. So if if all you need is the UNIX timestamp, you just call dot UNIX and you get an integer. Right?

Mhmm.

But if you need it as part of a bigger string, then you have to do some string concatenation yourself. That's the alternative. Which I do understand, if you use this frequently, it would be pretty cumbersome, but I I would find it unusual if anybody, except in a very rare, you know, very specific domains would need to do that regularly.

Talking about rare stuff that people don't need to do unless they're in very specific domains, there was a proposal to promote, how about that segue? That's a good one. There was a proposal to promote, Windows ARM 64 to a first class port. So there are two things to break down here. First of all, what does it mean Windows ARM 64?
It means that you're running a Windows operating system, which by the Go survey is more people than we think up here in our ivory tower. Yeah. Of Macs and Linux machines.

Mostly Linux though.

Yeah. Yeah. But there are enough. It's not negligible, which, you know, thinking about it, it makes a lot of sense. Right? You're in a corporate environment that's that didn't do like a transformation yet. It's not a software first company. It's just a company, like a manufacturing company. Of course, you're gonna use Windows. Like what's nobody's gonna buy you a Mac.
That doesn't make any sense. So anyway, a a lot of people use Windows, but Windows ARM 64 is like the combo of the operating system and the architecture. Right? So it basically means you're running Windows on a machine, whether it's just, you know, a laptop or a or a desktop that has a CPU that's arm 64. So like m 1 or m 2.
I guess the use case is you buy old well, they're not that old, they're still new. But you buy Mac machines and you install Windows operating systems on them. Like I don't really know of any arm 64 widespread arm 64 chips around the market. Yeah. I don't I don't either.
Anyways, so there's this part. It means that some people want to use Go and want Windows ARM 64 support, and then they want it as a first class port. Because obviously Go can run on these machines, but they want first class ports, which I didn't know what it was. And you didn't know either, right?

I didn't either, yeah.

So we looked up the documentation page. There's a page called porting policy, which definitely seems like we got to the part of the booklet that's only for the Go team employees. So what is a port? Right? Go team maintains, again, the OS plus architecture combo, such as Linux, 386.
If you want, a first class port, and there are already a few, there's Darwin AMD 64 and Darwin ARM 64, which makes sense, you know, like new ish Macs. Linux has the widest support. Linux, for like Intel, Linux for AMD 64, Linux for ARM and ARM 64. I think that's like the base of the, like, build system, so it makes sense that it has the widest support. And then Windows has Intel and AMD.
And when I say Intel, I mean 386, because it doesn't say I 386, but basically it's just Intel. Right? And the proposal is to add another one to the list here of 1st class ports. And a 1st class port means that if a change breaks Windows, arm 64 build, then the change will block the release. So, you know, go 123, works on all operating system, but has a small thing that doesn't work on arm 64, that doesn't compile, then it's gonna block the release for all the rest of the ports.
So it's a balancing act. Right? If we add all the operating system and architecture combinations to the first class list, It's not 1st class anymore, it's just, what's it called in a coach? Yeah. It's just it's just coach.
But like the less we add, the less people can rely on, Go releases to support their development environment. It's a really high bar to clear, To maintain a port, you have to like have 2 specifically named developers join the go developer team and agree, and I don't know if it's like sign a contract, but they they have to agree to maintain that port. And if anything comes up, they have to be the one that review it. And you have to remove like all the architecture versions. It's a real thing, right?
So the proposal, I'm not sure where which way it's gonna fall, but it is important to note. It's not like if you have a Windows machine with arm 64, it's not gonna work, because Go team ships binaries for all ports, even if they're not first class. So this is just a guarantee for the future. I didn't know about this topic, I can't imagine I'll run into it, because I won't run Windows as my development machine if I can help it. And if I would, I would buy, you know, a ThinkPad, like the most run of the mill, average laptop that I can get where the lowest common denominator, right?
Everything can work on it. Or ideally I'll buy a desktop, but that's a whole different thing. But it was interesting, I didn't know about this like first class board, 2nd class board issue topic at all. But there are more moving parts to maintaining a language than than we give credit for, right? Indeed, indeed.
So if you listen to this on a windows arm 64 machine, you should probably go upvote, cause there aren't too many upvote, there are like 4 people here. And I know for for sure, looking at the names, I'm not gonna call them out, but one of the upvotes does not use Windows arm 64. So it's just, I don't know, I didn't, shield to the fire. Cool. So that was Windows ARM 64. There's a new GoDev blog. It just, like, got posted this morning, I think. Right?

Yeah.

Yes. Yesterday's date. Yep. I saw it. I saw the screenshots, and I'm excited. What's going on?

More powerful go execution traces. Who doesn't want that? Power.

You know how the emperor Palpatine, infinite power.

And it starts out with one of those famous sexy, like, flame graphs of, like, execution time and, you know, so it's already off on a good foot. TLDR, you can do execution traces in Go, and have been able to for a long time, but they run into 4 common problems. There's a lot of there's a high overhead for doing execution traces, as high as 10 to 20% for many applications. Related to that, they don't scale very well. If you have a large application or or a busy application, your trace output can be too big to really analyze meaningfully.
And then it's often unclear how to start a trace or where to start a trace. You know, if you you're trying to capture a particular behavior of your program to trace it, when it when do you start and stop that tracing to get what you need? Because sometimes the bottleneck isn't where it appears due to the way gorgons work or or different blocking behaviors and stuff like that. And then kind of summarizing only, the article says only the most adventurous gophers could programmatically analyze traces given the lack of public package for parsing, interpreting execution traces.

That's a really politically correct way to say the API sucks and we've made people suffer for, programmatically enabling something. Adventurous. It's not something you wanna see on a library description, you know, using solely or a dating app profile. Right? Only match me if you're adventurous. Anyway, sorry.

So, the the article goes into some of the recent advancements in tracing. Just right off the bat, as of go 1.21, some major work has gone into the overhead problem. And now, typically, overhead is 1 to 2%. So a 10 x decrease in overhead for tracing. That's Yeah.

We talked about this on the show, if you remember. I think, like, half a year ago, just making Go production work even easier. It's like, oh, yeah. I'll turn on, tracing. But the fact that the impact on the CPU is lower, doesn't mean that the traces are smaller. So you still have to deal with a lot of storage. But they've solved this as well, right?

So they have some new tools now that will do a little bit more intelligent parsing and manipulation of these traces to use less memory. It says that just a few 100 megabytes of a trace could require several gigabytes of RAM to analyze. And by splitting that essentially into smaller chunks, they're able to do much more detailed analysis with much less memory. So it's sort of a new technique to analyze the traces that you've created much more efficiently already. And then the article continues to go on to talking about flight recording and, the API, which has gotten better.
It's it requires less of a politically correct disclaimer. No.
Yeah. It looks

really good. I I love the flight recorder, thing. I I never heard about this, I don't know, design pattern or, I guess, usage pattern called flight recorder. Have you ever used it?

No. I don't think I have.

So for for those of you who don't know what, flight recording means, flight recording means, you know, you always record, So you continuously record, which for the previous traces was a non starter. Right? It means you always have a 20% penalty on your application, and you store tons of data. But the fact that the trace impact is lower and the files are smaller, basically means you record all the time, but you, like, cycle it. Right?
So you keep the last x, traces, depending how much traffic your application gets. If it's not a lot, it could be up to a day or like even more. It's not really limited. But all I'm saying is you keep a limited amount of trace information, and you only dump it when a bad behavior happened. So you always have like the last few requests.
And if, something went wrong, let's say your application crashed before, or you get a shutdown from Kubernetes or something, before everything shuts down, you can try to dump out your traces into your, I don't know, storage of choice, like s 3 bucket. And I really imagine, you know, getting an alert, flight recorder, dump saved in Slack. Right? If you set up everything super correctly, just getting a message of like, oh, I already have the trace. You double click it, you open it in the new go tool trace.
It looks beautiful with all the colors and all the threads, and and it it seems very, very easy to parse. You have like heap, goroutines, threads, you can see all the procs, You can see all the syscalls. It looks really, really good. I really wanna play with it. If someone has a crashing program, they wanna turn this on and send the trace for, you know, to play around with, I would really appreciate that.
But basically, you know, you can decide to dump the flight recording when you want, and it's not like always keeping it. And it's super super easy API as well. New flight recorder, flight recorder start, and then flight recorder dump. Like, right or whatever. Super easy. What editor do you use, Shay? Loaded question. Uh-huh. For a what? Either VIM or Versus Code.
That's my Okay. These are my tools of choice. VIM is the quick editor thing for like commit messages or editing a configuration file and Versus Code is the main driver. So you don't use Go Please with neo Vim or with Vim? I use a GoPLS in Versus Code. Vim is very it's optimized to start very fast. I have almost no plug ins in it.

But there are people who use Vim and Neovim as their IDE essentially, right? Yeah,

yeah, yeah.

And I'm sure that some of them are listening to this.

Yeah, I think, first of all, for sure, the people who use Neo Vim, will be happy to tell you about it. Like, yo, it's just VIM script is so weird. Let's do Lua blah blah blah. Yeah. Yeah. I'm done with configuring editors, man. I I used to love it. Oh, I found another thing. I found another thing. Now I just wanna open it.
Now that I'm back in the management role, right? Yeah. So they let me program for like a year, and then they sucked me. Just so when I thought I was done, they pulled me back in, so I'm done with it. But I know some people use, you know, enjoy configuring all this stuff.
If you use Go and Neovim, we found on Reddit that there's a Go PLS documentation link tool, like plugin, for Neovim, where you just go over a thing, you type, go x, I think, like g x, and it just shows you the like documentation for that package or that symbol on a browser, which is really useful. I I often end up not happy with just the documentation of that like constant or function. Right? And you wanna go read the package, especially if it's a package I'm not very familiar with. You wanna go read the the top of the Go docs where it explains like, oh, this package is about x.
Right? So if you're in Neovim, there's a fast way to do it. Not huge news for most listeners, but if you use Neovim, you can use it. I was surprised to see, it sounds like something pretty simple, but apparently it's not like super integrated into Neovim. So this is from Neovim 0 10, which is unreleased.
So you need to install like the nightly and stuff like that, so I'm not sure it's gonna be super easy. I think it works with 0.9, but I'm not sure. I think they pulled one of the nightly features into 0.9. It's just gonna be a bit of a pain to install, I think. VIM plug and it just looks very practical, but it it's probably more than a one liner of installation. At least for now.

Well you say it sounds simple but you know if I were to write that plug in the first thing I have to learn is how to exit VIM. Yeah. And that's a deal breaker already.

For for many people. What editor do you use, by the way, if you're already exposing personal details?

Yeah. I use US code for for heavy editing. For light editing, I use a a tool called Joe, j o e, Joe's own editor.

Joe? Yeah. I've never even heard of it. JoE's own editor.

So the the reason I use JoE is because it uses word star key bindings, which I learned way back in the DOS days and I just never bothered to learn new key bindings as I migrated operating systems over the years.

That definitely looks the latest release is 2018. What are you gonna do when it falls out of maintenance? Don't know. Well, you're just gonna have to learn how to exit Veeam, I guess.

I guess so.

Well, we have a lot of other topics in the backlog, but we've been, prattling on for too long. Coming up we have

a very interesting interview. Stick around for that after our break. Thanks for making it this far into the program to our little break between the programming, where we'd like to do a call out to our new Patreon.

Professional podcaster here, everyone.

What do you call that break between programs? Where you talk about commercial things? Yeah. Alright. So we have one new Patreon in the last few weeks. Adelina, who you all know from last week's show and previous shows as well. Thanks, Adelina, for being a a member, and supporting the show in more than one way.

If you want, she didn't ask us to do this. But if you want to get to know Adelina's work better, go buy, test driven development with Go. I can hardly recommend the book. We want to do, by the way, give out copies in the, in the meetup. I don't know if you do that. Give prizes out, like, do a raffle and give, like, licenses.

Occasionally, if somebody if if we have donated things, we'll give them away at a meetup. Yeah.

So we figured we could do, like, GoLand licenses, you know, and just do a raffle and and do Adelina's book. Yeah. But we decided, a, because of the nature of the meetup, it's the first meetup, and they're still, like, it was a weird vibe. We decided to give up the raffle. The books couldn't get here in time. That's also a big reason. But also, turns out everybody who comes to a Go meetup, either their company already pays for Go land licenses or they just don't want them.

We had the same thing. JetBrains has offered us licenses to give away, and we couldn't we couldn't sell them to people because everybody either had them or didn't want them.

Yeah. I think it's I was very surprised, but if you offered me a Go land license now for free for, like, 5 years, I might install it. But honestly, like, I don't know. It's a really heavy program.

Yeah. I don't like the program very much, but I I do use it occasionally. One of my mentors, we do the screen sharing thing through GoLand. So I would probably take the free license and and store it in case my one of my clients gives me a free license right now. If they didn't, I would I would fall back to that.

JetBrains, if you want to sponsor this show, of course, your editor is the best and and, you know, leave this out editor or whatever. You're you're you won. But if you if you don't, that's our opinion.
Right.

Anyway, sorry. So, thanks to Dalena for, for supporting the show. If you want to sponsor the show, and help support us, maintaining this very fun, very educational, but somewhat expensive hobby. You know, we have to pay for editing. We have to pay for hosting fees, etcetera. You can join our Patreon and become a member. It's $8 a month, and we would really appreciate it.

You can also support the show by just sharing it with a friend or colleague. Drop a link to the your favorite episode on your work, Slack. Or if you're in university, you know, share it with some students who are also studying programming. Just spread the word that that you like this the show and and get some more listeners out there. Yeah.

And you can also leave a review on Spotify, Apple Podcasts, or wherever you listen to podcasts. Apparently, all these ratings and, reviews other than I just figured it's a thing you say. Right?

Uh-huh.

But I recently learned that in specific categories, if a show gets a lot of reviews and positive whatever, it gets pushed up so it could help our discoverability. Although, I can't really believe someone clicking on the show in random. It's probably almost a 100% by word-of-mouth. Although I

I did recently get some some semi spam from, one of a podcast promoting company. They told us they told me that our show is in the top 75 15 minute format programs, which doesn't mean anything because nobody cares about that. So we were listed among things like, I don't know, cooking tips in 15 minutes a week, you know, completely unrelated topics.

Yeah. We could do cooking tips. We could. The the only problem is you can't, program Go and and do cooking at the same time. Because usually, you know, if you work in c plus plus or whatever, you compile, and then you have, like, 15 minutes to cut up onions. But the compile time in Go is so short that you don't have any

It just means our cooking tips will be like, how do we do microwave popcorn?

I'm gonna this is a total sidetrack, and we might edit this out. But I, cook a 150 burritos in one sitting and then freeze them. And then I have breakfast burritos for like the whole quarter. And it's actually what I'm eyeing right now to eat once we finish this every. So Alright. Unironically, I can give you that tip.

We don't wanna keep shy from his, burritos. Yeah. Also join us on the Slack where, we mentioned it earlier in the show, but we have a Slack channel with 340 people on it, I think, now. Cup of go, kebab case on the go for Slack. Come join the conversation there, share your news items, and, chat with the people who, make the show and who guests on the show as our interview guests.

I I really wanted to shout out, a new member. We we used to do it when the show was really small. Right? Every single person who joined, we're like, oh, hi.

Mhmm.

But, Boris, I guess it's Boris with a y, just a top notch, Slack, profile picture. Just the Homer's face with a yellow background, with really fun feedback. You just said the episode is really good. He likes the layout, and he's wondering if he could introduce Go to his company's stack. So my recommendation to you, Boris, if you wanna add Go to your company's stack is find like the smallest Lambda, like authentication thing you can find.
Replace it with a go Lambda on or any function, like, function as a service thing that you use. See the speed up in performance when you replace it. Don't tell anyone. Just show them the graph. Start doing it underground. That's the best way to introduce it. It's never gonna come top top down. But you can start the rebellion and overthrow the old empire as, the Unicorn Project tells us.

If you

want to find all these links, the store where you can buy cups or the Patreon where you can just give us money or, the Slack where you can talk to all these beautiful people or our email address if you want to spam us and find all these links at kapago.dev. That is kapago.dev. I don't know. Should I say it's a web link? Https
colon/capago.dev.

But the your browser will figure all that out for you.

You could do it. You could say backslash backslash for those Windows ARM users out there.

Yeah. But if, Go team doesn't have first class support, we don't have, first class support.

Alright. Fair enough. Fair enough.

Thanks for listening, everyone.

Shai, do you hear that?
Do I hear what?

It sounds like someone might be tapping in on a conversation. I think there's a wiretap going on here.
Oh my god. Who's listening? I didn't do it. I didn't do it.

Hi. Is Coolpix is listening again?
No. It's not that kind of wiretap. When you

walk to the

garden, you

know what I'm saying? You

What's up, Globix?
Nice to meet you. Doing?

I'm pretty fine. Yeah.
So why don't you before we dive into wiretap and, its core literally products, vacuum, and, libopen API. And if you get all of them today, we're also throwing a pair of steak knives. How about you tell the people who you are and what you do?
Well, thank you. I appreciate the opportunity. Hello, everyone. My name is, and I'm the founder of, a company called Princess Beef Heavy Industries or PB 33f for short. It's actually it's shorter when you say it, you know, versus typing out. Anyway
It's kind of a hard to forget name. Princess Beef Heavy Industries.
Yeah. Princess Beef Heavy Industries. You know, it's actually, something that came from my 2 year old daughter. She watched a show, and it's called, the Blaze and the Monster Machines. It's a show about it's a cartoon about monster machines, monster trucks. And there's not there's no princesses or beef or any they can't mention that anywhere in there. But, anyway, yeah, she used to call it. I thought, you know, what a great name. What a great name. What what does you use that?
And what does the Princess Beef Heavy Industries
do? That's a very good question. So, we as building developer tools for hackers, engineers, effectively the enterprise grade tools designed for open source, open source tools for any engineer to to be able to take and use. It's beautifully designed and very heavy duty, all built in Go or founded in Go.

So I wanna this is not how we usually do things, but I wanna tell the people how you got on the show. Because usually what happens, people, like, participate in the community or tell about, like, some go thing they did on the Slack channel or whatever. And then we pick up about it, but basically from content. Right? From Reddit threads, from Twitter threads, from announcements, and then we reach out to those people. But this is the rarer and
I think more appreciated case where I used your stuff at work. We're trying to integrate, Princess Beef Heavy Industries tools where I work right now to improve APIs. So there's a few layers to them. Right? There's, like, the library and there are the tools and then there are the the linters. Like, there are a few different things going on at at Princess Beef. Right?
Yeah. There are. Yeah. So it it could have all started around a foundation of needing to be able to pass OpenAPI. And OpenAPI is it's an open it's a standard for defining rest APIs and rest interfaces, if you haven't heard of it.
Anyway, there's a bunch of tools out there that really do this, but they they're missing one key feature or 2 key features. And, there is like a nonnegotiable for me. I needed them and they just weren't available, these features in there. Things like deep level diagnostics on YAML and JSON files and things like that. So, anyway, I started to build them because I needed them up where I worked during my day job in 2019.
It was actually a company called VMware. It doesn't exist anymore. Anyway, I started to build all these tools and, I was we started using them internally and went very well, and everyone started using them when the company started adopting them, and they wanted to open source them, but they didn't want to do it. So so, okay. Well, I'll do it myself.
I'll build it again outside, you know, in the free and the open for everyone to be able to use. And that's the kind of the foundation. It all kind of started around LibOpenAPI, really. And and vacuum is an open API linter that's built on top of it that's configurable, that's plugins. And there's another tool called wiretap, which does compliance and mocking and testing.
And there's another tool built on top of that called OpenAPI Changes, which, you know, is hopefully, it's pretty obvious in the name. It does change detection, you know, and breaking changes and things like that.

So you you briefly mentioned that VMware doesn't exist and that they wouldn't let you open source this. We're not saying those 2 are related, but they could be. John,
have you ever

did you ever find yourself in the unfortunate situation of having to configure a vSphere, like cluster?
Unfortunately, yes. I was, the, the UI architect for the vSphere, client.
So I don't wanna beat that guy, but good riddance.
Yeah. It's we you know, the the technologies definitely had this foundation, in the industry, and it became critical at some point. But I feel like VMware lost its way, you know, personally over the years with vSphere, which has got bigger and bigger and bigger and heavier and heavier and heavier and more and more expensive, and they're more and more complicated. And then when it was trying to modernize the platform, it was kinda stuck. And and it was very almost impossible to try to rearchitect the entire thing from ground from the ground up.
Great company to me, but, vSphere definitely, has had its time. And I think Broadcom has this habit of going around and, you know, buying up IT companies that have passed their prime, you know, kind of over the hill, past the middle aged life mid mid midlife crisis. Yeah.
It's it's, Broadcom is the farm upstate. Yeah. Exactly. Where where my goldfish is. Everybody's fine there. Don't worry about it. So you mentioned 4 tools. One of them is a library. I assume most of our listeners won't interface with LibOpenAPI directly but if you use Go and you need to parse open API, you can use libopenapi. Now you mentioned there were already tools in the industry. I was like personally familiar with, Spectral, I think, or a
spotlight or something like that. Yes. Yes.
What is the difference? Like why did you need to develop it, again yourself? Why not just pick up Spectral or any of the other dozens of JavaScript? Yeah.
That's a great question. With Spectral, I've I've originally built all the tooling for all of us. We built this documentation tooling and things like that. It was all built on top of the linting provided by Spectral. Problem is with Spectral is JavaScript, right, as we know, as you may not know, as you well, you know now.
Anyway, trying to pass gigantic, and I mean, like, 100 megabytes YAML files and JSON in in JavaScript is pretty slow. And then trying to do highly recursive ace well, you can't do it asynchronously, but you're trying to do recursive lookups and references. When you feed in gigantic enterprise grade specifications that are that big and generated from code, spectral just just stops responding. It doesn't work. It's just this it just never comes back with a result.
So that's no good if you're trying to do real time linting using it as a linting tool. Like, if you're trying to hook it up to an editor, but you've got these gigantic files you're trying to look through, you got no choice but to use an editor to to be able to operate on them because they've got problems in them. But the cogeneration, which is really common in an enterprise, you know, you're mucking around with these dirty files, Spectral just just would not return. It would not render. It wouldn't give a result.
So I needed that data, and nothing else would do the job. There was nothing else that that was able to to give me that data. No tools would because, again, it's all JavaScript. So the only option was to build it, you know, using a performant language that will be able to give us that capability and go was right there. So I thought, why not just I I need the output from spectral.
I'll create an engine that allows me to to do all that work using their inspiration, their designers' inspiration, but, you know, obviously, it's built very differently. And now it it, you know, it's it's almost a dropping replacement for Spectral. There's a few few differences in in how you configure it. But that means that, you know, now you actually can get real time linting for gigantic files and run it as a service, which is something that I've I've been doing as part of online demo, which I'm gonna be expanding pretty soon. But, yeah, it's the reason why I rebuilt it is its speed.
It just absolute raw speed is critical for this type of work.

What?
I love linters. I mean, they're great. Right? If if they're done well, if they're useful, you know, if they if if it's just, like, the same, like, you know, noise, just spewing noise, not not so useful.

Right.
Yeah. Well, but if you can structure the noise as JSON, maybe.

That's all it takes.
Minus minus format JSON is enough to buy me over almost any tool. You have format JSON? Alright. Alright. I'll use you. I'll give you another

day on the terminal before,
you get brew uninstalled.

So let's let's talk about quickly how how do you get started with with a tool like, well, any of them really, but, let's look at vacuum. So you've got some open API spec. How difficult is it to get started? I mean, can you just throw your spec at it? Or do you have to do some setup? Do you have to configure the the rules you wanna use? How does that how does that go?
Yeah. That is a great question. So usually, the the you you don't need to know about tools like vacuum or any any of the the princess beef stuff for now until you're faced with a, oh, no. I need to use OpenAPI. Let me go look out there for for the tools that are available.
And, you know, you'll probably start using something like Spectral because it's, you know, more popular. It's it's more established. There's there's more content out there. But, you know, if you're doing anything at scale or anything real, that's with large files, you'll quickly learn that's, like, Spectral is is is a problem. So, anyway, you'll you'll go looking for another tool and you'll find my stuff.
The idea is that you just should be able to throw any OpenAPI spec at it, whether it's a single file or it's a gigantic exploded file that's you know, that is a is a pretty common way of structuring open APIs. You use JSON references and, you know, you can create, like, DigitalOcean have over 1700 files in their open API specification. It's absolutely massive. So you should be able to feed it gigantic specs like that or, you know, small ones or test ones or anything. But then without having to do anything else, it'll give you back results telling you what you've done wrong based on built in rules.

Mhmm.
With spectral, it comes with built in rules, but you've gotta generate a rule set file and you've gotta feed that in and that, you know, like, well, do I need all do you really need all of that? No. Not really. You should just be able to just throw a spec and get something out of it. So it actually operates as as a console tool.
It's got JSON reports. It's got, you know, JUnit exports if you want that. It's also got a built in terminal UI. One thing that I feel like we've lost the art of is terminal UI. And, you know, there's this whole renaissance going on with NeoVim and, you know, getting back to the, you know, raw fundamentals. And I feel like there's there's a next generation of terminal UI just around the corner. So I'm trying to build terminal UIs into everything that I do.
Just need to make sure it's, compatible with Elvish. You know? We just had that guy on, Chi. He's the developer of, Elvish. It's a Go terminal.

It's a Go shell. Running a
Go terminal, running a vacuum. But at the end, it's just to validate your open API files because you gotta develop your TypeScript to back end corporate work because it's corporate that it's someone decided that it's TypeScript so bad. Well, I'll take we'll take, our beautiful terminal UIs and our fast go, services where we can take them. Yeah. And then to Python on the back end as well.
Well, maybe. Not my first choice.
Well, definitely not mine as well.

But so you
mentioned the UI. This is a audio format. So it's gonna be kind of difficult to describe it, but all the Princess Beef stuff, vacuum and, at least, with what I've seen. Both the site itself and vacuum, the HTML reports, and wiretap, which we'll get into in a second, have a very distinct

Before you describe it, Shay, I want the listeners to just pause for a moment and imagine if if you had a theme called what was it? Princess?
Princess beef heavy industries. Yeah.

If you had a if you if you had a theme, name that. What kind of colors would you imagine? And I think this was not going to disappoint.
Yeah. So, you know, one of the things that I've always been hugely passionate about is so there's there's a vacuum going on in the back in the background, funnily enough. I'm not sure if you can hear

it or not, but if
you do, I apologize. It up. No worries. Okay. Good. So back
in wait. Are you actually, like, limping API roles right now, or is there a legitimate vacuum going on in the background?
So one of the I I kind of grew up, you know, on the Internet around, like, the late nineties, and, you know, it was a huge kind of emerging hacker culture back then. And then movies like The Matrix and Hackers and all that kind of stuff came out, and it kind of cemented this idea of, you know, you know, how you represent, you know, people that technical I don't know. Hackers, whatever, nerds, geeks, whatever you wanna call them. DevOps? Yeah.
Yeah. Exactly. Right. I I fell in love with that that Tron style. You know, it's not it's made up imaginary, you know, UIs for TV type experiences. Why can't we do that? Why we have neon pink and neon blue UIs that glow and, you know, emulate a terminal? You know, you look at both corporate, products, and, you know, they're very sterile. They all look the same. They're all very bland, and they're all very safe, you know, accessible.
And not that accessibility is bad thing. It was we need it everywhere, but and you can't there's no reason why you can't be accessible with neon, pink, and blue, but it's always designed to be, you know, for the lowest common denominator. And I thought, well, we can do better, and I wanna do better. So, yeah, everything I do is designed to look like it's a, like, a movie UI, like a terminal UI that's made up that you see in a TV show about hackers. That's that that's that's what I'm going for because it looks cool.
I I like looking at it. You know? And I spend a lot of time looking at this stuff, so I wanna feel good about it, you know, rather than going, oh, look. It looks like every other corporate UI out there.

So my first thought when I looked at the install page was, a quote from Jurassic Park. Oh, this is UNIX. I know this.
With the 3 d cubes going on. But I gotta say, I I've used it a few times already. It's cool looking, but, it's just the colors. Behind it is a super boring and safe, you know, API schema, linter, and validator software. Like, with a few CSS tweaks, it

could look like an accounting software. Don't worry. It's boring and works.

It just looks cool.
Yes. Exactly right. Yeah. So there's a built theming into it. I haven't quite deployed yet, but, yeah, we can turn it into TurboTax, at a at a drop drop of a hat. I just prefer you know, I prefer that. You know?
Don't let the, the vSphere have some yellow, have some blue gradients, have some folders and folders and folders. Sorry. Sorry. I don't mean to rag on vSphere. That's not the point of the show. Okay. So we talked about, vacuum, and we did a tangent about the UI, which is really cool. Hands down, one of the cool softwares I've I've used recently. Let's talk about wiretap. I think that's the real star of of this show.
So vacuum, I throw like, Jonathan said. I throw a file at it then I get some Lint violations. These are rule it finds the errors, but it also finds, like, best practices stuff. Right? Like, security rules and and can you give examples of a few rules that you think are maybe surprising or relevant to most listeners? Most listeners that's, stayed on, I mean.
Yeah. Who still is about OpenAPI? You know, OpenAPI is is not sexy when you think about what it is as a standard. But when you think about some of the tools we can build, some of the things it can do, and the results of it, it becomes pretty sexy. There's there's there's there's a lot of cool stuff that we can do.
But, you know, the out of the gate, the things that it would check for is, like, have you, like, used have you everything that you've defined, have you got any, orphaned schemers? Have you, you used the right schema in the right way? Have you used the right keywords? Have you used tags and then, you know, forget to declare them globally? Have you used the right schemers for security.
So it goes through in all the kind of basic common mistakes you would make, like, you know, overusing parameters or misusing parameters or forgetting to or defining a schema wrong or using an example against the schema that's wrong. And there's there's there's a whole bunch of stuff I could go into into in-depth and bore everyone to death on. But
Or or one rule that I may have seen 5,000 and change times in my results, using the same description,
Successful response. Yeah. Description duplication. Yeah. It's just the same. Okay. It's like okay or okay. Okay. Okay is is the most common one. And it comes from, like, CodeGen. But you think about when you feed that spec into documentation tools, it just all it says is okay. Like, every every operation. Okay. Okay. What? We need okay. What what else?
Okay. Computer.
Yeah. Exactly.
Insert Radiohead. So it checks for, like, common errors and, like, mismatches in references and many common mistakes that I've done myself and I'm sure many of the other listeners done as well. Is do you have, like, your your pet rule that you like to demo that's, like, a bit unique or or, you know, what's your favorite rule?
What's my favorite rule? So, yeah, I've never really thought about it because there's, like, 80 of them. I don't think I've got a favorite one because I spend so much time debugging them. I've all got a a little bit of hate for all of them. I can tell you the one that is the most, like, description problems.
It's another one that appears all the time that I've had to rebuild a few times because it's very, very hard to make it perform. He's checking for examples and making the exam making sure the examples compile against the schema that's been defined. So that there takes up a lot of compute because you're gonna take thousands and thousands of schemas, render them out, then do a comparison on whether or not, you know, it's actually complying with the schema using JSON schema and then finding them. And they can be it's got examples can be everywhere, in everything. So they're just infested throughout the specification.
That one that solving that problem there has caused me months of spinning in my sleep and having looping dreams. Yeah. And but it's one of the most useful. These examples are how we use the API. Right? And and without clear and definitive examples, becomes very hard to build code documentation. It's very hard to understand, like, mocking tools depend on it. They had to get useful information out. Otherwise, you're just getting auto generated stuff, and it
might be completely inaccurate. So we have a little bit of open API, which is if you wanna parse open API in Go in a perform a way, And we have vacuum. So if you have an open API file that you're in charge of or you have a huge open API file at your company, you can finally lint it. Let's jump to wiretap, which is I think slightly harder to get your head around, but super interesting. So what does wiretap do?
Yeah. It's actually that this is, it's I I feel the same way about wiretap. It's like a it's a it's an untapped, entity at the moment. It's like it's there's a lot of power there, but I haven't fully kind of exposed it out. And Mhmm. But I'm kind of digressing. Let me talk about what it actually is first.

Can I
go off into the weeds here? So, with wiretap, it fills the compliance part and the testing part of of the life cycle. If you think about the rest of the tools, LiveOpen API is the lowest part. It gives you a compiler level access to a to a specification, and you've got vacuum, which does the quality analysis on the specification itself, then you have another tool called open API changes, which we can talk about later if you want, which does change detection. But wiretap fills that, How do I how do I know that my UI and my back end are actually talking the right language?
They use the right Skibas. They they're using the right, verbs. How do I know that my back end has been implemented correctly? Because, you know, if if you're using OpenAPI as a source of truth, it means you build out from that sort of that contract design first. Are you the UI is generated or the SDKs are generated from the content, from the, from the contract for the UI, and the back end, is all also all this in a controller stubs and things like that is all generated again from that contract.
But if you're not doing that and having it all auto generated the right way and you're actually implementing it manually, how do you know you've done it correctly? How do you how can you validate that? And there's no real way to do that without actually sending stuff from the UI and testing it and sending stuff for the back end. So you could build in those features where you would mock, you know, build a mock server and have the UI call it and then do, like, a drift detection on, you know, how compliant is it. I always find that you get mixed results with that type of design.
So what wiretap does, it actually sits in the middle. It operates as a smart proxy, a configurable proxy that allows you to that takes all of your traffic from a, and it will then validate every single request against that contract. But it does it, you know, in the background, so it's not kind of interrupting the the API or slowing it down in any way. But it allows you to configure that if you want to. But what it's doing is it's actually watching every request from the UI or the client validating it.
And then every response that comes back in for that request is also doing the same thing. You know? Is it is it is it compliant? Have you used the right terminology in the schema? Have you used the right variables?
Have you missed any required properties? And so and so forth. And validating, like, headers and cookies and all kinds of stuff based on the contract. But it does that, you know, as a, like, a headless headless servicer, you know, a smart proxy. But it also comes with a a UI that you can look.
There's a monitor UI, which is what that we were talking about earlier, that gives you that kind of insight into actually what is going on. And then it could also operate offline as well. So if you're using it as part of like a pipeline, and we do this I actually work at a company called, Splunk, which is my day job and, we do this as part of our UI testing. We run all of our Cypress tests for our front end, and then we collect all the half files that generated. And we feed those half files into wiretap and then use that to effectively test our compliance.
And because it's going between the back end staging and the client front end, it's all real data. It's not, you know, mocked. So but it does do mocking as well. You can turn on mock mode with wiretap, and it will actually mock your data instead of, you know, talking to the real API.
That's very cool. I have 2 questions. The code that I just had, like, a click moment when you said, oh, it does compliance between real requests from the back end and front end. Is that the same, like, concept or maybe even the same, like, library functions that are used in vacuum when you validate examples? Because it seems similar in concept.
Right? You have an example. You wanna make sure it adheres to the schema. Same thing, but with a lot more parameters and way more hardcore when you do it in wiretap.
Yes. It's so that both vacuum and wiretap are using an extension to lib open API called the lib open API validator, you know, original, very original.
Not all names can be, princess beef heavy industries.
Sometimes, you know, just so so people can find it. Right? So, the the the LibOpen API validator, will validate requests and responses, but it also has schema validation as well, but and it's part of the library. So you can take a raw schema, either it's just raw JSON or it's been, you know, transformed into a struct. And then you can validate that or you can do like an http.request.response, and it will give you the same.
Tell you, is it compliant against the contract? It knows how to look up the paths and locate all the elements inside, and all that kind of stuff is taken care of for you. So, yeah, both wiretap and vacuum use the same thing. It's just in wiretap. It's checking every request and every response It's looking up, pulling out, you know, the the content type and the request and the cookies, and it's doing a lot more on, you know, a full request.
Whereas in vacuum, it's just looking at an example. Right? So it's like a different scale. Mhmm.
And the second question is, you mentioned a few things like offline mode, proxy, like, there's a bunch of ways to deploy and use wiretap. But let's say again, I just wanna start playing around with it. Like, I don't wanna move my entire UI testing automation framework to go through a proxy. Just wanna get started. So how do I get started?
Yeah. Great. Great question. So you can run as a docker container. You don't need to install anything, or you can download the the binaries.
It's available via brew or npm. It's just npm install at pb33f /ytaporbrew. I mean, there's if you actually check out the website, pb33f.io/ytap, there's a full kind of getting started guide in there. There's a quick start, actually, that allows you to it shows you download it whichever mech mechanism you want to be able to download it. There's there's a version of it.
Runs on all our pro systems. And then there's, like a sample spec you can use that it kept running with. A toy API you can play around with. And there's actually a video that kind of goes through showing how that all works. If you just wanna try it out and take a look at it and then kick the tires without touching any production stuff, that's the easiest way to go through it, that that that quick start guide.

And on the other side of the like, this is actually deployed at Splunk right now. Right? Which has more than, 2 or 3 APIs. If you've unfamiliar with Splunk, it's a pretty big company.
Yeah. It's pretty big. We were about 8,000 people. And we're actually it's funny. I've just been sold to Cisco for 27,000,000,000.
So, it's the com the company's gonna be changing and all kinds of interesting things happening there. But, yeah, no. We're using we use actually the way that we use wiretap. If we go a step further because there's another feature built into wiretap that that allow allows you to host static files as well. So it can exit little file server, which is great if you're doing UI development because we can now do all of our UI development and have all that content served by wiretap.
That means all of our API calls are going straight from the same host. So cause issues are nonexistent and things like that because now we can serve the UI that's making the API calls. So we do all of our UI development through wiretap. All the UI developers using it in in my organization anyway. And, we use it, you know, it allows us to decouple our front end from where it's because it's currently served as a as a platform, and the UI is kind of loaded by the platform.
So this way, we cannot have to run the platform. We just run the UI and call, you know, via our APIs via wiretap. So all the cause problems are gone because that's what happens, you know, when we when we decouple it. So we use it for that, and we use it for pipeline compliance and validation, for our for APIs.

You just touched on a topic that doesn't really relate to your products, but I I think it's fascinating. So I hope you don't mind those small tangent. You're talking about UI design and and you've mentioned previously that you've done UX work. Your website clearly demonstrates that you know a little bit about UI and UX more than the average Go developer. I'm curious how somebody who who seems to have an interest in in product, in in graphic, in in this sort of stuff, ends up doing something so low level in Go.
Like, you seem to be bridging to almost polar opposite worlds.
Yeah. That's a great question, actually. Because, really, what I want is I is I want to have an off the shelf library that would do all this work for me. And that's kind of where I start is I I wanna focus on the experience of consuming. Like, it's the it's the engaging with the product that I care about deeply.
So I call myself an experience engineer. And over the years, I've found that in order to create the experiences that I want, I always find gaps in the technology somewhere in the stack that is missing. Some element is missing, whether it's in the front end, it's in the middleware, it's in the API layer, it's on the back end, or it's at the you're right at the very bottom. And with this particular issue, the problem is unsolved at the very, very bottom of the stack with the with the literal passes that's reading in the abstract syntax tree that is Yamo or JSON is at that level that there's a there's a there's a huge missing piece, particularly in Go, which is the technology that I wanted to work in. Oh, that because I I like working in Go.
Love working in Go. It's fantastic. So I find that in order to create the experiences that I want, I've got to keep digging until I've got that entire stack fulfilled. Because only then can I control that high level outcome that I want to? Otherwise, there's always gonna be something I'm gonna be working around or hacking or, you know, not quite satisfied with.
So, you know, I just got I could keep digging until I find the bottom of where I, you know, where I lose control. And at this point, that gives me full control up and down the stack. You know, that that's that's what drives me really is that end to end experience. And, ideally, all this stuff would just be out there, but, you know, it's hard. Doing this stuff is hard.
Like, it's really hard. You see so for example, with OpenAPI, the first thing you would normally try is, oh, just create a bunch of structs and serialize them as adjacent. So, yeah, easy. You do that and it's like, okay, this works for this, you know, hello world spec. And then you get into things like JSON pointers and exploded files and remote files.
And then you get into the recurse recursive nature, of OpenAPI and polymorphism, and circular references, all kind of just the it gets deeper and deeper and deeper and deeper. So I feel like I'm the kind of person that, you know, I don't wanna give up. It's like, I do even know can I do this? Can I figure this out? No one no. There's so few people that gone and

done this. Mhmm.
Why? And then when you get down, they realize, like, it's because it's really, really hard, and it's it's nightmarish at some point. But, yes, it's more of a challenge to myself, really. That's why I did it because I want to get the experience, but I also want to be able to feel like I can do this, this low level stuff, all the way down to the very bottom of the stack.

Thank you for doing that, by the way. Yeah. I'm glad somebody's, somebody's living that nightmare so I don't have to.

And actually doubling down on that question, other than, Princess Beef Heavy Industries, you also have your own, blog, which we like to we we love content here on the show, especially good content, because we don't really produce a lot of, Go code, not Not enough to talk about in a weekly podcast anyway. So other people doing stuff, that we can talk about and, you know, introducing them, like, you're doing a blog post about wiretap and stuff like that, is great. But the first thing when I open your site is not, oh, if you need a open API specification adherence pipeline, welcome. And, like, you know, a picture of a glass building photos from the the down and a woman laughing at her salad and just a photo thing still on it. First thing you you see when you open is bright pink neon outlines, a skull, horns, piano keys, and it says code is art.
Like, this is a statement. It's not just, oh, I wanted a faster open API specification. At least, the the brand is definitely saying that there's something more here than just open API Yeah. Ours. Yes.
Thank you. Thank you for that. Yeah. That's the effect I was going for. You know, I was like, wow. This is not what I was expecting. You know, one of the reasons why I I I built the blog was, a, because I wanted to do more writing. I enjoy writing. And I I like creating video comps. I've got a YouTube channel as well, which is like over a 160 subscribers, and I'm way out there in the clouds right now. So So

I'm gonna I'm gonna stop you right now. The links to the wiretap vacuum, libopenapi, princess beef, Quobix personal blog, and the YouTube channel are all in the show notes of this episode. So, you know, if you enjoyed the talk so far, stop the podcast for a second, go click on the YouTube thing, it'll immediately add to your history, go click subscribe, go do all the things. Alright. Back to your back to
you. Thank you. Thank you. So, yeah, doing videos and content and, you know, just starting to put content out there is, like, great. Here's a blog.
Here's his stuff. But I also again, I wanted to drive content or drive traffic to that content. So I also host all the documentation for vacuum on my blog. So that's that's actually where the a very large amount of the traffic goes to, you know, all all my site is is through the the the vacuum documentation and using the online version of vacuum I've got there. But, you know, I I try and kind of coax people over.
Oh, look. There's some content here too. You know? It's about, you know, some general thoughts, but trying to be focused on engineering and, you know, engineering adventures and things like that. So, yeah, it's it was really kind of how can I use SEO to my advantage here to create content that people are gonna be searching for for work and then, you know, stop off for an interesting thought or 2, you know, 5 minute read?
It seems to be doing pretty well. It's not breaking the the as I said, you know, breaking any records with how many people are going there, but it's from where I started with 0 is is a reasonable amount of people now, you know, taking taking a look.

I can definitely, empathize with that. We started the show. We had, like, I think, 50 downloads on our first episode, and we're like, oh my god. That's so many people.
That was great. 50. Wow. That's huge. That's for me. That's a huge number of people.

Yeah. But but then but then, you know, you keep doing it and and more people pile on if you do things they care about. So, obviously, a lot of people care about Go, including

yourself. Oh, I
love that. You really wanna Yeah. I love that. Yeah.

I just think that not enough people care about open API. They are hard by it, but I've never talked to to people. I I've talked about, APIs in general. And I think talking about API design and do do you wanna do schema first? Do you wanna do, like, what's the architecture?
How what's your workflow? These are super interesting conversations. Tools that can just do all these things for you kind of do a paradigm shift. Right? Instead of talking about, alright, we need a process to validate QA, the the schema now now and then or everybody has to a 100% work within this, API generation pipeline because that's the only one we trust, and you can't just spin up a quick endpoint to work on it.
These sort of, axioms are just not true if you can lint a gig of open API in in just a few seconds. So I think that there's really big changes there that people do care about. They just don't know that they care about yet.
Yeah. They you you don't you don't normally find out, like, you you you always start looking for these types of tools until you're faced with a we have to get this under control. We've we've got a bunch of APIs. I'm trying to build an API. I wanna get documentation going.
I wanna build an SDK for it. And only then you're like, oh, what should I use? And if you're not, you know, building like a microservice, you know, use gRPC or protobuf. You know, that's that that's that's that whole area is covered. The second you start looking at rest, you know, what do I do here? What's available? And then OpenAPI will no doubt be coming across your threshold, and then the journey begins.

There's just to complete the picture, you mentioned open API changes. It's like a change detector with the spiffiest interface I've ever seen. I think the detection the detection is not the interesting part. The diff is the interesting part, at least for me. Right? What's the experience there? You said you're experienced engineer. So what's the experience of open API changes?
Yeah. That's a great question. So, the like with vacuum and every other tool out there, you know, with well, vacuum for now, there's there's changes coming, new stuff coming. But, if you think about, like, a linting tool or a diff tool or or, you know, a change detection tool, it just gives you a list of this was changed, this was changed, and, like, it's like a like a report, and that's that's fine. But OpenAPI as a document structure is a tree or at a graph, actually, when you think of polymorphism and references, it becomes a huge graph.
And trying to understand exactly what has changed in a very flat list of, you know, property a, property b was added. And even with line numbers, you still don't understand exactly where in the model or what the model looks like. And you can't get you understand the gestalt of it. So I wanted to take a completely different approach with with the way I do change detection. So I render everything out visually.
I show I show you the tree. I show you the mod they act actually, where in the tree each individual element has been changed. So you can see that that that whole build out, and you can explore it like, you know, you wouldn't a regulatory in a UI. But then there's also another option of, viewing it as a as a graph, like a visual graph. And I was actually really inspired by this, this great cycle, jason crack.com.
Maybe you've heard of it, maybe you haven't. But what it does is it allows you to put a JSON file in, and it will visualize it by exploding it apart. I was like, oh, that's pretty cool. That's really nice. But it doesn't make any sense for what I'm trying to do because it would just be, you know, exploding YAML file, which is open APIs.
How do I render that? You know, those changes in the using the same technique. So I looked up their source code. I saw the libraries they were using. I was like, I'll use that, and I'll use that.
And I grabbed them and and started, you know, basically recreating that same idea, but, you know, with with a much more focused purpose and also, you know, put the the Tron neon colors in there to make Right. Super cool. So, yeah, it was really as how can I explore this visually? I want to be able to walk around the changes in the model. I want to see how the model has changed and the relationships and the hierarchy, not just a straight flat list of you know, a, b, c, d because, you know, that that's that's great.
You know, if you're just looking for a CICD, you know, break breakwater or break a break glass, you know, That's fine because it will fail the pipeline, but not what I'm actually trying to understand. And then also, there's just something else that's missing from all these other tools that I see is how do I see how it's changed over time? So how can I see the changes, between each different commit? So open API changes users get heavily to look back all the commits in in in history and, you know, up to a certain limit. You you can define that.
But then it will render out, you know, change between a and b. This change shows you those graphs of how it's gone up and gone down and, you know, breaking changes and when they were. So it just gives the whole element a visual aspect, which is missing from all the other tools.

Trying to explore you know, you you went about how you developed it. Would did this come out of a, like, thing you had to do at work, or were you just, like, inspired to take a what what I'm asking is, are these tools utilitarian first, or are they I have a cool idea I have to do
it first. Oh, it was all you to tell it all utilitarian, all of it. There's nothing that I build doesn't have a purpose. It's not just, hey. This is a fun thing.
Let me go do that. I need it. I need it to exist. And my first choice is, where can I get it there's already been built in a way that I can consume it in the way that I needed to be con to to so I can, you know, build the experience that I want? So, yeah, and I don't ever waste my time on things that don't have a purpose or or just like cool ideas.
And not that it's a waste of time, you know, because that's how all great prototypes start out, but I need something. I needed to do something, and I might actually need to build the thing that builds the thing that builds the thing that builds the thing that gives me what I want. And that's usually where I kind of work backwards if you were to take the Amazon methodology. I work all the way back from that point.

Mhmm. Very cool.
Awesome. Thank you. I appreciate that.

So libOpenAPI, if you need to parse go. Vacuum, if you need to lint your open API files. OpenAPI changes, just slightly more boringly named.
I know. I know. It's the most boring name of a lot, really.

If it's good for SEO, it's good for SEO. And you have one of them, so you so you can add all the rest, call them, ask your daughter to call you for any names, you know. So open API changes for, diff, beautiful diff, tool and, like, change detection over time and wiretap for, like, compliance, like, schema adherence, whether on your machine or CI or from unit from, like, recordings, from HP archive recordings.
Yes. Yes. Exactly right. You've nailed it. You could That's it. Better than I could. That's

all? There's there's
some other things in there as well. There's there's there's a couple of things I've been building.

I'm joking. That's not much. I'm not.
There's so there's so many more things that aren't quite ready yet that have big potential in my opinion, in in my very humble opinion. One of the things I've been working on is, state management. And state management in the UI is, you know, traditionally pretty complicated for large scale applications. You know, something like like the vSphere client. State management is a real problem.
And, so, yeah, we're gonna on a state management, design and architecture that allows you to sync with sync data. So everything's stored in Index DB in the browser and it's synced using, you know, bags. This is like a caching mechanism. But one of the things I'm building is is a is a live sync, using WebSockets, which is a design that I've put together. It's actually got some patents on it as well, but but that's so interesting.
But it synchronizes the data in real time. So it's using pub sub over async API. So it's the next step. So I'm focusing on on open API for right now and then moving to async API, which is actually where I build all the infrastructure for the next step. Next step of the business, if you will.
And, yeah, anyway, that's there's other things coming that aren't, you know, focused on open API that are more kind of state management tools or infrastructure tools or Pub Sub tools, but they're not they're just not ready yet. They're they're too early.

Well, there's something to expect down the pipeline at least.
Yes. There's there's much more to come. There's there's a lot there's a whole platform I'm building as well for all of this stuff, by the way, which is not, again, not quite ready yet.

Who's using, Princess Beef stuff today?
There's actually quite a few, businesses that I know of, that are using it.

I before you start, I can probably say that, Orca is, using it. It's super it's been super useful.
Oh, yeah. Got me that set. A I appreciate that. Thank you. So ORCA being one of them, there's a there's a few other companies that have heavily invested in some of the the lower level tooling like Lib Open API.
Like a company that I work closely with called Speakeasy, and they specialize in SDK generation. And, another company that's been using pretty heavily is a company called Mailgun. And they they actually helped contribute to some of the model, enhancements that we had going in there. And there's a couple of, like, German infrastructure companies as well. I can't remember the name name of mine now.
But, anyways, the name escapes me. But, yeah, there's there's actually quite a number of businesses, building on top of it, or using it. And there's there's companies that I know of, the ones that have reached out to me, and there's there's lots that that that don't. A lot of people just take it and build with it or include it, which is great. You know, it's the way it

should be, or they

fork it and they use their own version. Cool.
So, Quobix, before we, close out the interview, there were a few things you want to mention. If you want to sign up to, Kobix newsletter, which I highly recommend, it's not only about open API. There's actually a really good article on your blog that I sent to, I think, tens of people at this point called how to get nothing done, which I really like. And there's also top five mistakes engineers make when giving demos. When, like, if you have a demo coming up at work and you have a video and you're nervous, watch it because it's really good advice.
So people can jump to your site, sign up to a newsletter. I've signed up and you haven't sent me anything yet. I don't know if it's you just don't like me or if it's just not spammy. I assume it's not spammy. Right?
I so I've been collecting the emails. I just haven't had a chance to build a tool to send anything out yet. So I I wanted a way to be able to make sure that there was a way for me to contact people that are interested. I just haven't haven't got there. I am planning on it, though. I I definitely am planning on it.

So sign up and, be ready in, 15 years when, Corbi's finished implementing SMTP from the ground up using Go.
Yeah. Absolutely. The only way.

There's the YouTube channel which we mentioned. There's also in the show notes. And there's a conference coming up that you speak or you're gonna speak at. Right?
Yes. I'm speaking at a conference called API Days. It's in New York. It's, April 30th May 1st, and there's a dedicated open API track there that I'll be talking about, you know, talking about the tools. So if you're in the area, please stop by and say hi.

You know what? I can just it's kind of hard to imagine. You see the website and then it's very different from, your website which is like dark, you know, it's like a it's a nice looking compared to corporate stuff, it's well designed. And then I see the partners. Right?
Thank you to our partners, the people who sponsored the thing. And I'm like, Okta, Broadcom, Postman. I'm like, oh, yeah. And I just imagine Princess Beef Heavy Industries sitting there in between MuleSoft and Traffic Labs, and I'm like, that's gonna stand out.
One day.

One day, man.
One day. One day. That's that's the goal. That's that's the dream right there. Just squeeze it. I just squeeze it just right between them. Yes. So yeah.

There's There's API days. Link is in the show notes as well. It's at April 30th. Right?
April 30th May 1st. Yes.

Cool. Well, Kopiks, thanks for coming on. As, as we've mentioned, we always end our, interviews with I don't know if this is a stumper question. Last last year, it was a stumper question. This year, it's maybe less of a stumper question. But it's it's a, I don't know, a standard question. I I don't know how long you've been using Go. When did you start with Go?
So I started using Go, the in December 20 2015.

You have the month down. Do you know what date?
It was it was December 23rd.

2 days before Christmas. So you know it was what time it would you know what time it was too? No. Okay.
No. I don't remember that part. I don't

even remember exactly what year it was. I could probably figure it out. So the the question is, when you started learning Go, were there any surprises? What surprised you? What was most challenging for you picking up the new language?
Yeah. The most challenging thing for me was because I I spent 10 years, like, focusing purely on, like, Java and JavaScript. Mhmm. But those are the kind of Java was my choice of all back end. And, you know, being, you know, overly, obfuscated with this object orientation, coming to go and trying to translate between how do I think about inheritance and polymorphism in a way that translates into Go?
Trying to bridge that gap in my mind was extraordinarily difficult. And it, you know, I I would I was trying to build Go like Java, which is, you know, normally what, you know, any engineer would start out. If I'm familiar with mine, you start trying to rebuild it in that that syntax. It just doesn't work. And it was very, very frustrating until one day, it just clicked in my head. It's like, oh, no. No. No. No. No.
I'm doing this all wrong. I'm thinking about this all wrong. And it was probably about 3 weeks of, you know, making a bit of progress, taking 2 steps back, little bit of progress, 2 steps back. And then it just clicked in my head. It's like, I need to rethink about how how I'm doing this.
That that there, that transition from Java and how you build Java and how you think through Java and classes and the whole design and translating that to these somewhat almost object oriented, but not quite design of Go. And it's the not quite part that was throwing me off in everything because I was designing like I was building a Java app, then that's the problem. Yeah. That was the hardest transition for me.

Nice. I had a similar experience, so I won't I won't go into it. I'm not the interviewee here, but, I can I can identify it completely? I'm I'm impressed that it only took you 3 weeks or so to get over it. I think it took me a lot longer than that.
It's I I knew that I was banging my head. I that I was doing something wrong. I was missing something because it was just I was getting more and more frustrated and blaming the language. I was like, this language is wrong. I was like, no. No. No.

I am wrong.
I am wrong.

Very good. A little bit of humility can go a long way when learning a new language.

So Indeed.

Well, thanks again for coming on. It's been a pleasure. Thanks for tapping our wires, I guess.
Thank you. Thank you for having me. I really appreciate it. I really appreciate your time.

Awesome. And

if you wanna follow-up with, any of Kovik's stuff, again, all the links are in the show notes. Thanks for coming. Talk to you all next week.