43. Pet Project – Enhance Your Coding Skill | Johan Karlsteen


pet project

Johan Karlsteen, joins to talk about the pet project. Johan, running top trailblazer site, is a Software Engineer living and working in Stockholm, Sweden.

Johan has been working with Salesforce since 2012 and is currently a Salesforce consultant.


Main Points

  • Johan’s introduction
  • We talked a little bit about Computer Bible Books – TAOCP and SICP
  • How did Johan start his pet project – top trailblazers?
  • How was top trailblazers technically implemented?
  • Who are using top trailblazers?
  • What is the purpose for Johan of having this pet project?
  • What advice would Johan give to listeners in terms of pet projects?
  • Why is it important to learn other technology stacks?
  • We talk briefly about Apex, Python, coding styles, code wars
  • Learn new things with the pet projects: hosting service, SEO, static site generators

Links


Video Teaser On Pet Project

The YouTube Video URL


Contact Me

If you enjoy this podcast, please reach me out to let me know your thoughts or simply say Hello. My (Xi’s) contact info:

Take care, until next time :)!

Transcript

AI-generated, unedited.

[00:15] Hey everybody! This is Xi Xiao. This is yet another episode of Salesforce Way podcast. Today I'm so happy and really have a closing by guest with me. His name is Johan Karlsteen. Hello, Johan. Hello. Hello, hello. How are you doing? I'm fine, thank you. How are you? I'm good. I'm good. You know, you're the first one that's so close by. You're from Sweden, from Stockholm, right? We're just having one hour gap today. Usually, when I talk with the people from the U.S., like ten hours gap, that's usually the challenge. You know, yeah. It's neither of us has to stay up late today. Yeah, indeed. So Johan, could you still introduce yourself to our listeners? Oh yeah, sure. So. I'm I'm from Sweden. I'm a software engineer, and I've been working with Salesforce since the eleventh of May two thousand and twelve. Okay, so that's yeah, what's that? Seven years. Yeah, I am. Yeah, before that I worked with mostly everything like iOS apps, Android apps, and most backend stuff. I I usually say that I worked with all languages except for Cobol because I actually did quite a lot of Fortran when I worked for the Swedish weather department. So I yeah.

[01:45] So you really touched a lot of programming languages. Yeah, and I really think it's fun to see that in the end. The language doesn't really matter, and we still solve the same problems as they did in the fifties. It's all about. Loops and data structures. Then the language is just it's just a tool. Yeah, we just change the things on the surface, right? The fundamentals are still the same. Yeah, and and more JavaScript today, but same problem. I also see that in your LinkedIn profile you mentioned, or in the Twitter profile, you said you want to read this tile CP. Oh yeah, Bible book. It's called the The Art of Computer Programming. Yes, yes. Yeah, it's that's a series of books, right? Exactly. It's. I don't think Donald Knuth has finished writing it. I only have the first four ones. Yeah. Okay. But it's it's super heavy on the math side. So I I've yeah I've skimmed it. Okay. Clearly, algorithms that are used by Google today are in that book. And the book he started writing it in the 70s. So it's yeah it's a bible on the. Ongoing Bible, yeah, yeah. I don't know if I ever ever have chance and have the courage to read that book. For me, the Cisper book is what I really want to touch.

[03:15] You know the structure and the interpretation of computer programs, which is reading for with a Lisp language. So use the Lisp as the examples. Yeah. That's actually a language I I I've barely used it. Like, yeah, I think they used that for some AI prototyping, right? It's that. Yeah, in the past, yes, yeah. Yeah, I started to use that as you know as a Emacs language. Ah, okay. Yeah, and then start to touch it a bit, and then learn functional like a closure. But I I still only scratching the surface. I really don't know Lisp that well, but I know it's a beautiful language. Okay. Yeah. Yeah, I, at at our university, it was like a battle between Vim and Emacs, and I ended up on the Vim side. So I'm really bad at Emacs. Me too. I mean, I love the Vim. I love the Vim key. So, so, but the Emacs is also another big monster. So I now I never use Emacs anymore and switching. No, I, just don't have time. I'm really into regular expressions, so then Vim was perfect. But now, when you can use them in Visual Studio Code, for example, I usually stay there instead. Okay. Yeah. Me too. Me too. All right. So our topic today is really to talk about some side project, or or you call it maybe pet project,

[04:45] right? Yeah, maybe a bit, bit, a little bit more love from your point of view. Aside from checking, is like any time can just kill it. Yeah, right. A pet is more. You you need to give a love. You need to watch it grow. To me, that's the definition. Yeah, I've never thought about that actually, but it it makes sense. Yeah, it's. I think. Two years ago, I could probably have killed off that project, but today it's like there's a lot of people using it, so it's more of a pet, and people kind of care about it. So I would have a hard time killing it. Okay. Could you have a brief introduction? What that pet project really is. Sure. So it all started back when I became a consultant again, like two and a half years ago. We were a small Salesforce team of about eight people. And we between us we should have 98% of all the badges on Trailhead,

[05:49] which back then I think there were like 220 badges in total. So it wasn't that bad. Okay, because you manage it exactly. It was manageable. And then we kind of tried to use the partner portal to get this information, but the partner portal doesn't really have leaderboards or anything. It just. Yeah, you can sort it on which badges are not completed by anyone, or it might have changed. I haven't used the portal in years now for that purpose. But then I I started looking into it and said, okay, maybe I can build like a screen scraper or something so that we in in our team at least could have like. A view of how many badges do we have? Yeah, so I built that, and I used some weird material CSS theme that it looked horrible, and I don't even have screenshots of it anymore, which is a good thing. Then I also added. Or I talked to a colleague and said, okay, maybe we should scrape the certifications as well because I mean it's good. So because the sales guy, if he he's asked by someone like a client, which certifications do you have? I mean he would have an up to date data source for it. Yeah, and my colleague said, "Oh no, we don't need to scrape scrape that. We can just enter it manually." But in the end, I mean, scraping the certifications was very trivial

[07:20] compared to the Trailhead profile. So I ended up doing that too. Okay. Then, like in six months, I, I kind of yeah, I built. I used my spare time to work on it, or when I wasn't on an assignment, and I changed to the Salesforce Lightning Design System, mostly because I wanted to learn and like per use case, I wanted to support both mobile and and like desktop, and and then also it makes everything look very Salesforcey, even though it's actually written in Python and running on Google App Engine. So there's zero Salesforce involved actually, except for the sign system.

[08:04] Then I actually went to. They had this program called Cloud Elite. Today I think they changed the name to Pre Sales Trailblazer. It's a Salesforce program for pre sales people. Okay. And I I met some people yeah actually some of your colleagues from Sweden Finland and also people from Denmark and all around Europe or no the Nordics and some of them also had they wanted to know okay how are our teams doing in regards of badges and and that so I I said that maybe I can try to make this so that people can sign up and like track their badges on the site and this was. Yeah, about two years ago. Okay. Then by December of 2017, I, I, I launched an embryo, and people could start registering. Um. Okay. For yeah, to create the profile, which then just used um. Built-in cron jobs from Google App Engine to scrape the Trailhead profiles, like every hour. I think it was hourly. Yeah. Okay. What's what's a site name? It's called Top Trailblazers. Top Trailblazers. Okay. Yeah. Okay. dot com, right? I will put it on our show notes just for people to check what the site is about, how it look like. Yeah.

[09:34] Cool. So it sounds like it all starts from an internal requirement from your company, right? Yeah. People just want to read those badges, those profile informations, and you start it from there. Exactly, and since I was pretty, I'm pretty confident in Python and App Engine, so it was just for me. It was the lowest effort of actually building and hosting something, because you don't just just add something on top when people have more requirement or you think you want to add something else, like you mentioned, learning the lightning design, lightning design system, right? The CSS part, yeah. So the the code base is pretty horrible still because I'm the only developer, so I don't. I mean, they're all. Did you already put it in GitHub? Is it open sourced? No, it's not. Okay, mostly because I would be kind of ashamed, but no, it's always fun to, yeah. Okay, yeah. It started from small, right? But now it grow and grow and grow, and now it even support the sign up system, so people could go there to sign up, and then this your website could start to scrape the their profiles. Yeah, required, and it kind of worked awesomely up until the eighteenth of October when Trailhead now made some changes to the profiles. So at the moment, it's kind of broken. Okay, that's that's what

[11:04] happens when you base stuff on screen scraping, and the the reason you are doing that because the Trailhead there's no API for people to pull the data out, right? Exactly, there are APIs, but only Salesforce people can use them internally. Okay. Okay. Yeah. Yeah. That's the typical situation. I know. Yeah. So I would really love that. But when that hasn't been around, it has worked quite well up until like yeah five days ago. It's fragile in terms of if the website changes the design, changes the the DOM element to some other structures, then the scraping would start failing, right? Yeah, and the the most recent changes they actually the the web page you get by scraping doesn't hold that much information, but they started doing like secondary callouts to get the actual data, and then they populate the page, so it's like a. Yeah, it's nicer in a way for them, I guess, but it makes it more. It's a challenge for me, but it's also fun to actually play with it. So, I think I have a solution for what they changed now. Hoping to be able to fix that, but it would be really nice if they just launched an API where I could use it instead. Yeah, that. Have you talked to with them, with Salesforce? I I have been contacted.

[12:35] Yeah, maybe they still don't want to open that up a couple of times. But it's in the roadmap to fix it. Okay. Okay. Yeah. Also, like last September, I we actually used the site for counting badges for Global Salesforce Saturday. Where we were like, I don't know, 25 communities around the world and like 150 users, and we are planning on doing this this year. So when they broke stuff this spring, people in that community actually contacted them. So then Trailhead got back to me and just yeah explaining why they changed some stuff and broke some stuff, and they also said that it's in the roadmap to to fix these things. But yeah, it's all about priorities. Hmm. So why do you do all this? Was it just because um you know you love to tweak around with things, or what's the purpose? I mean, initially it was because yeah I. I I usually work as an architect, and then you end up sitting sitting in meetings and drawing on whiteboards. So I don't really code like eight hours a day, but I love coding and solving problems and optimizing. So this gives me a chance to actually. Hands up to serve that need in my spare time, and as this thing has grown, it's been really good to me because

[14:05] I I've felt that I've actually given something back to the community, and I've made tons of friends like. Because I've been contacted by people all over the world, and then on these Salesforce events, I've met them and talked to them, which I wouldn't have if I wouldn't been doing this. So. I think this is, or that's really the best part to get connections through it, and then helping people solve problems. I remember there was a guy contacting me this spring who said that when he used the profile page on Top Trailblazer to show his manager about the architect pyramid, because that's another thing that was added. That basically. Since I know the certifications, I can fill out the architect pyramid for them, and then he could show his manager that, oh, this is the my career path from like admin up to CTA potentially, and he said that was really good because then he really understand or understood why. Taking certifications was like a good thing for him. I mean that that's worth a lot. Like that someone actually uses it and think it's good service. Yeah, indeed. Since you already have the data, right? You have the certificate. How many you have already passed? And then that is just add a visualization layer to have that ladder, this pyramid visualization. Right. Exactly. And and that

[15:35] was actually something I found out. There's a guy who works at Google called Adam. He has a yeah Adam to Adam to architect right. Yes. He used that visualization filling out which certifications he had taken. So then I thought this is cool. I think everybody wants that. So I basically took the original and then I I fill it out now based on the certifications. So everybody has their own like architect pyramid. So. So, so if I want to be part of that, if I want to show my profile, I need to register, right? I need to say, add my profile into your site, please. Exactly. Okay. At the moment, sign up is a bit broken, but I I get back to you as soon as it's working again. Yeah, it's fine. I have only fifty badges. I have three certificates, so I'm anyway at the bottom somewhere. So no, I don't. I don't know the average number of certifications actually, but I think it's it's interesting to see. Yeah, now we're kind of getting off the subject, but it's about the number of certifications because Salesforce has kind of taken this into a gamification level thing, which I think is it's got it's both good and bad. Like, it's bad if people just chase them because some people with two certifications are way better than people with twenty. So it doesn't really say anything unless you actually do them for the right reason.

[17:05] Yeah, indeed.

[17:13] Hey, thanks for listening to the show, Salesforce Way Podcast. It's all the time looking for both guests. And topics. If you have guest recommendation or any topics you'd like to listen to, don't hesitate to let me know. My Twitter, LinkedIn, and email information is at the end of the show notes of each episode. You can also find it on the SalesforceWay.com website. I really, really, really need help from you on this matter because only you, my lovely listeners, know what yourself want. So, please help me invite great guests to talk on great topics, so that we spread great knowledge. Now let's get back to the show.

[18:08] I just actually checked your website. I know who is ranking the first. It's Carl. Carl, I don't remember his last name, but he's the CTA. Yeah. Oh yeah. Even even in the Trailhead, he was one of the coaches in the boot camp. Yeah. Is it all? It's twenty twenty eight. Branded or something. Yeah. Yeah. Yeah, and the twenty seven and Daniel Peter, those those big names. You know, also it helps me sometimes if I want to get some other guests to the show, I can just scan your list. Oh, this guy's good. Let me contact them.

[18:49] Yeah. Yeah. So, what do you think for other Salesforce developers who are our listeners? Maybe. They don't have a active pet project like you are doing. Some of them maybe just have some GitHub repo, but they rarely update them. So, what's your kind of giveaway to them? I I think like everything is like if you want to have a project, I I don't really think you need to have like. Millions of users using it, but as long as you—I mean—is something that you find usable. Yeah, I mean that's a good enough like reason. Like, I have friends, for example, who he he built a service that like basically he can just check when he was standing in this hallway, he could ask like Siri or Alexa, like when's the next bus, and it will just like. Check the bus timetable. It's pretty useless service because you could do it. You do it on your phone, but still, I mean, to him, that was the purpose, and he learned how to like talk to the Amazon backends and everything. I mean, and some Node JS and like that's always a good start. It's I I recently listened to an audio book about, um, oh, what's their name? Skunkworks, the people at Lockheed Martin who built like the stealth fighter and the

[20:19] Blackbird, and there, Kelly Johnson who was like the original boss over there, he said that never build an airplane you don't believe in, and I kind of, I think pet projects should be like thought of as the same, like never build something you don't believe in. So. Don't build something because you think it's something someone else wants, but rather that you want to do it or try it or learn how to use it, because that's the only way you will actually take the time. Yeah, I understand. Yeah, I'm. I can really draw analogy here, like I'm doing this podcast because I love it, right? Not, of course. I mean, I'm sharing along the journey, but if I don't love it, I can't do it again and again. So. No, exactly. Then you would have good guests and bad guests and weird guests, but like as long as you love talking to people, I mean that's the core value here for you. Yeah, yeah, indeed. And actually, one of my colleagues. So our company is doing consulting business, and of course, it's Salesforce targeted. So most of the time, we don't have time to really touch the other technology stack. But this this colleague, he's really kind of stretching around to really convince our customers. Let me to try AWS. Let me try

[21:50] Lambda. You know, yeah, those those kind of cool stuff and automation, those stuff. So, so you know, he learned a lot. I think he has a wide. Range of technology information and the skills. You know, he he know how to write TypeScript. He know how to configure the AWS. So a lot of skill set under his belt. Yeah, and I think that's really important. As I mean. Unless you your goal is to only work as an admin and never leave like the ecosystem, because when you end up at a company, especially larger ones, they probably have existing infrastructure that's non Salesforce, and even if they do Heroku, I mean Heroku is just a layer on top of AWS, and like where I'm at now, they they do mostly Microsoft and some Google, but they don't do AWS. And then, if you have some of these tools like lambdas, for example, are really cool. Like we used them a couple of years back to do bulk data loads, where we didn't want to have a server. We just let them upload a file into S3, and then you just had a trigger who took the file, ran it through a lambda who would just use the bulk data load service. And I mean, basically, you have infrastructure, but you, I mean, it's serverless and it worked really well. Okay, that's cool. You almost did the exact the same thing as my colleague did. Yeah, that's

[23:20] that's really cool. Yeah, has the same problems. Yeah. Hmm. It. I mean, how about the programming language point of view from that? Because you have done so many different programming languages, right? You have all these experiences, and Apex definitely is not a. Let's see that elegant language. It's still coming back from the old Java, right? It's still tight. So, but yeah, it's it's like the first guy I worked with. With Salesforce, he said that Apex was Salesforce or Apex was Java's lazy cousin from the country. It's like it's like a lesser version of Java. But and and I think it it it's worse if you come in from like other languages and then end up in Apex because. The first thing that you really that really annoys you is the the thing that it's not case sensitive. Which, if you come from the Java side, you just write basically Java code and it's fine. But if someone else who actually takes advantage of the non case sensitive parts, the code can get really hard to read. Yeah. So it's, but but in the end, it's all about like. Just to try to stick to some kind of syntax, regardless of the language, like because

[24:50] any language can be written, so it's unreadable. Yeah, like indeed. But whenever I touch some other languages, like even JavaScript or like your favorite Python, most of the time you can see those languages are more concise. You can use like three lines to do a lot of lot of things that in Apex you may need thirty lines. Yeah, right. You always need to use the loop to go through the items. And in Salesforce, it's it's quite often. Yeah, it is. But but then, like I've been interviewing a couple of times for for Amazon, and. I remember the last time when, yeah, was this like where you have four one-hour interviews in a row and your brain is kind of melting. But one of the guys who interviewed me said that, like, basically, if we can write something in one line of Java code or three lines, we would probably go for three lines because. We never want to risk someone not being able to grasp what's happening. So rather be because in the end the compiler probably takes care of that, the extra space. So. I I do like Python when you can do like the the anonymous functions and everything, but also when I started doing Python, sometimes it was like. What the heck is happening here? Yeah, like yeah, yeah. Like for example, when you have a, you can do an else case on

[26:20] a for loop, right? In Python, which is like that's weird. You you end up in that place if you run a for loop and you don't break. Then it's like so you exhaust the list and then you can do an else thing. Which the first time I saw it, I thought, okay, someone has indented incorrectly here because this can't work. It's very elegant, but it's like okay, yeah. Yeah, because sometimes I'm I'm practicing a bit of coding in the code wars. Have you used that? Right in there. I mean, for the listeners, it's CodeWars.com. We will also put in the show notes. You can practice a lot of languages, and people give their best answers there. So you can pick what's what's the smart people's good answers. And there, there are like two flags for the answers. One is best practice. One is like smart. Right. Yeah. If you go too smart, you use one line, but it's not best practices. So there are like two factors you have to always think about. Yeah. So I think it's aligned with what you just mentioned. Yeah. I think that that's really. Important, especially when you write code for like a customer or something important. That it might make sense, maybe not doing two million comments. At least spell it out, like use proper like variable names and everything. Because in the end, it doesn't

[27:50] really matter how how your code executes. Rather than when they get a bug, like five years later, it's probably good that if that developer just understands what what's happening here. Rather than doing like sometimes you can see people who come from like the C parts of things where they use like a lot of integers as return values, which is like yeah that's awesome and everything, but you don't have to do that in Java. You can actually return an object, and it just makes it yeah unreadable and will yeah horrible to debug. Yeah, and also actually, just one more thing pop up in my head about having a pet project, is that it can really open the doors to different new things you have never thought or never touched before. Like my pet project currently is this podcast and a website that hosting this podcast, and I start to realize how important the SEO is. Like the ranking in the Google, and then I start wondering, okay, what do I do with SEO? Then you start to you know wander around and see, okay, what's the materials to learn SEO? Then you realize that's a totally different world. Yeah, yeah, it's like also a lot of things you need to learn if you really want to to go on that route. Yeah, exactly that. And

[29:20] also, when you do a pet project, you kind of have time for those like excursions. Like to me, I I've been using the Google Page Optimizer. I think it's called a lot to like make sure that the loading time for the page is like really fast. Because like if you look at just the badge icons when you get them from Trailhead, they are like 400 by 400 pixels. And then when you show them on like a mobile browser, I mean they're pretty pretty heavy to download. So yeah, I I actually download a copy of it and cache it, and then I present. A smaller version that's like optimized for the screen layout, so I kind of make sure that the page loads instantly. But that's also a rabbit hole that never ends. Like you can go into like so deep technical levels on on like how to optimize page speeds and like loading CSS upfront to make sure that the page just snaps in the the browser without actually rearranging. And and you might not use that at work, but at least you you get like a notion for it. And if someone talks about it, you will seem like a proper expert because you kind of touched it. Yep, indeed, and you are talking about your personal website, right? I know you have your blog. Oh, yeah, website. It's. Yeah, that's also a thing that I've

[30:50] optimized over the years. Okay, I started using WordPress because who doesn't, who who didn't use WordPress at least? Then a year ago, a friend of mine told me like, oh, you can't use WordPress because yeah, that's just old. So he talked about this. It's a static page generator called Hugo. That's a Python based, right? Is it Python or Go? It might be Go, but yeah. Okay. So you kind of write your blog post in Markdown, which is yeah, yeah. It's the same used at GitHub. Yeah. And then you generate the whole page with links and everything. It's just static HTML. Yeah. And now I actually I moved away from using a server in. I started out in in Amazon EC2 because I used Amazon since like 2009, and then I moved to Google because I wanted to learn that thing. So it it ran in Google Compute Engine for a while, but now it's hosted in in Amazon S3 in a bucket, and then you can actually put like you can serve web pages from a bucket. That's handled by Amazon. Then you use CloudFront, which is their content distribution network, to geographically cache it at edge locations.

[32:20] Okay. Do you need to pay anything for hosting your webs? Ah, you pay for yeah, you you pay for storage, which is like ten cents per gigabyte, and also for traffic, which is probably ten cents per gigabyte. So. Storage? What do you mean storage? You mean database storage or no? A file storage in S three. Ah, okay. But to me, I think I pay Amazon about three dollars a month, and the the the biggest cost is actually hosting the DNS records because that's like fifty cents per sone per month, and I have a I have a bunch of websites. Okay. So traffic is like negligible. It's yeah, it's super cheap, and and also there's no infrastructure for anyone to hack because WordPress. You need to make sure you upgrade WordPress. You need to fix the templates. You need to. There, there's an underlying PC that needs to get upgraded and restarted. So it's just less headache and it works really well. And also Amazon makes sure you have HTTPS certificates as well. That's so it's yeah. Now we diverge from the from the subject, but it's it's fine. I mean, we're just talking about some pet project. It can be anything, right? Actually, I'm taking exactly the opposite direction. I started everything from static websites. I used

[33:51] the jQuery, which was the Ruby-based. Yeah, in the past, it was very famous, and then I switched to a JavaScript-based. It's called Harp or something. Yeah, Harp. JS. So and the benefit for me, I think you definitely know, is that you can put it on GitHub, and use the GitHub page to host it. If you don't have a huge traffic, it's it's free. Basically, everything is free. Yeah, yeah. You can if you would get a lot of traffic, you could probably move it to to Amazon S three because it probably works the same. And then you would have to pay for outbound traffic, but that's like, yeah, it's not much. It's definitely very cheap. Yeah. And I think that's that's probably where we're going to end up in the end with servers everywhere, but everybody is running serverless. So you don't really care who's who's running your infrastructure. It's like you just upload configuration, basically. Someone else runs it. So I I had a lot of my site. Even this podcast in the past, it was in static site, and I switched to WordPress. Do you know the reason? Could you guess out the reason? Um, I don't know actually. It's really for the SEO. Okay, okay, yeah. So because when we talk about the SEO, it's not just. Like

[35:22] the text, so you have to really follow the Google search engine, like the the metadata in the head. Those things you really need to fine tune, and and just WordPress has so many good plugins to support that. Okay, yeah, it makes sense. Like. I don't really, I I don't really try to stay on top of the yeah I know at least not for the blog, but I I did actually pay for this Alexa ranking for a while for top trailblazers, and I think for a while I was at like.

[36:02] Numbers seven hundred thousand globally, with it, which was kind of cool because I've never like it's large traffic really coming to the site. Yeah, exactly, and you can really see the spikes every Saturday. That's like where most people use it because they. They do badges on on Saturdays. It's really it's the same pattern like every week, and I can see that in the billing as well because it Google has pretty good quotas for for running it for free, but still I I get to pay it it's probably three dollars a month here too, which is like nothing, but still you can see that it costs more on Saturdays like always, which is cool. Cool, cool Johan. We talked a lot about our topic. We shared our experience. So, to me, as a summary to our listeners, is that just think about what you want to do, and then just start from small, right? And then grow a little bit and see. And you can always tear down. You can always shut it down and start a new one if you don't really enjoy that. Yeah, and you really learn a lot of stuff because that's something you you are interested in. Then you definitely will learn faster than somebody else who are not interested, but on the same road. Yeah, exactly. Like, and and I think that's the core here. That. Of course,

[37:32] you need to do something that you like, and some people do that for a living, like me, for example. I love what I do, so for me, I don't really have a clear distinction between work and hobby, which is sad in a sense. Like it's pretty hard to turn off, but in the end, it's I feel. I I feel feel very lucky because then I get to I mean cool stuff I learn by building like this pet project I can use them at work like yeah so it it benefits me both ways yeah good all right so Johan thank you this is a good moment for us to close the session I'd say goodbye and then enjoy your evening yeah you too all right bye yeah see you next time.

Leave a Reply