 Well, it's that time of the week again, it's time for Chit Chat Across the Pond. This is episode number 785 for February 3rd, 2024, and I'm your host, Allison Sheridan. This week I'm talking to Helma Van Der Linden, whom many of you have probably heard from before. She's the mastermind behind turning the Taming the Terminal series into a bona fide book. She's also become a good friend and even came to visit Stephen Meade in California recently. Welcome to the show, Helma. Okay, hi. I'm glad to be here. Well, the story with Helma is going to be great fun, but it won't make a darn bit of sense unless I give you some background. This episode was almost a programming by Stealth tidbit episode, so it's not really very light, but we're going to try to make this interesting to a more generalized audience and you can tell us whether we succeed. My plan is to keep it at high level and not to dig too deep into the geeky programming stuff. But let me give you some background here. In the programming by Stealth podcast, just like it says on the tin, Bart Buschatz has been teaching us how to program, because he spends so much time creating his tutorial show notes for the podcast, he's let one of his own programming projects languish. The project is his fabulous, complex, but memorable password generator, xkpasswd.net. I've tried finding how far back we originally talked about his tool on the podcast. I know we talked about version 2 in 2012, but I wasn't able to find the original first time we talked about it. I put a link in the show notes to a 2020 article where I put together a little how-to tutorial about how to use it to get passwords you can remember and type, but are high on the uncrackable scale. While xkpasswd does everything it needs to do, it was written in the plural language. It depends a lot on libraries that are no longer kept up to date. Bart's been very worried over the last few years that xkpasswd would fall over in a heap if he didn't port it to modern libraries with the JavaScript programming language. He knew he'd have to learn a lot to port his code, so he decided to use his learning process to teach the programming by stealth students along the way. We'd already learned a lot of nifty skills that would come in handy, but he taught us a lot more that he needed for xkpasswd.net. For example, we learned JSDoc to auto-create documentation of our code. We learned Jest, which would allow us to do test-driven development. We learned Webpack, which would allow us to bundle all of the code into one glop that could then live on a website without all of these ancillary files. Makes it a little more portable. We learned how to make diagrams with Mermaid so we could document the various classes we'd need in the code. Since this was going to be a collaborative project with the programming by stealth students helping to write the code, Helma co-hosted an episode of Programming by Stealth with me to teach us how to use linters. Linters are little programs that make sure everyone is writing code according to the same style guide. Things like the proverbial spaces versus tabs argument. It just decides for you and you have to obey it. Finally, in December of 2022, we had a kickoff episode of Programming by Stealth for the new JavaScript version of xkpasswd. At this point, the only thing keeping us from moving forward was that Bart wanted to create the diagrams himself for the port from Perl to JavaScript for these class things. But Bart couldn't find the time to actually create the diagrams. So remember, this was December of 2022. We were ready to go and we had to wait for this one piece of it. And this is where we finally pick up the story with Helma, right? So you were patiently waiting for these diagrams for Bart. And then, so what happened? Well, I must confess, I can't remember when it was. But finally, I got impatient and we had a playdate and I decided, yes. Behind Bart's back. Yes, behind Bart's back. And then I decided, why don't I just start with these diagrams? And then I looked at the code. I don't know anything about Perl other than doing a search and replace. And then I looked at the code, but it was so fabulously documented. I didn't need to read the Perl code. I could just look at the document and and and and see which functions there were, what the arguments were, what the return values were. So it made it easy to just build the the diagrams from there. And then I showed them to you and you were very excited. And then I got some courage and I showed them to Bart. And Bart was very excited. So that was that was good. And then I thought, OK, so here are your diagrams. When are we going to make the next step? And that took for ages. And I didn't want to push him. But I was too impatient. So I'm impatient along the way. That's why one thing people may not know about Bart is the reason he is sane and so good at what he does is he's very good at compartmentalizing things. I am all over the map. I'm writing a blog post. I'm checking email. I'm watching TV. I'm talking to Steve. I'm, you know, jumping in and out of walking the dog and things. I just jump around all the time. And so I do kind of a mediocre job of a lot of things. But Bart sets a focus. He is right now from here to here and it can be days. It could be weeks. It can be months long blocks where this is all he's going to do. But, you know, these two weeks, I'm going to do my finances for my taxes. And he doesn't do anything else. And so when he's in one of those modes, there's no breaking in to go, hey, let's program right now. You know, I'll drop what I'm doing at the drop of a hat of Helma says, let's have a play date. Let's go play code. Is it OK? Let's go do that. So yeah, the problem was that this this block of time was getting longer and longer. And you are the only one writing to me going, hey, can we start yet? Can we go, huh, huh, huh? Ed Tobias has been all over me for us to try and get started and do something. So you're you're waiting patiently. Oh, I remember I contacted Bart and said, hey, Bart, we need to get together. You, me and Helma, we need to talk about about what's going to happen here. And Helma's was really ready to go to start actually doing the code. And he said, I can't think about it until X date. And on X date, I can think about it, but I can't do anything. But I'm allowed to think about it. And I forget what the date was. It was in the middle of December. And he said, yeah, that was, yeah, that was around the 15th of December. Yeah. So he said, I will have the brain bandwidth to have a conversation with Helma about it. And I think you two talk together without me, I think, because I didn't. Yes, true. We we set up a date. And then while he was cooking dinner, we had a discussion about whether I would work on his code. And I was very cautious because it's his project. And I didn't want to step on his toes or anything to do with like pushing him in in a direction that he didn't want to go with this with this project. But then he said, if you want to start, I don't want to hold you back. And that was that was for me. That was the go sign. So chopping up the bit doesn't he begin to describe it, right? Yeah. And because of that, yeah, and because it was already Christmas was approaching and I had two weeks off from Christmas until the week after New Year. And I thought, oh, my God, in these two weeks, I can do a lot. And I decided, no, because, you know, how it is, this is the new shiny. So I want to jump in and I'm also all over the place. And I thought, well, I planted some other projects to work on. So let me just take one week for this project and then go back and do the projects I planned. So you ate your dessert first. Yes, that was the new shiny. So I really went into a sort of coding frenzy. I just got up very early. I sat on my computer and I just programmed until it was time to go to bed. And luckily, my husband makes dinner, so I just go over there, have my dinner and the other breakfast and lunch and whatever. And then I would come back. And so that's that's yeah. And this time, rather than just jumping in and see where I would end up, I decided, let me do sort of, you know, like the agile working way of things. I wrote little user stories, which means that as a user, I can generate a password. And as a user, I can generate a number of passwords and the number I can decide myself, something like that. So I was building it up, making the code more and more complex. And which would also mean that whenever time was running out, I would at least have something. And whether somebody else or I would jump in later on, you could see from the the things that were done and the things that were on the list to be done. You could figure out what next what's next to do, because I know myself if I would jump in in three or four months, I have no clue where I left off. So if you did it in a linear fashion, it wouldn't work. So you did big, big picture and then narrowing it down to these these user story pieces. Yeah, I I yes, I because I had all kinds of ideas. And then I thought, well, let me do the basics. So the basics is I can press a button and there will be a password generated. OK. To get to that point, I already had I had to do the user interface. I had to do some of the the actual library. I had to do the code that makes the the UI go with the library. So the code that you press a button, what actually causes the password to come out? Yeah. So, yeah. So so it's the user interface to how it looks. It's the button that you have to press. So there is some JavaScript that can react on the button and that can display the password. And whether the first version was I could just put in a random string of text and then the next one was I can generate a password that complies to one of the presets that part is defined. So then I let me let me pause this for there for a second because I realized if people haven't seen XK Pesta BD net, the the original version allows you to take one of these we'll call them like recipes configurations that you can say, OK, I need something that's going to be a terrible password an eight character password or I need one that will work well on an iPhone that's easier to type. There's all these different configurations you can choose from their recipes, if you will. So and then once you choose one of those, then you press the generate passwords and some spit out and you have a little toggle that says, how many passwords do I want to have spit out? Yes. Yeah. So that's that's basic. That's the basic functionality of of the website. But you already have you have the the code in Pearl still that's generating the password, don't you? Or is that not so? Did you have to rewrite that piece of it? The the math and all that to generate? Yeah, I I did everything again, because Bart actually has two projects. One is the the library in Pearl that you can call from the command line. And a version that he used in his website. And and the website, of course, has has more code to make the library go and present everything on screen. So what I did is I took the second project, so the website project. And we built that one. And so actually, if he wants a separate library. Like the original X, whatever. Oh, it's awful to say. H S X, WD dot net. Yeah, that one. Yeah. So the hastax, I think. Yes, it is. So so the dot net part is actually the the website project. OK, but he has also the library. OK, but the library is and for people who don't know, the library is like a function you can just pick up and shove into something else. It's a good way. Yeah, a little bit, a little black box. Yeah, but that was written in Pearl. So you had to rewrite that before you could do any of this fancy gooey web interface, right? Well, I worked side by side. So the easiest thing for me was to build something that represented the website. And if you would press the button, I would just spit out a string. OK, so I knew that the string would be on the right side and the code was there, that pressing the button would lead to a string. Right. And then I improved the code by building the part that generated the random string based on one of the random generators that Bart has in his Pearl code. Oh, so you wrote that from scratch? Yes. Oh, OK. Because, A, I couldn't understand what he was actually doing with his random generators. OK. He has multiple and I still don't know why. So that may be a topic for discussion with Bart sometimes. And I thought, well, I mean, the whole world uses a random some random function. There must be something there. I'm not going to reinvent the wheel. Sure. So it took me, I think, half a day to figure out what would be a truly randomness function. Well, don't they say there's no such thing? That's like the Holy Grail. There isn't really a random. True, but approximation as you can get. Yes. Yeah. And so there is one in all kinds of cryptographic functions of libraries, which is probably of a better quality of randomness than the ordinary random function in JavaScript. So I used the cryptographic one. Oh, OK. And then from then on, I built the code so that when I press the button, I would get a random password. So when I clicked very often to figure out if it works. And by that time, I thought, well, now we need automated tests. I'm not going to press this button 10 times every time. When that was a big part of what Bart was teaching us for this was to have tests and to speaking again to the generic audience or the general audience that may not be taken the class is that if you set up a test and what you're supposed to do is set up a test. And since you haven't written the code yet, it should fail. Now you write the code, you run the test and it succeeds. Now you go make a bunch of changes to something else. You don't want to have to go back and test by hand. The thing you test you knew was working before, but you do have to make sure that you didn't break the thing that was working before. So you build up these tests so that each each time you change something, you run the test and you go, OK, nothing old broke. The new thing is still broken. Let me work on it until it does work. Keep running the test, but make sure those those tests pass. And that was actually part of the fun. I'm going to tell a little story about the homeless visit. She comes out here for a conference and an origami conference. And I was worried about what to do with her here. I said, you know, we could hike to the Hollywood sign. We could go to the beach. We could, you know, go to Palm Springs, all the different kinds of things that are around here, a lot of fun to do. And she said, can we just sit in the kitchen and program? Why? Yes, yes, we can, Elma. And we had the best time, just two little nerds, happy as anything, sitting in the kitchen. And what she was really pushed me to do was really learn to do test driven development, to run these tests and why they're important and how to invoke them. And that was a great learning experience. And I don't think you could have found two happier people that day than us. Yeah, that was that was such a great fun. And when you showed me the Christmas card on your on your kitchen table, it took me right back to that that week where when we were just sitting there talking and discussing and and programming. And yeah, it was it was. I almost sent me a beautiful Christmas card with some origami on it. And I put it in my kitchen and took a picture of it and said, it's just like you're there. Yeah. Yeah. And it I immediately felt back there, beautiful weather, happily sitting there programming. We did go for a walk on the beach. Yes, we did. I did make you go for a walk. And then we went back and coated for the rest of the day. Yeah, I had to get my steps in. Right. Right. OK, so so you start writing tests so that you're sure you're not having to just press the button to make sure you're still getting the random randomly generated code, right? Yeah, yeah, true. Yeah. And by that time, to actually see what's happening, you have to run Webpack to get from the code to a functioning website. So Webpack is what I mentioned earlier, how Bart taught us how to bundle our code into a blob that can run on its own. So you don't have all these separate files that you have to deal with. And so we have a little web server running and it's running that bundled code. And Webpack is what creates that. But I find it really tedious because every time I make a change, I have to go over to the terminal and I have to write, you know, run, build, whatever and write having to tell it to build every time is really annoying. Yeah, that that gets all very quickly. So I went in and I figured out there is actually some script that you can run which makes Webpack watch the changes in your code and do the build automatically. Yeah, you got to teach me how to do that with my code, because I have tested what I've worked on the code that that Helma created. And it was just such a joy to hit Command S in Visual Studio Code. And I would see my terminal go, yep, just built it again for you. That was so nice. Yeah, yeah. So the next thing you had to do is once the build is done again, you have to reload your server, which is also very tedious. So I found another script that just automatically runs as a little server and that reloads once it picks up a new build. So then automatically you would see your your browser window change because you just fixed the bug or added something. And and if you did it wrong or you you saved halfway a sentence or a statement or whatever, then your browser would tell you that because it fell over in a heap. So what you're learning right now listening to Helma is that the best programmers are the lazy ones, the ones who don't want to do extra work. So they program out, they automate the things they don't want to do. And Helma didn't like having to rebuild with Webpack and then reload the website. And so the laziness one, right? Yeah, yeah. I mean, they say that about programmers and they say that about sys admins. Good sys admins also automate away their work. So that's yeah, it reduces errors, too, which is a nice thing. True, true. And what I like about what Helma did in her code, too, and I'm skipping ahead to where I get to jump in of what I got to do. But she documented this. So there's just this little tiny readme file and it says, OK, do this, do this, do this, do this, now you're ready to go. It's got like three or four commands that you run and then you've got this automated thing running and I didn't have to know how any of it worked. But I was able to get in and start playing with the code with with those quick, easy instructions. So that was that was delightful having that documented. Was that also for future you? That was also for future me. And because we already discussed. That you wanted to participate. And I thought, oh, and and of course, I wanted to show it to Bart. And I had to put at least some lines of explanation in to to make sure that he would, you know, start the project and actually see what happened and have an opinion on it. Rather than being frustrated that I created something and he didn't know how to make it go. Right. Right. I can't tell you how many GitHub projects I go to where somebody points me to something. And I just said they're looking at it going, how do I make it go? I was just working on one with Ed Tobias the other day. We were looking at this thing. There were no instructions. There was a readme, but it didn't really tell you. OK, go. Where's the go part? How do I make it go? I can download this thing, but I don't know how to make it go. There was nothing to tell you that. And it was really obscure of what you had to do. We did figure it out mostly, but that's really handy. You mentioned letting me participate. But this is what one of Bart's basic tenants of everything that he does is open source. So the fact that you were able to go in and edit his code is because he wants us to be open source, but you're actually a member of the project team. So the two of you are members of the project team. You're a very trusted person in this. And even though Bart trusts me and the way open source code works, you can always the way stuff works if you use this get thing that we've been talking about, which is a version control system that lets you dial back. If I go in and I break something, Helma can undo it. She can literally just go back to a previous what's called a commit and say, OK, undo what else. And did she she's a fool and she did that all wrong and she could just back it out or she could back out pieces that were silly and keep the pieces that were good. But what we're doing and I and I'm liking it this way is I am not a member of the project team. I am Joe Blow, Sally, Sally programmer out here. I'm just nobody who just said, hey, I have an idea of how to make this code better. Let me request to change the code. And that's that's a real different experience for me to get to do that. I've heard of doing that, but I haven't gotten to actually do it before. Yeah. So. I feel flattered being one of the program team members. You should. You should. He did let me in. No, I know he would if I asked, but Bart and I do a lot of collaborative stuff. Actually, all of the show notes that you see for programming by stealth, we do that all in get. And I am an equal member with Bart. Bart writes the original. And then I do proofreading. I may add a few things. There's components I always add to the show notes like where the recording is and things. And that makes it easy for both of us to do the work together. And that's gotten me used to doing get, even though that's not a programming version thing with get, but get can be anything. Anything you're writing or creating can be can be done. Yeah. Yeah. And I mean, it's also a great way for collaboration. Yeah, I mean, it's not just a sort of backup of all the versions you created. It's also collaboration. And the nice thing about get is that two people at opposite end of the world can work together. They can each work on the same copy of code or in this case, the show notes of the of the PBS. And then they can upload or push the information to get. And then you get to see each other's work. Yeah. But I sent a screenshot of the program and bestel show notes where Helma was fixing something in the way some scripts she's written for us work. Bart was writing next week show notes and I was editing this week show notes. And you can see in this little tree that there's me and there's Helma and there's Bart and we're all weaving in and out. And we never stepped on each other. Yeah. Yeah. That's the great thing of get. Yeah. And it's not like if you're familiar with Google Docs where you can both be typing at the same time like I can see Helma's code be or what Helma's typing real time while I'm typing in there. It's not like that. You you download a copy and then you push it back up after you change it. And if there are conflicts like let's say I changed the spelling of one of Bart's words were let's say he wrote color with a you and I change it and he wants it back. He can undo that one change or he can write over it or there'd be a version conflict. And then you got to you got to duke it out about that one thing that you change that was that you stepped on each other. But most of the time, you know, I'm working over on this chapter. He's on that chapter or he's in this paragraph. I'm in that paragraph. And you're working on the underlying code. There's no stepping. No. And the get is. Created by Linus Torvald, the creator of Linux. He knows what he's doing. And there is, I think, multiple thousands of people working on the Git kernel on the Linux kernel together. So if Git works for that, then we can all work like that. Right. Right. So part of the point of this, the reason we're talking about this part is this project is open. And if you're not a member, esteemed member like Bart and Helma, what you do is you you do what's called forking the code. And that's basically you're taking a copy of the code. So when I write on when I write on my computer on those on that code and then I push it back up to GitHub, I'm not pushing it back up to the real repository, I'm pushing it back to repository in my own get account, my GitHub account. And then what I can do is I can do what's called a pull request where I'm requesting Helma and Bart or Bart to pull my code into theirs and then they they can look at it and they can see what changes I've made, run tests, do whatever they want to do with it and then they can decide what to choose, what they're going to accept and what not to accept. So that's a way for people to collaborate where maybe I'm not a great programmer and I do a bunch of stuff wrong. They don't have to accept those changes. True. And that and actually I'm working like this way in in my day job. And I learned there how to pull down somebody's pull request integrated into my copy, check if it works. And if it works, I can accept the pull request and push everything up to the original repository. OK, so yeah, I haven't actually had anybody contribute to my code. So I don't know how to do that part. Maybe I should have you fix something in one of my little projects. And that way I could learn how to accept a pull request. I feel a play date coming up. How about I love our little play dates, whether we're in the same room or across the world. Elma's in the Netherlands, though, by the way. So I don't know if I'd mention that. So getting back to XKPASSWD-JS is the new name, right? Which is a little easier to say. What else do we need to know about the things that you did in there? Where did we leave off in our in our bullet point outline there? How about what's what it give people idea? What's the state of the project right now? What does it look like? What is what's done? OK, at first, when when you and Bart talked about this new version of XKPASSWD, he explained, he said some rules. I want a well written code. I want documentation. I want tests and I want a web back script that builds everything. So that was basically one of the first things I did to get every all those pieces up and running. And then, of course, add some more scripts because I'm lazy. And what I also did is I put up in GitHub issues all these user stories that I talked about. So basically you can you can check the user stories to see which one I did and which one are still to be done. But basically what it does now is it takes Bart's default preset, so the default configuration of how the password should look like. And you can generate up to 10 passwords at the same time with the press of a button. Based on I think I actually forgot something. But basically based on the list of English words, the English dictionary that he put in. And I think somewhere along the line I took out three quarters of the list to make it just go faster. There is a space smaller. You made it less entropy. Yes, I did, but it's just I think I commented out something or I put in some all the words are there. But just most of them are commented out or something like that. So that's one of the tasks you could do. Go in and get out my little marker so that you will get the entire list of words again. I did that when my browser began to consume more than get two gigabytes of RAM. And everything became slow. And I thought that that was the the the issue. But once I restarted the browser, everything was fine again. And so that's. But I forgot to take it out finally. So OK. What needs to be done to make it match the functionality of the current website is you need to be able to select from various presets. You need to be able to fully reconfigure all the bits and pieces that you can change for those these passwords. Oh, yeah, let me explain that. So what you can do in Bart's original is you can say, I want I want three words and I want what's between the words to be asterisks and I want one number at each end. And I want padding of two pound symbols on one end and two exclamation points on the other end. And then every password that's generated will have that format. And so he's got these not not only the presets, you can then just change these little pieces. You can keep changing it like if you find it really hard to get to the pipe command or you run into a lot of websites that don't like the pipe, I shouldn't have said command key. If you just find it hard to get to that key or you find a lot of websites don't accept the pipe, then maybe you want to change it to a more quote unquote normal special character. And so you can change all of those. So yeah, those OK, so those need to be done. Yeah, and Bart had the option for various languages. Dijkstra is in various languages and I just stuck to the English one first. So extra languages need to be added as well. Oh, there's a name for the localization. Localize. No. Yeah, well, localization is when you have the website be in German, Spanish or whatever. This is just the dictionary of words. OK, I'm going to squint and still call that a little bit of localization. OK, OK. Maybe not full. You know, we should probably put these in as issues in get so people can see where to where to get started. Yeah, yeah. So there are already some issues in there. And I'll check later on if if the dictionaries and the the pre well, the presets are there and the full configuration is there as well. And I already added some ideas of mine. One is that you can have this prefix this your own configuration stored on your machine so that when you go back to this website that it will automatically load your preferred preset. Right. Did you did you add that one as an issue? I have it as an issue. Yeah. OK. That's a good one. You know what I did to get around that problem on the the still still standing not yet fallen over in a heap version. Yeah, I just wrote a text expand or snippet for it. So there he taught us how to build the little I don't know if it's Jason, what is it? Now that I think about it. Yeah, it's Jason. OK. I already I already built the Jason object. It's it's the same because that's what he requested. So the Jason object that you would export the current website has an import and export. So you can export your pre your configuration and you can re import it. So you don't need to expand there, but you can import and export, but you have to remember. And I made it sure that if you export it from the current website and you would import it, the feature is not there yet. But if you if it is, you should be able to import the Jason and have the website be configured with that same configuration. OK, OK, that's cool. So import and export is also something that needs to be done. And and I. I used bootstrap for the for the markup. For the audience, that's that's the look and feel of the thing, like the the the way the buttons are presented, the the spacing between blocks of of the of the the code or of the display of information. Yeah. Yeah. So if you go in and watch and read the documentation on the bootstrap website, you will often see a little code block with an example. And in that code block in the upper right hand corner is a little copy button. OK, so I decided I also want a copy button. So the copy button is there, including the tooltip, but it doesn't function yet. So the copy button for for the passwords. But that would copy all of the passwords. Well, that's that's what I was what I want to do is if you don't select anything in that text area and you press the copy button, it will copy all the passwords. But if you select something, whether it's a one character or an entire password or one and a half passwords and you would press the copy button, you would only get the selected text. OK. Yeah, I guess that's. That's marginally useful. I mean, most people know that if you got to select the text, if you hit Command C, if they were separate little objects on screen, here we're having a play date redesigning this right now. But if they were separate little objects, you just hit the copy button and not have to select it. But the way they are, they're just kind of in a text area. But that might be a future idea that would be kind of cool. Yeah. So I put in the button and I put in the tooltip. But I didn't put in any functionality yet. OK, OK. I'm afraid if we go much further, we're going to start keep redesigning. And we should probably do that more in play date form. Yeah, that's true. True. Yeah. So one of the things that Bart loves about this is that he didn't have to do any work at all. I mean, he did six months worth of training of us with, you know, teaching us JS doc and web pack for bundling. And you taught us linters. And, you know, all those things went together to build the audience's ability to help write this. So we really, I wanted to do this conversation with you because I think we should kick it off. I think people should start contributing. Yes, that should be the door should be open to allow them to know that they can contribute because we had naturally we've been doing all this often secret until it's got to, you know, it's got to a point where it's it's it's a functioning project. Yes, yes, it is. And actually, maybe it's a good idea if you explain how you took the code and fixed the bug that you found. OK, cool. That's of course my favorite part of the story is my four lines that I wrote. One of the greatest things about Helma is that well, let me describe what happened. So I looked at the at the website that it creates and I told it to generate the three passwords. And the third password didn't fit only the first two fit. So it was like two and a half that you could see. And the little window had that the little tick marks down in the corner that you could drag it down to make it show you the whole thing. But if you started adding more and more passwords, you basically had to scroll up and down in this cramped little box. And I said, I told Helma that I thought this was a bug that really should be sized appropriately for the number of passwords. And I created a GitHub. You can create an issue to the project. And she wrote back to me and she said, that's cool. Fix it. Well, more politely, I think you said, would you like to try to fix it? And I got the I got that back from Helma while I was at CES and, you know, we weren't even sleeping much less getting time to do any code or anything like that. So I told her I would start working on it when I got back and I procrastinated for a little bit. But then because we had been at CES and we have all these great videos creating content for the show, I now have a bunch of time where normally I would have to be writing for the show. I have these blocks of time I could dedicate to doing some coding. So I took a look at it. And my favorite part of it was that I for the life of me could not figure out how all these files were structured. One of the things that happens with with bundling like this is you create a folder that has a directory that has a bunch of code in it. But then another set that looks very similar gets auto generated. And I couldn't figure out which one I was supposed to be editing was I supposed to be doing the one in source or there was another folder and they but they were indexed on HTML files all over the place and trying to figure out which one. And so I thought, OK, I'm going to create a mermaid diagram to show Helma where I'm confused. So I brought up this started creating the mermaid diagram of all the different folders and what was in all the different folders. And I mentioned something about how I was looking at it. And she said, well, you know, there are some my class diagrams are in there. And I was like, yeah, but it's not about the classes. It's the structure of the folders I'm looking for. The funniest part, I go back to the to the GitHub project and there not only is there already at the main level, at the top level, not only is there a mermaid mermaid diagram showing the structure. I'm the one who created it. So I thought it was so funny. I pre-documented it in a way. I mean, I put in lots of little symbols like the ones you're never allowed to touch. They're in red and they have big flame things on them. Don't touch these folders. Here's the ones you're supposed to edit. I mean, I created this. But to my to my defense, it was a long time ago that I created those. And I forgot that I did it. But I looked at my diagram and I went, oh, there's the ones I'm supposed to change. So once I know what files to work on. So there's an index.html file, which is what builds the website itself. And then there's this CSS file that has to do with the look and feel. And then there's main.js, which is where the JavaScript code is. And I looked through her code and I found that she had a variable called num, which was the number of lines in that field. And I just wrote a simple little function that said, when somebody presses the button to generate passwords, find out how many passwords they asked for, which is which was another variable I had access to, find out what it is and change num to that. And so now when you press the button, it runs, it's already running all this complex code to go through random generation of words and it's building all kinds of, you know, entropy and doing all this math and everything at the same time. It goes, oh, yeah, and count the number of lines, you know, and throw that in there while you're at it. And now it goes, boom, and it comes up. And then the other thing I did was I figured out how to, I think I figured out how to get rid of the little. A resize. Yeah, the resize thing at the bottom of the field. So I was, I felt like I'd made fire, Helma. When I saw that, I was marching around here. I showed it to my kids. I made a little video. I mailed it to people. I was like, look what I could do. And that's what excites me so much about programming. When you solve something like that, you just feel like the adrenaline is nothing like anything I've ever felt. It's fantastic. So now you know what feeling I had every day of the week during Christmas and New Year. Well, the corollary, though, is as soon as that happens, as soon as you feel that adrenaline rush, you want more or work on more. And the only time you stop is when you fail. When you get stuck, when you can't do it, that's when you stop. And that's the worst thing because you never stop on a high. You don't go, I solved it and walk away. You look at it and go, yeah, but you know what would be even better? Yeah, true. True. That's that's what happened. And I briefly told you about how I was looking for this random function, something that would would be as random as possible. And I couldn't get it to work. And it took me, I think, half a day or even longer. And I was just stomping around the house and I was procrastinating of going on and then the next day I sat down and something clicked or whatever it happened. And then it worked. So, yeah, I felt this adrenaline rush. And then, oh, yes. So now I can do this and this and this and this until you get stuck again. There is a huge amount of value in walking away. Like you're positive you've tried everything, but until you walk away and you have to go, let your brain work on something else, go for a walk. Taking a shower often helps me. There's some of the hot water hitting the top of my head like fires, new neurons or something. But that seems to be something that will help me break it loose. Yeah. And what helps me is writing an email or a forum post where I want to ask a question. And then I write down and then I. OK, let before I make a fool of myself, let me check everything I write down. Do I have the right versions? Do I have the right file? And then, damn, I forgot this setting. And then my problem was so. You don't have to send those emails. You only have to write. No, no. Yeah. Yeah. And then halfway through, you find the solution and then you just throw everything away. Oh, I did that today. I wrote a bug report to a developer. And then right before I hit send, I went, let me test one more thing. Now, there was no bug. There was nothing wrong. It was some self-indue inflicted wound, you know. Yeah. Yeah. So if people want to get involved in the project, I'll obviously put it in the show notes. But the it's under Berta Fisser, which in Ireland, apparently is something people would know what that means. But an artificer is like an artisan, I think. And so Berta Fisser is a play on words. And that's Bart's GitHub persona. And the the project is XKPassWD-JS. But of course, I'll put a link in it. And we really welcome people to fork the code and get to work now. I think, I mean, we're ready, right? Yeah, true. What might be helpful is if you plan to work on something, put an issue in GitHub and assign it to yourself. I don't think you can if you're not part of the project. Let me check that. Oh, yeah, yeah, of course, no, you can't. So yeah, you you could. You could. Yeah. Well, yeah, let's see. Can I make a comment? So remove problematic words from dictionary. Oh, Bart, Bart commented on one. Yeah, you could make a comment and say dibs. And then maybe you could keep an eye on that or Bart can keep an eye on that and assign. Well, no, you can't assign people either. Can you if they're not part of the team? Maybe not. No, no, yeah, yeah, you're right, you're right. So that was a bad idea. But you can write something in the comments. You could. Yeah, what we could do. What if, like, remove problematic words from dictionary? Let's say, I agree, I want to do that one. And then you could create one of those little tags that says assigned or something like that. Or, you know, somebody's working on that. But in any case, it can still be solved by several people, right? True. True. It doesn't get stopped on because of the power of git, right? No, that's true. But I know, I know myself. If I solve a problem and somebody else already did solve the problem, I feel like I wasted time. True. Yeah. And I guess, but right, dibs. They give. Yeah, I call dibs on that. That's where you say that one's mine. Somebody could call it. But I'll try to get it done in the next next number of weeks or something like that. And if they don't get it done, then somebody else can steal dibs. Yeah, true. I'm not sure what the rules are on this. Yeah. Well, there is the only rule there is, is if you commit. Or rather, yeah, if you commit at the issue number. So hashtag, say five means I'm working on each I've worked on issue five. This belongs to issue five. So you do the conventional commits like fix or work in progress or chore or whatever. And then you put in a space, of course, and then hashtag and then the number of the GitHub issue. Once you when it's pulled in as a pull request, it refers to that issue and then you can cross link and see. OK, this code belongs to that issue. Oh, that's nice. Can it be so in the commit message or in the commit title? Does it matter in the commit title? OK, in the title. So OK, we'll get get a little bit nerdy here for the general audience, but we want to pull everybody along. Yeah, if you want, you can check my commits. I've done that already. And then OK, just follow the format. Well, this is really cool. Would it be a true statement that someone could actually use it right now to get? Yeah, it doesn't have as much functionality as the current version of the website. Oh, it doesn't have entropy information either. It doesn't. It does. Does it? Oh, sorry. Yeah, the statistics are there. They are. OK, sorry. I was so paying attention to that one little text area. I don't think I looked below it, but it is in there. Below it is the status. Yeah. So it's functioning. It's functioning. Yeah, but the thing is, there is no website currently where it's publicly available. We could do releases. We could do a beta release. Yeah, but that means we have to actually find some place on the Internet to put it up. No, no, we can do it within Git. I do that all the time with my with my code while I'm working on it. I create a little. Yeah, yeah, I mean, yeah, I can make a release. Yeah, of course. But then you still have you need. You can't just open the HTML. You need it as a web server. But it does that inside inside Git. So I have one I call. I'm working on this time time adder app. Oh, we can do it on GitHub pages. Yeah, get up pages. So it's it's GitHub.io slash. So my is podfeet.github.io slash time dash adder. You can get to it. So we could do that. It'd be a beta. True. Yeah, we can do that. But I mean, we can also make your own risk for it. Yeah, true. I mean, it will generate about the same quality of passwords that it would do on the original website. Well, except you took a bunch of the words out. Well, yeah, that's true, but you are going to fix those. See how she is. Yeah. And then, of course, you have less customization and configuration functionality. But the quality of the passwords is, I think, the same. Yeah, yeah, that's right. Well, I think that's been really cool. I know the community is going to be super excited about this. And we'll probably hopefully we were trying to get this done in time to talk about it on the next programming by Stealth, where we can talk about the fact that the project has has technically kicked off and more than it did in December of 2022. True, true. And we've actually got functioning code. And it's I got to tell the audience that Alma's code is a thing of beauty. And I hope we can all try to keep it in her style because she uses variable names that you can tell exactly what they are. The function names are exactly what it does. You know what the function is that generates the passwords? It's called generate password. You know, I mean, everything. There's no abstraction layer. You don't have to look at an acronym and try to guess what she meant. It's written out. I know it's a lot of text to type, but everything auto fills in now in code when you're writing. So it's not that big of a deal. And her documentation is beautiful and her tests are beautiful. And it's just a wonderful thing. I was thrilled that it's only because of that, that I was able to figure out where I could do this because I was like, oh, there's what happens when I press this button. Where's the click event? Oh, it's that function. Oh, that's the name of the function. I know what it is. Where's it going to put it? Oh, it's going to put it in password text area. I knew exactly where it was going to go. It made it so much easier. So I hope everybody else keeps writing like that or I'll never have a chance to keep up with the rest of you. Yeah, I hope so too. Because that's why I'm wondering if we should make some rules like... I don't want to say follow my lead, but it would make it easier if we could all program in the same kind of style with longer words describing the functions, what they do, et cetera, et cetera. And... That make you a Bart. He loves his acronyms for work, for his... Well, I think Bart is a different kind of lazy. Why write 20 letters if you can do it with two? Right, right, yeah. I think that's... Yeah, and well, for all the little, you know, the examples that are used within programming by Stealth, they might be long, but I don't know if you looked how many lines of code there currently is in XK-PAL-Long. No, it's tight. It's really short, right? Yeah, I try to stick to the rule that don't make your function longer than what fits in one screen, because otherwise you lose track. I sure do. Yeah, and try to make a function do one thing. I probably didn't follow my own rules everywhere, but those are sort of best practices. And if we can stick to that, I think it makes it easy for everybody to contribute and improve and expand the code and the functionality. Yay. Well, this has been really fun. So if people want to chat with you about any of this, would the podfee.com slash Slack be the right place to go? Yeah, yeah, but do ping me because I'm not in there every day of the week. Yeah, so throw an at-helma on it in the PBS channel and you can catch her attention and tell her how awesome she is or how you want to contribute. I think this is gonna be a lot of fun and I'm excited that we're getting there. We're way past fixing to make a plan to start. Yes, yeah, yeah, yeah. We just actually started and right now I would love for Bart to just participate himself and... Well, he opened an issue. So there you go. He did. Oh, I haven't looked at it yet. Yeah, he got an interesting request from on the forum on xkpastwd.net is somebody asked whether problematic words for children could be taken out of the password generator that this person works for a K-8 school district in IT and it's words like pain and hurt and dead and death. Oh, it also has a woman in the list. I don't know what that one is. Bone, heaven, pole, anger, broken, cried, sick, kiss. I don't know, but he did open an issue. So he's poked at it, so that's good. Yeah, yeah, so and then the list of words is there. So they're easily changed and removed or whatever we want to do. Right, right. Well, this has been a lot of fun. I am excited, I'm pumped. I've got a couple of maybe another month or so more of CES content. So hopefully I'll have more time right now to dig in and help. This is great fun. Thank you so much for doing it, Helma. Yeah, and I mean, everybody who doesn't want to program but wants to use the project, they can also make feature requests. I want it to do this. And whoever wants to contribute with code can look at the issues and try to fix it and bring that feature request into the code. There you go. And you can help write documentation. There's a lot of things different people can do of different skill levels. You do need a GitHub account, but that's about it. Yeah, yeah, and that's free. Right. All right, thank you so much, Helma. This was really a blast. Thank you. I hope you enjoyed this episode of Chinchat Across the Pond Light. Did you notice there weren't any ads in the show? That's because this show is not ad supported. It's supported by you. If you learned something or maybe you were just entertained, consider contributing to the PodFeed podcast. You can do that by going over to podfeed.com to look for the big red button that says Support the Show. When you click that button, you're going to find different ways to contribute. If you'd like to do a one-time donation, you can click the PayPal button. If you want to make a recurring contribution, click the Weekly Patreon button. You're only charged when I publish an episode of the No Silicast, which let's face it, it's every single week. So I don't charge Patreon for Chinchat Across the Pond Light or programming by stealth episodes. Another way to contribute is to record a listener contribution. It's a great way to help the No Silicast ways learn from you and takes a little bit of the load off of me doing all the work. If you want to contact me for any reason, you can email me at alison at podfeed.com. And I really encourage you to follow me on Mastadon at podfeed at chaos.social. Maybe you want to talk to the other No Silicast ways. You can do that in our Slack group at podfeed.com slash slack. Thanks for listening, and stay subscribed.