What makes a first-class Go port? Plus 👸 OpenAPI tools fit for a princess, with quobix

Shay Nehmad:

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 .

Jonathan Hall:

I'm Jonathan Hall.

Shay Nehmad:

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

Jonathan Hall:

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.

Shay Nehmad:

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.

Shay Nehmad:

But yeah, this episode is gonna be extra nasally. So let's get started because it's not gonna get any better.

Jonathan Hall:

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?

Shay Nehmad:

I made it. Okay. I think I got better. I missed last week. Thanks to Dalena, by the way, for filling in.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Jonathan Hall:

Mhmm.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Jonathan Hall:

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?

Jonathan Hall:

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.

Shay Nehmad:

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.

Jonathan Hall:

Oh, yeah.

Shay Nehmad:

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,

Jonathan Hall:

for months. Yeah.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

Right? Yep. Yep. For sure. It's fun to see that it's actually a community, not just in the virtual sense.

Shay Nehmad:

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.

Shay Nehmad:

Go do them. Alright. Let's talk about some proposals.

Jonathan Hall:

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

Jonathan Hall:

What does that number mean?

Shay Nehmad:

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

Jonathan Hall:

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.

Shay Nehmad:

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

Jonathan Hall:

Oh, yeah.

Shay Nehmad:

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

Jonathan Hall:

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.

Shay Nehmad:

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?

Shay Nehmad:

What's SD? South Dakota. South Dakota.

Jonathan Hall:

Rapid City, South Dakota.

Shay Nehmad:

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.

Jonathan Hall:

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?

Shay Nehmad:

Mhmm.

Jonathan Hall:

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.

Shay Nehmad:

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?

Shay Nehmad:

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.

Jonathan Hall:

Mostly Linux though.

Shay Nehmad:

Yeah. Yeah. But there are enough. It's not negligible, which, you know, thinking about it, it makes a lot of sense. Right?

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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?

Jonathan Hall:

I didn't either, yeah.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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?

Shay Nehmad:

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?

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

There's a new GoDev blog. It just, like, got posted this morning, I think. Right?

Jonathan Hall:

Yeah.

Shay Nehmad:

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

Shay Nehmad:

What's going on?

Jonathan Hall:

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

Shay Nehmad:

You know how the emperor Palpatine, infinite power.

Jonathan Hall:

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.

Jonathan Hall:

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.

Shay Nehmad:

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.

Shay Nehmad:

Anyway, sorry.

Jonathan Hall:

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.

Shay Nehmad:

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.

Shay Nehmad:

So you still have to deal with a lot of storage. But they've solved this as well, right?

Jonathan Hall:

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.

Jonathan Hall:

It's it requires less of a politically correct disclaimer. No.

Dave Shanley (Quobix):

Yeah. It looks

Shay Nehmad:

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?

Jonathan Hall:

No. I don't think I have.

Shay Nehmad:

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?

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

What editor do you use, Shay? Loaded question. Uh-huh. For a what? Either VIM or Versus Code.

Shay Nehmad:

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.

Shay Nehmad:

Vim is very it's optimized to start very fast. I have almost no plug ins in it.

Jonathan Hall:

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

Shay Nehmad:

yeah, yeah.

Jonathan Hall:

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

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

At least for now.

Jonathan Hall:

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.

Shay Nehmad:

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

Jonathan Hall:

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.

Shay Nehmad:

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

Jonathan Hall:

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.

Shay Nehmad:

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.

Jonathan Hall:

I guess so.

Shay Nehmad:

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

Jonathan Hall:

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.

Shay Nehmad:

Professional podcaster here, everyone.

Jonathan Hall:

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.

Jonathan Hall:

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.

Shay Nehmad:

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.

Shay Nehmad:

Give prizes out, like, do a raffle and give, like, licenses.

Jonathan Hall:

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

Shay Nehmad:

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.

Shay Nehmad:

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.

Jonathan Hall:

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.

Shay Nehmad:

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.

Jonathan Hall:

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.

Shay Nehmad:

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.

Dave Shanley (Quobix):

Right.

Shay Nehmad:

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.

Shay Nehmad:

You can join our Patreon and become a member. It's $8 a month, and we would really appreciate it.

Jonathan Hall:

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.

Shay Nehmad:

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?

Jonathan Hall:

Uh-huh.

Shay Nehmad:

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

Jonathan Hall:

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.

Shay Nehmad:

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.

Shay Nehmad:

But the compile time in Go is so short that you don't have any

Jonathan Hall:

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

Shay Nehmad:

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.

Shay Nehmad:

Unironically, I can give you that tip.

Jonathan Hall:

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.

Shay Nehmad:

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.

Jonathan Hall:

Mhmm.

Shay Nehmad:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Jonathan Hall:

If you

Shay Nehmad:

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

Speaker 4:

colon/capago.dev.

Shay Nehmad:

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

Jonathan Hall:

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

Shay Nehmad:

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

Jonathan Hall:

Alright. Fair enough. Fair enough.

Shay Nehmad:

Thanks for listening, everyone.

Jonathan Hall:

Shai, do you hear that?

Speaker 4:

Do I hear what?

Jonathan Hall:

It sounds like someone might be tapping in on a conversation. I think there's a wiretap going on here.

Speaker 4:

Oh my god. Who's listening? I didn't do it. I didn't do it.

Jonathan Hall:

Hi. Is Coolpix is listening again?

Speaker 4:

No. It's not that kind of wiretap. When you

Jonathan Hall:

walk to the

Shay Nehmad:

garden, you

Jonathan Hall:

know what I'm saying? You

Shay Nehmad:

What's up, Globix?

Dave Shanley (Quobix):

Nice to meet you. Doing?

Jonathan Hall:

I'm pretty fine. Yeah.

Speaker 4:

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?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

Anyway

Speaker 4:

It's kind of a hard to forget name. Princess Beef Heavy Industries.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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?

Speaker 4:

And what does the Princess Beef Heavy Industries

Dave Shanley (Quobix):

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.

Shay Nehmad:

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.

Shay Nehmad:

But this is the rarer and

Shay Nehmad:

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.

Shay Nehmad:

Like, there are a few different things going on at at Princess Beef. Right?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Jonathan Hall:

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,

Dave Shanley (Quobix):

have you ever

Shay Nehmad:

did you ever find yourself in the unfortunate situation of having to configure a vSphere, like cluster?

Dave Shanley (Quobix):

Unfortunately, yes. I was, the, the UI architect for the vSphere, client.

Speaker 4:

So I don't wanna beat that guy, but good riddance.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Speaker 4:

It's it's, Broadcom is the farm upstate. Yeah. Exactly. Where where my goldfish is. Everybody's fine there.

Speaker 4:

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.

Speaker 4:

I was like personally familiar with, Spectral, I think, or a

Dave Shanley (Quobix):

spotlight or something like that. Yes. Yes.

Speaker 4:

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

It just absolute raw speed is critical for this type of work.

Jonathan Hall:

What?

Dave Shanley (Quobix):

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.

Jonathan Hall:

Right.

Speaker 4:

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

Jonathan Hall:

That's all it takes.

Speaker 4:

Minus minus format JSON is enough to buy me over almost any tool. You have format JSON? Alright. Alright. I'll use you.

Speaker 4:

I'll give you another

Shay Nehmad:

day on the terminal before,

Speaker 4:

you get brew uninstalled.

Jonathan Hall:

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?

Jonathan Hall:

Do you have to configure the the rules you wanna use? How does that how does that go?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Jonathan Hall:

Mhmm.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Speaker 4:

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.

Jonathan Hall:

It's a Go shell. Running a

Speaker 4:

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.

Dave Shanley (Quobix):

Well, maybe. Not my first choice.

Speaker 4:

Well, definitely not mine as well.

Shay Nehmad:

But so you

Speaker 4:

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

Jonathan Hall:

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?

Speaker 4:

Princess beef heavy industries. Yeah.

Jonathan Hall:

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.

Dave Shanley (Quobix):

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

Shay Nehmad:

it or not, but if

Dave Shanley (Quobix):

you do, I apologize. It up. No worries. Okay. Good.

Dave Shanley (Quobix):

So back

Speaker 4:

in wait. Are you actually, like, limping API roles right now, or is there a legitimate vacuum going on in the background?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Jonathan Hall:

So my first thought when I looked at the install page was, a quote from Jurassic Park. Oh, this is UNIX. I know this.

Speaker 4:

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

Shay Nehmad:

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

Jonathan Hall:

It just looks cool.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

I just prefer you know, I prefer that. You know?

Speaker 4:

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.

Speaker 4:

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.

Speaker 4:

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?

Speaker 4:

Most listeners that's, stayed on, I mean.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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

Speaker 4:

Or or one rule that I may have seen 5,000 and change times in my results, using the same description,

Dave Shanley (Quobix):

Successful response. Yeah. Description duplication. Yeah. It's just the same.

Dave Shanley (Quobix):

Okay. It's like okay or okay. Okay. Okay is is the most common one. And it comes from, like, CodeGen.

Dave Shanley (Quobix):

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?

Dave Shanley (Quobix):

We need okay. What what else?

Speaker 4:

Okay. Computer.

Dave Shanley (Quobix):

Yeah. Exactly.

Speaker 4:

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?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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?

Dave Shanley (Quobix):

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

Speaker 4:

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?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

But I'm kind of digressing. Let me talk about what it actually is first.

Jonathan Hall:

Can I

Dave Shanley (Quobix):

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?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Speaker 4:

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.

Speaker 4:

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.

Dave Shanley (Quobix):

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.

Speaker 4:

Not all names can be, princess beef heavy industries.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

Whereas in vacuum, it's just looking at an example. Right? So it's like a different scale. Mhmm.

Speaker 4:

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?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Shay Nehmad:

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Jonathan Hall:

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.

Jonathan Hall:

Like, you seem to be bridging to almost polar opposite worlds.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

There's so few people that gone and

Shay Nehmad:

done this. Mhmm.

Dave Shanley (Quobix):

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.

Jonathan Hall:

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.

Shay Nehmad:

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.

Shay Nehmad:

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.

Dave Shanley (Quobix):

Thank you. Thank you for that. Yeah. That's the effect I was going for. You know, I was like, wow.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

So So

Shay Nehmad:

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

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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?

Dave Shanley (Quobix):

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.

Shay Nehmad:

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.

Dave Shanley (Quobix):

That was great. 50. Wow. That's huge. That's for me.

Dave Shanley (Quobix):

That's a huge number of people.

Shay Nehmad:

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

Jonathan Hall:

yourself. Oh, I

Dave Shanley (Quobix):

love that. You really wanna Yeah. I love that. Yeah.

Shay Nehmad:

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?

Shay Nehmad:

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.

Shay Nehmad:

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

Shay Nehmad:

that they care about yet.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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?

Dave Shanley (Quobix):

What's available? And then OpenAPI will no doubt be coming across your threshold, and then the journey begins.

Shay Nehmad:

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?

Shay Nehmad:

What's the experience there? You said you're experienced engineer. So what's the experience of open API changes?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Shay Nehmad:

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

Shay Nehmad:

a cool idea I have to do

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Shay Nehmad:

Mhmm. Very cool.

Dave Shanley (Quobix):

Awesome. Thank you. I appreciate that.

Shay Nehmad:

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.

Dave Shanley (Quobix):

I know. I know. It's the most boring name of a lot, really.

Shay Nehmad:

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.

Dave Shanley (Quobix):

Yes. Yes. Exactly right. You've nailed it. You could That's it.

Dave Shanley (Quobix):

Better than I could. That's

Shay Nehmad:

all? There's there's

Dave Shanley (Quobix):

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

Jonathan Hall:

I'm joking. That's not much. I'm not.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Shay Nehmad:

Well, there's something to expect down the pipeline at least.

Dave Shanley (Quobix):

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.

Shay Nehmad:

Who's using, Princess Beef stuff today?

Dave Shanley (Quobix):

There's actually quite a few, businesses that I know of, that are using it.

Shay Nehmad:

I before you start, I can probably say that, Orca is, using it. It's super it's been super useful.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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

Jonathan Hall:

should be, or they

Shay Nehmad:

fork it and they use their own version. Cool.

Shay Nehmad:

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.

Shay Nehmad:

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?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

I I definitely am planning on it.

Shay Nehmad:

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

Dave Shanley (Quobix):

Yeah. Absolutely. The only way.

Shay Nehmad:

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?

Dave Shanley (Quobix):

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.

Shay Nehmad:

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?

Shay Nehmad:

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.

Dave Shanley (Quobix):

One day.

Shay Nehmad:

One day, man.

Dave Shanley (Quobix):

One day. One day. That's that's the goal. That's that's the dream right there. Just squeeze it.

Dave Shanley (Quobix):

I just squeeze it just right between them. Yes. So yeah.

Shay Nehmad:

There's There's API days.

Shay Nehmad:

Link is in the show notes as well. It's at April 30th. Right?

Dave Shanley (Quobix):

April 30th May 1st. Yes.

Jonathan Hall:

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.

Jonathan Hall:

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?

Dave Shanley (Quobix):

So I started using Go, the in December 20 2015.

Jonathan Hall:

You have the month down. Do you know what date?

Dave Shanley (Quobix):

It was it was December 23rd.

Jonathan Hall:

2 days before Christmas. So you know it was what time it would you know what time it was too? No. Okay.

Dave Shanley (Quobix):

No. I don't remember that part. I don't

Jonathan Hall:

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?

Dave Shanley (Quobix):

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?

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

It's like, oh, no. No. No. No. No.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

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.

Jonathan Hall:

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.

Dave Shanley (Quobix):

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.

Dave Shanley (Quobix):

No. No.

Jonathan Hall:

I am wrong.

Dave Shanley (Quobix):

I am wrong.

Jonathan Hall:

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

Shay Nehmad:

So Indeed.

Jonathan Hall:

Well, thanks again for coming on. It's been a pleasure. Thanks for tapping our wires, I guess.

Dave Shanley (Quobix):

Thank you. Thank you for having me. I really appreciate it. I really appreciate your time.

Jonathan Hall:

Awesome. And

Shay Nehmad:

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.

Creators and Guests

Jonathan Hall
Host
Jonathan Hall
Freelance Gopher, Continuous Delivery consultant, and host of the Boldly Go YouTube channel.
Shay Nehmad
Host
Shay Nehmad
Engineering Enablement Architect @ Orca
What makes a first-class Go port? Plus 👸 OpenAPI tools fit for a princess, with quobix
Broadcast by