Episoder
-
In a very unusual Tidbit episode of Programming By Stealth, Allison interviews NosillaCastaway and Programming By Stealth student Steve Mattan about how he's running Large Language Models locally on his Mac. He pulls this off using a series of open source tools, starting with Ollama for the models from the command line, and then Enchanted to give him a nice GUI. He explains how he's integrated the local LLM into VSCode for his coding, and how he uses Keyboard Maestro to launch all of this at once.
You can find the outline and links to how Steve's doing this at pbs.bartificer.net.
Read an unedited, auto-generated transcript with chapter marks: PBS_2024_12_07
Join our Slack at podfeet.com/slack and look for the #pbs channel, and check out our pbs-student GitHub Organization. It's by invitation only but all you have to do is ask Allison!
Join the Conversation:[email protected]/slackSupport the Show:Patreon DonationApple Pay or Credit Card one-time donationPayPal one-time donationPodfeet Podcasts Mugs at ZazzlePodfeet 15-Year Anniversary ShirtsReferral Links:
Parallels Toolbox - 3 months free for you and meLearn through MacSparky Field Guides - 15% off for you and meBackblaze - One free month for me and youSetapp - One free month for me and youEufy - $40 for me if you spend $200. Sadly nothing in it for you.PIA VPN - One month added to Paid Accounts for both of usCleanShot X - Earns me $25%, sorry nothing in it for you but my gratitude -
In this installment of Programming By Stealth, Bart completes his miniseries on Git Submodules. Last time he created an imaginary company with three developers and went through three relatively simple scenarios where Git submodules were implemented. In this finale installment, he takes it up a notch in complexity and we actually get to push submodule changes. The path is fraught with danger and I get stuck on the very last scenario but Bart wouldn't let me give up and eventually helped me understand.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Read an unedited, auto-generated transcript with chapter marks: PBS_2024_12_07
Join our Slack at podfeet.com/slack and look for the #pbs channel, and check out our pbs-student GitHub Organization. It's by invitation only but all you have to do is ask Allison!
Join the Conversation:[email protected]/slackSupport the Show:Patreon DonationApple Pay or Credit Card one-time donationPayPal one-time donationPodfeet Podcasts Mugs at ZazzlePodfeet 15-Year Anniversary ShirtsReferral Links:
Parallels Toolbox - 3 months free for you and meLearn through MacSparky Field Guides - 15% off for you and meBackblaze - One free month for me and youSetapp - One free month for me and youEufy - $40 for me if you spend $200. Sadly nothing in it for you.PIA VPN - One month added to Paid Accounts for both of usCleanShot X - Earns me $25%, sorry nothing in it for you but my gratitude -
Manglende episoder?
-
In PBS 172 Bart Busschots explained what Git submodules are and the kinds of problems they solve. In this practical lesson, he walks us through three scenarios where we actually get to type in Git commands to learn how the process works. We get to pretend we're in a small web app business where company branding is important.
In the first scenario, we're a new developer joining an app team and we have a repo that already includes the branding submodule. In the second scenario, we're a seasoned developer on the team creating a new app and we need to import the branding submodule. Finally, in the third scenario, we're one of the brand designers and we want to update the branding.
In the third scenario we learn two different ways to incorporate the branding changes into our web apps.
I'm always happy when I get to play along in the Terminal, so this lesson was great fun.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Join our Slack at podfeet.com/slack and check out the Programming By Stealth channel under #pbs.
Support Bart by going to lets-talk.ie and pushing one of the big blue support buttons.
Referral Links:
Parallels Toolbox - 3 months free for you and meLearn through MacSparky Field Guides - 15% off for you and meBackblaze - One free month for me and youSetapp - One free month for me and youEufy - $40 for me if you spend $200. Sadly nothing in it for you.PIA VPN - One month added to Paid Accounts for both of usCleanShot X - Earns me $25%, sorry nothing in it for you but my gratitude -
Bart takes us back into our Git miniseries to explain Git submodules, which are essentially nested Git repos. After we learn what they are, he explains why nesting is needed. Then he takes us through three use cases as a way of illustrating the kinds of problems Git submodules can solve.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Join our Slack at podfeet.com/slack and check out the Programming By Stealth channel under #pbs.
Support Bart by going to lets-talk.ie and pushing one of the big blue support buttons.
Referral Links:
Parallels Toolbox - 3 months free for you and meLearn through MacSparky Field Guides - 15% off for you and meBackblaze - One free month for me and youSetapp - One free month for me and youEufy - $40 for me if you spend $200. Sadly nothing in it for you.PIA VPN - One month added to Paid Accounts for both of usCleanShot X - Earns me $25%, sorry nothing in it for you but my gratitude -
In ye olden days, iOS kept everything sandboxed in a way that apps weren't allowed to reach outside of their own data to open individual files. But with the aptly named Files app, and an API to allow a human to do the picking, apps can now open files directly on iOS.
This "innovation" allows us to have a Git client on iOS and have it use a linked repo that's stored in the Files app. This means we can use any text editor we like to open the repos files for editing.
In this tidbit episode of Programming By Stealth, Bart walks us through how to configure the iOS Git client Working Copy to clone a repo from GitHub, and then open the files in his favorite text editor on iOS, Textastic.
Hat's off to Jill of Kent that explained to Bart and me more than a year ago that this was possible, but a fist shake to Bart for not telling me how to do it till now!
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Join our Slack at podfeet.com/slack and check out the Programming By Stealth channel under #pbs.
Referral Links:
Parallels Toolbox - 3 months free for you and meLearn through MacSparky Field Guides - 15% off for you and meBackblaze - One free month for me and youSetapp - One free month for me and youEufy - $40 for me if you spend $200. Sadly nothing in it for you.PIA VPN - One month added to Paid Accounts for both of usCleanShot X - Earns me $25%, sorry nothing in it for you but my gratitude -
We have a bit of a changeup for today's lesson. While Bart Busschots is in attendance for this episode, he is not be the instructor, he is a student like me. Our instructor today is the delightful Helma van der Linden and she's going to teach us about how she applied the Model View Controller pattern to our project XKPasswd.
You can find Helma's fabulous tutorial shownotes at pbs.bartificer.net.
Join the Conversation:[email protected]/slackSupport the Show:Patreon DonationPayPal one-time donationPodfeet Podcasts Mugs at ZazzlePodfeet 15-Year Anniversary ShirtsReferral Links:
Parallels Toolbox - 3 months free for you and meLearn through MacSparky Field Guides - 15% off for you and meBackblaze - One free month for me and youSetapp - One free month for me and youEufy - $40 for me if you spend $200. Sadly nothing in it for you.PIA VPN - One month added to Paid Accounts for both of usCleanShot X - Earns me $25%, sorry nothing in it for you but my gratitude -
We're back from our summer hiatus (actually scheduled for the first time ever instead of accidentally happening!)
In this week's episode, Bart takes on the task of explaining the philosophy behind why having a framework for software development is useful and even crucial as projects get bigger and more complex. We chose this topic because the XKPasswd project has already started using a framework called Model View Controller. We get the barest understanding of MVC in this explanation from Bart, and the next episode of Programming By Stealth will be the wonderful Helma van der Linden explaining the details of her implementation of MVC for the XKPasswd project. In the first episode of its kind, I won't be the only student in the class - Bart and I will be learning together.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Join the Conversation:[email protected]/slackSupport the Show:Patreon DonationPayPal one-time donationPodfeet Podcasts Mugs at ZazzlePodfeet 15-Year Anniversary ShirtsReferral Links:
Parallels Toolbox - 3 months free for you and meLearn through MacSparky Field Guides - 15% off for you and meBackblaze - One free month for me and youSetapp - One free month for me and youEufy - $40 for me if you spend $200. Sadly nothing in it for you.PIA VPN - One month added to Paid Accounts for both of usCleanShot X - Earns me $25%, sorry nothing in it for you but my gratitude -
In this Tidbit version of Programming By Stealth, Bart Busschots interviews Mattias Wadman, one of the maintainers of the jq project. This was great fun as we just finished learning jq in Programming By Stealth.
Read an unedited, auto-generated transcript with chapter marks: PBS_2024_08_06
You can find out more about Mattias & the various projects he is working on at the links below:
Follow Mattias on Mastodon: @[email protected]
Mattias’ GitHub Profile which hosts some notable jq-related projects:
fq for querying binary files with the jq language: github.com/wader/fq
A list of presentations about fq — github.com/…The fork of the Go version of jq that powers fq — github.com/…The language definition file for adding jq support to IDEs like VS Code: github.com/wader/jq-lsp
jq implemented in jq: github.com/wader/jqjq
Some notable jq commits & files mentioned during the interview:
The very first commit in HaskelThe switch to Cjq’s main function which is written in jq — https://github.com/…A version of jq implemented in Go: github.com/itchyny/gojq
A version of jq implemented in Rust by Michael Färber: github.com/01mf02/jaq
Michael’s formal specification of the jq language — github.com/…The “Denotational Semantics and a Fast Interpreter for jq” academic paper by Michael -
In this special tidbit installment of Programming By Stealth, Helma van der Linden joins Allison to walk through how she solved a real-world problem using jq. The problem to be solved was a need to analyze the installed applications on her Intel-based Mac before migrating to her new Apple Silicon Mac.
She used a built-in Terminal command to access System Information to create a JSON file, and then used a series of jq filters to remove data she didn't need, and format what she kept into human-readable form. Helma walks us through every step of the way as she built up her jq script file to massage the data to her needs.
At the end Allison explains how to take Helma's final CSV output and analyze the data in a spreadsheet using a pivot table.
You can find _Helma's_ fabulous tutorial shownotes at pbs.bartificer.net.
Read an unedited, auto-generated transcript with chapter marks: PBS_2024_07_20
Join our Slack at podfeet.com/slack and look for the #pbs channel, and check out our pbs-student GitHub Organization. It's by invitation only but all you have to do is ask Allison!
-
In this second (and final) installment about YAML, Bart teaches us who to write multi-line strings and how not to write multi-line strings. He teaches us about String Blocks which is a bit head-bendy but allows you to write human-readable strings and also tell YAML what to do with empty lines and white space.
After that slightly heavy lift, we learn about how to write much simpler-looking Sequences and Mappings than the way we learned in our introduction to YAML in PBS 168. It's really nifty how you can write them in compact, sensible forms, and even easily combine separate YAML documents into the same sequence or mapping.
Finally we learn how to use the `yq` language to query JSON, CSV, and XML files using a language that uses `jq` syntax so you'll feel right at home.
Read an unedited, auto-generated transcript with chapter marks: PBS_2024_07_06
-
In Programming By Stealth, we've completed our series on the jq language and now Bart Busschots brings us a two-part miniseries about the YAML data format. He takes us through the history of data formats we've "enjoyed" such as fixed-width text files, Comma Separated Value files, through to JSON and XML. All of them had their place in history but also had their downsides. YAML promises to be human-readable (yay) and computer-readable (also yay.)
Once we're bought into how YAML is the data format of our dreams, Bart explains that there are only two kinds of data, scalar,s and collections, and that collections can be sequences or mapping and all of these data types go into a document. Luckily this is all of the jargon we'll have to learn and there are useful synonyms from other languages (e.g. sequences are really just arrays).
I found this lesson enjoyable and not too hard on my little brain so I suspect you'll enjoy it as much as I did.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Read an unedited, auto-generated transcript with chapter marks: CCATP_2024_06_22
-
It was actually bittersweet for Bart and me this week as he taught the final installment in our series of Programming By Stealth about jq. As Bart says partway through our recording, he thought this would just be a few episodes but it took 13 episodes to go through everything Bart thought was fun about this deceptively simple programming language.
This final installment in the jq series covers querying nested data structures with the `recurse` command. One of the really fun parts of the episode is when he teaches us how to dramatically simplify our code, a concept that's often called syntactic sugar. We get to do `if` statements for the first time, where I wondered why he didn't let us have them earlier! I was cross with him for holding out on us with `try-catch` too because it would have made our coding so much easier. But that was the real theme of this installment – we had to learn the way everything works before learning the shortcuts.
In the finale, he gives us a few of what he calls "honourable mentions" – little tidbits that came in handy at times.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Read an unedited, auto-generated transcript with chapter marks: CCATP_2024_06_07
Join our Slack at podfeet.com/slack and look for the #pbs channel, and check out our pbs-student GitHub Organization. It's by invitation only but all you have to do is ask Allison!
-
In this penultimate jq episode of Programming By Stealth, Bart introduces us to three new ways to process arrays and dictionaries without exploding them first. I know that sounds crazy – we've always exploded our arrays first. He teaches us how to use the `reduce` operator which lets us take an entire array or dictionary and reduce it down to one thing. The `map` function lets us process every element in an array (or or values in a dictionary) and return a new array. Finally, `map_values` lets us apply a function against all of the values in a dictionary (or an array).
It was a bitter sweet ending to the primary series on `jq` for Bart, but next time he'll do the epilogue where he'll introduce us to some rarely needed but still very useful things you can do with jq.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Read an unedited, auto-generated transcript with chapter marks: CCATP_2024_05_25
-
In this installment of Programming By Stealth, Bart explains why jq is uniquely designed not to need variables (most of the time) and then explains how to use them in the few instances when there's no other way. It's really a fairly straightforward lesson as Bart sets up some clear examples and solves them with some simple variables. It's one of my favorite episodes because the problem is clear and the solutions are clear. It really shows off how clean jq is as a language.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Read an unedited, auto-generated transcript with chapter marks: CCATP_2024_05_11
-
In our previous episode of Programming By Stealth, Bart Busschots taught us how to create lookup tables with jq from JSON data using the `from_entries` command. Just when we have that conquered, this time he teaches us how to do the exact opposite – disassemble lookup tables. I think this was a really fun lesson because taking data apart, reassembling it the way you want and then putting it back together again is a great way to really understand what we're doing with jq. I got much more comfortable as I started to recognize the patterns in what Bart was doing. We also get to play with a new data set, the Have I Been Pwned data gathered by Troy Hunt.
If you're a data nerd, and really who amongst us isn't, you'll love this episode too.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
-
In this episode of Programming By Stealth, Bart Busschots as usual works through his solution to the challenge from last time, and as usual I learn a lot more about how to use jq to solve problems. He takes a bit of a detour to explain a fun email we got from Jill of Kent in which she explained the vast number of headaches you'll run into when trying to alphabetize names no matter the language.
Then we buckle down and learn about how to make tradeoffs between speed and efficiency of resources, and how jq lookups can help us. Bart also helps us understand _when_ lookups can help us with querying JSON files.
This episode is more of a lecture, which is fine because he's introducing a new concept and explaining some philosophy. You won't hear me breaking into the conversation very much but it's only because I'm not confused! Don't worry, when we get into the final example you'll hear me get confused! Bart explains it about 3 or 4 times and when you hear why your co-host here was confused, it's kind of ironic.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
-
Bart Busschots is back to teach us how to alter arrays and dictionaries in JSON files using jq. Bart went through his challenge solution on cleaning up the Nobel Prize database and I learned a lot from it. Maybe he'd already taught all of it to us before but I sure wouldn't have been able to put the pieces together.
For the new content, we learned how to alter arrays. We mastered sorting and reversing, how to add and remove elements, how to deduplicate the values within, and how to flatten even nested arrays. From there we learned how to manipulate dictionaries by adding and removing keys.
It's a very focused lesson that continues to show how powerful the jq language is. I think my favorite part though was when Bart made an existential philosophy observation when he said "Everything exists with the value of null."
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
-
In this week's episode of Programming By Stealth, Bart continues to expand our knowledge on how to use jq to query and manipulate JSON files. We learn how to use mathematical operators on data in our JSON files along with fun functions like floor and absolute value. I even contributed some to the learning by showing examples of how `ceil` (for ceiling), `floor`, and `round` produce curiously different results when operating on negative decimal numbers.
We move onto learning about both plain assignment and update assignment. It seems like a small deal but the ability to set a parameter using the plain assignment `=` vs the ability to update a value using ` |=` is is actually huge and has lots of subtleties.
I think one of my favorite parts was when Bart took us back to our JavaScript lessons and reminded us of how weird it is on one concept but how jq is much more in line with modern programming languages. I felt like a seasoned programmer because I knew the history of what we'd learned. Finally we learned how you can actually divide strings. I know, weird, right? Ok, that's enough spoilers.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net.
Read an unedited, auto-generated transcript with chapter marks: CCATP_2024_02_17
Join our Slack at podfeet.com/slack and look for the #pbs channel, and check out our pbs-student GitHub Organization. It's by invitation only but all you have to do is ask Allison!
-
In this week's installment of Programming By Stealth, Bart Busschots teaches us how to use jq as a programming language. Before we get into the new stuff, Bart takes us through his solution to the challenge, and I have to say I was pretty chuffed when he said my solution to the extra credit portion was more elegant than his. To be fair, it took a buddy programming session with him for me to get the _first_ part of the challenge figured out.
When we got into the programming language part of the lesson, there were so many times that I said, "I needed this last week!" I think finding out these options are available after understanding the problems they solve was fantastic.
We learned how to run jq filters from files, which means no more looking at our filters all on one line - we can put line feeds and indents into our filters to make them more readable. We can even add comments. Bart tells us about a couple of handy plugins for VS Code to give us syntax highlighting which will be swell.
My favorite thing I learned was how to add debugging to our filters. This one is a life changer. We explore a few functions for exploring data filters that will make life easier. We wrap up with an introduction to jq variables, which the developers of jq really don't want you to use unless absolutely necessary.
-
In this very meaty episode of Programming By Stealth, Bart Busschots teaches us how to build data structures using jq with JSON files. We're not just querying existing data, we're rebuilding the data the way we want to see it. We learn how to build strings with interpolation, which I find is a very odd word to describe the process. It's really like concatenation in Excel, but maybe that's just me.
We build arrays using jq, and even convert between strings and arrays with the `split` and `join` commands. We build dictionaries in a syntax that is simple and elegant. We also build dictionaries from strings using `capture` with Regular Expressions.
We learn not to do string formatting and escaping using `@` – for example `@csv` can automatically create comma-separated values data for us and @uri can escape characters for us in a URL we build using jq.
Like I said, it's a meaty episode but Bart and I both enjoyed the lesson quite a bit.
You can find Bart's fabulous tutorial shownotes at pbs.bartificer.net. And just in case I forgot to mention it earlier, remember that we now have transcripts with chapter breaks. This means you can jump pretty easily to a topic to reread exactly how Bart explained something. You even get a time stamp of when he talked on that subject, allowing you to easily skim to the portion of the audio you want to rehear for clarification. All thanks to the magic of Auphonic. Ok, it's not magic, but it _feels_ like magic!
Read an unedited, auto-generated transcript: CCATP_2024_01_20
- Vis mere