<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><id>https://www.johnwmathena.com/the-strays/</id><title>The Strays</title><updated>2026-08-07T00:00:00+00:00</updated><link href="https://www.johnwmathena.com/the-strays/" rel="alternate"/><link href="https://www.johnwmathena.com/the-strays/atom.xml" rel="self"/><generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator><subtitle>The home of John Mathena's stray thoughts</subtitle><entry><id>https://www.johnwmathena.com/the-strays/2026-08-07-how-to-help-llms/</id><title>How to be helpful and How (not?) to run robots locally</title><updated>2026-08-07T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;This past week I wrestled quite a bit with React and Tailwind trying to update the design of some question and radio input button pairs in our app. I made it about 95 percent of the way there and then I paired with one of our senior frontend engineers to do the rest. They drove and we walked through the offending components together.&lt;/p&gt;
&lt;p&gt;I correctly added some flex containers to the question and answer components so they would be vertically centered with each other. However, I neglected a breakpoint and &lt;code&gt;flex wrap&lt;/code&gt; option that would allow the radio input answers and their labels to slide underneath the questions if the user entered data on mobile. Instead the fairly short questions just squished up against each other as the three radio buttons took up more and more of the viewport. My apologies that I do not have a visual. I suppose I could create a CodePen or something to illustrate the point, but I’m a bit too lazy right now. ¯\&lt;em&gt;(ツ)&lt;/em&gt;/¯&lt;/p&gt;
&lt;p&gt;Our senior FE engineer also gave me some helpful devtool tips for looking into CSS elements and testing changes. They even manually increased and decreased the browser window to make sure the breakpoint occurred at the same width for all the questions. I both learned a lot and got a very thorough commit to cap off my PR after this session.&lt;/p&gt;
&lt;p&gt;Today, I’ve been trying to get some local models up and running to use with OpenCode. I had Ollama installed inside WSL on my gaming PC from some experimentation last year. I wanted to grab some of the newer models that could make tool calls, but I had to be selective since I’m limited by my hardware. - NVIDIA GeFOrce RTX 3060 with 12 GB of VRAM - 16 GB of RAM on the system I’ve got a two month old Macbook Pro with a crap ton of processing power for work, so I lowered my expectations a bit. Not too much though after reading about how much better local models had gotten.&lt;/p&gt;
&lt;p&gt;I downloaded some Gemma 4 models first; 12 billion and 26 billion parameter versions I believe. Though, I think they were a bit too big to run on my PC. So I pulled down some Qwen models as well, starting with 2.5-coder. I got OpenCode and Ollama all configured, fired the thing up in my repo and it just kept printing out the CLI tools it &lt;em&gt;would&lt;/em&gt; call to answer my prompt rather than actually doing work, even in Build mode.&lt;/p&gt;
&lt;p&gt;I eventually figured out this was because Qwen2.5-coder’s tool call formats don’t always play nice with what OpenCode expects. Very interesting and very frustrating! I ended up trying LMStudio as well just to see if Ollama was the problem. I got LMStudio working with Qwen3.5, and then switched back to Ollama to give it one last go. e Voila! It works! It’ll call git and grep and stuff like that. Cool!&lt;/p&gt;
&lt;p&gt;I actually was chatting with Kagi Assitant throughout this to see if a robot could help me fix another robot. Kagi told me to just run the commands the broken agent spat out and then paste the output back as the next prompt. That would work, but, it kind of defeats the purpose right? It felt very cyclical and in a bad way. I managed to configure the local LLM well enough to do some stuff, but it definitely can’t go full YOLO mode (or even partial YOLO mode, to be frank) and that’s probably not a bad thing.&lt;/p&gt;
&lt;p&gt;I came back the next day and just started working through the codebase I hadn’t touched in awhile the old fashioned way. And I felt a lot better and learned a lot more. It became clear the command handler pattern I wanted to implement and the types I needed to build and fix. I made a lot more actual progress towards my goal of refactoring and rearchitecting than when I wrestled with Ollama and OpenCode for half a day.&lt;/p&gt;
&lt;p&gt;Good reminder that old reliable methods are, well, old and reliable; pairing with a nice, patient coworker and click-clacking your way through a codebase.&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2026-08-07-how-to-help-llms/"/><published>2026-08-07T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2026-08-01-some-ramblings/</id><title>Some Ramblings (2026-08-01)</title><updated>2026-08-01T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;I want to blog more, so I’m writing without as much focus as my other posts. Though as I wrote last sentence, I notice that I titled three of my last five or so posts “Some Links and Stuff”. We’re ahead of the game baby!&lt;/p&gt;
&lt;p&gt;Naturally, I’m reflecting on my first 2 months at a new job. Overall, very good! I’ve gotten a couple chores and bug fixes out and am gearing up to add a more formal feature here in the next month. It’s been great to be hands on keyboard again. I do miss some of the mentorship and guidance you provide as a people manager. But since there’s a senior in my title, I’m sure that opportunity will present itself the longer I’m here.&lt;/p&gt;
&lt;p&gt;I spent quite a bit of time trying to get one of our dockerized local development environments working as expected and updating the documentation. Our DevOps lead is very nice and had gotten a lot set up already. Much of the work was adding test runners and getting different projects to talk to each other over a docker network. Claude and Copilot helped a lot, I can’t lie. Although, I had to slow them down so I could review code and decisions.&lt;/p&gt;
&lt;p&gt;I’m new to Ruby on Rails in the backend and React on the frontend, which is the majority of the tech stack here. The LLMs are especially helpful when I know a Python-y or more general backend thing I wanna do, and just need help translating to Ruby and/or Rails. LLMs provide good debugging support and code review. Gemini has been kinda bad though. We still have Copilot in our repos but Gemini runs automatically, presumably because we are a Google Workspace shop and it’s cheaper. I don’t have a specific example off the top of my head, but I’ve seen other developers also comment on Gemini’s suggestions “uh this isn’t really accurate. here’s why. going to ignore”. People are diligent when responding to comments though, so that’s a plus.&lt;/p&gt;
&lt;p&gt;I have to be really careful with React. I only knew the basics coming in, and I can’t evaluate React code nearly as deeply as backend code of any sort. Our frontend developers and product designers launched a component library for the whole company and devs are supposed to migrate legacy components to the new library when they come across old code. I asked the LLMs to migrate a pretty complex Form and hardly understood any of the output. So, I just held off on the migration and made a ticket to go back in and complete it when I could go through it deeper. It wasn’t mission critical, and other devs said this was totally cool, but I can imagine getting pressured to just chug that along under different circumstances.&lt;/p&gt;
&lt;p&gt;I still haven’t quite figured out how to marry using these LLMs for coding while continuing to hone and grow my own skills. I know people out there have ideas and strategies. I just write stuff by hand as consistently as I can and use these tools only when I can validate the output well and feel confident I can do the work myself. I’m not sure if that’s the best approach, but that’s the tune I’m singing for the time being.&lt;/p&gt;
&lt;p&gt;Again, these robots are helpful. But man, the externalities are ROUGH. People seem to argue about the magnitude of different problems with this era of “AI” tools; environmental impact, legality of training data use and acquisition, programming skill atrophy, etc. However, it seems clear all these problems are real. I love that the local models and tools are getting good. Vicki Boykis wrote a &lt;a href="https://vickiboykis.com/2026/06/15/running-local-models-is-good-now/"&gt;post&lt;/a&gt; about that. I’m working on setting up a NAS and I could set up and old laptop I have lying around to work with the NAS and run some thing locally. Then I’d feel better about leveraging a helpful tool and not giving money to the richest and most ethically questionable people on earth right now.&lt;/p&gt;
&lt;p&gt;Other than all the externality stuff I mentioned above (which should be enough for anyone to question if we should even use these things at all, for what it’s worth), I really wish more places were using LLMs for one of the things they are best at: search and summary! I mean, I’m sure people are, but, ok let me break it down. So every place I’ve ever worked has had some collection of internal knowledge documents for everything from strategy, operations, HR, you name it. And the workers at most of those places usually agree that no one can find a goddamn thing. It’s all a mix of Google Drive / One Drive documents with Confluence and SharePoint mixed up in there plus Slack and Teams doing their best to hold things together.&lt;/p&gt;
&lt;p&gt;Now if things were organized, this would be a TREMENDOUS opportunity for an LLM to provide anybody with a way to talk with your organzation’s knowledge base. Atlassian, Microsoft, etc., do have AI features for the docs you shove on their platforms, but in many places it’s likely garbage in garbage out as they say. I don’t understand why every sufficiently large company doesn’t go hire a librarian or a knowledge management expert (this is a real field, I promise! someone I went to school with does this! s/o Sarah) and have them make their company knowledge base not suck. I mean I can guess the reasons but it’s so obviously a win across the board. This would also help people learn and upskill and would prevent turnover from killing a company’s institutional knowledge. The improved learning and upskilling from having company knowledge and history easily accessible for newer employees could also lower turnover itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Better knowledge base = everybody knows more = everybody can do better = the organization does better&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well that’s work. Personally, I’ve been travelling quite a bit. I’ve been to the beach twice; once to Rehobeth Beach in Delaware with friends and once to Hutchinson Island near Fort Piece in Florida with my wife and my in-laws. Definitely recommend going to the beach. Florida is very hot in July, though this is likely not surprising. I feel extremely fortunate and lucky to be able to travel and enjoy time off with family and friends, one because it rocks and it makes life worth living, and two because of how bonkers the world around us can be. It becomes that much more important to take time to have fun.&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2026-08-01-some-ramblings/"/><published>2026-08-01T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2026-05-25-some-links/</id><title>Some Links and Stuff (2026-05-26)</title><updated>2026-05-26T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;It’s been awhile so I’ve got a bunch of fresh, new links plus some updates&lt;/p&gt;
&lt;ol type="1"&gt;
&lt;li&gt;&lt;a href="#fun-blogs"&gt;Fun blog posts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#live-reload"&gt;Live reload for local development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#new-job"&gt;Changing jobs!&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="fun-blogs"&gt;Some fun blog posts from my favorite bloggers&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.drcathicks.com/post/on-craft"&gt;https://www.drcathicks.com/post/on-craft&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.drcathicks.com/"&gt;Dr. Cat Hicks&lt;/a&gt; is a psychologist who specializes in studying software teams and tech work. They have a podcast, this blog, and post frequently on Mastodon. Dr. Hicks spends this post talking about their Grandpa’s love of his Craft for the craft’s sake. It’s so well written and touches on a lot; taking pride in your work, the importance of mentorship, avoiding gatekeeping in communities of practice. The talk dovetails really nicely with Vicki Boykis’ &lt;a href="https://vickiboykis.com/2026/04/20/build-yourself-flowers/"&gt;“Build Yourself Flowers”&lt;/a&gt; keynote at the annual Applied Machine Learning Conference in Charlottesville last month.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://piechowski.io/post/how-i-audit-a-legacy-rails-codebase/"&gt;https://piechowski.io/post/how-i-audit-a-legacy-rails-codebase/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Last year, another director at my former employer left and I suddenly found myself the owner of a Ruby on Rails monolith despite never having written any Ruby. This post has a good mix of practical advice on auditing the health of an existing Rails project using specific tools (and AI, responsibly!). But the author also walks through some questions you should ask the people around the project and puts that first! Great approach.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blainsmith.com/essays/humanities-in-the-machine/"&gt;https://blainsmith.com/essays/humanities-in-the-machine/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blain details brief histories of some giants in Computing and argues how most, if not all, these luminaries rigorously studied various domains and areas outside computing and other technical disciplines; be they Philosophy, Foreign Languages, Literature, etc. We programmers need to read and do things beyond the keyboard! Especially things that don’t appear obviously applicable to tech. This is hard, but essential to being good developers but more importantly good people.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://evanhahn.com/all-tests-pass-a-short-story/"&gt;https://evanhahn.com/all-tests-pass-a-short-story/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Evan here tasked an AI with writing a small compression implentation in a language new to him called Arturo. Evan gave the bot a AGENTS.md file plus some Go test cases and let it loose. He beamed when the agent finished with all the tests passing, but then he realized the agent just wrote an Arturo shell to call Python. Sigh :( very funny though!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://belderbos.dev/blog/rust-made-me-a-better-python-developer/"&gt;https://belderbos.dev/blog/rust-made-me-a-better-python-developer/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not sure if I’ll ever learn Rust. I guess if someone every decides to make me a systems programmer or if I do one of my crazier projects on one of my neverending lists. I like the mindset here. I do have plans to learn basic C, not necessarily because I’m gonna be using it at work. Learning other approaches to working in your field naturally exposes you to new ways to think, new ways to solve problems. And I don’t think we’re going to run out of problems anytime soon.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="live-reload"&gt;I added a live reload feature to mysite!&lt;/h3&gt;
&lt;p&gt;Since I moved away from Hugo earlier this year, I lost my live reload feature. So when I’m adding something to my site or writing my blog, I have to manually run the &lt;code&gt;make build&lt;/code&gt; command to refresh the files. Not a huge burden, honestly, but I wanted to track a crack at setting this up myself.&lt;/p&gt;
&lt;p&gt;Naturally, there are numerous approaches since we are using Python here. A couple months ago I used one of the Copilot models with OpenCode to make me some options for adding live reload to my local development server. One of the options was FastAPI, which is a popular Python library I’ve never used so I asked it to build me a first attempt. It…did not work.&lt;/p&gt;
&lt;p&gt;After coming back to my branch after a couple months, the &lt;code&gt;dev_server.py&lt;/code&gt; file it made just seemed way too heavyweight to me. I went back to the drawing board and came across the &lt;code&gt;livereload&lt;/code&gt; package, which seemed a much better fit. After hacking away at it and a couple other miscellaneous things for an hour or so, I had a working live reload. The code below is the entire &lt;code&gt;dev_server.py&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import logging

from livereload import Server, shell

logging.basicConfig(
    level=logging.INFO, format=&amp;quot;%(asctime)s - %(levelname)s - %(message)s&amp;quot;
)
logger = logging.getLogger(__name__)


if __name__ == &amp;quot;__main__&amp;quot;:
    server = Server()

    server.watch(&amp;quot;src/&amp;quot;, shell(&amp;#39;make build&amp;#39;))

    server.serve(port=8000, liveport=8001, root=&amp;quot;public&amp;quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I could make it a little smarter if I really wanted to. It’s very greedy and watches everything in &lt;code&gt;src&lt;/code&gt;. Right now, it just builds the entire site anytime something changes. But since my site is small and takes about 2 or 3 seconds to build, I’m not too worried about it. The changes won’t be difficult if I ever decide to make them (or have an LLM do it). Don’t overengineer!&lt;/p&gt;
&lt;h3 id="new-job"&gt;New job!&lt;/h3&gt;
&lt;p&gt;My last day at 2U was May 22. I’ve got a little time before I start my next gig, which I’m using to blog and make site enhancements as you can see! I’ve been at 2U almost 4 years and it was first time programming with a team of fellow programmers. I met and worked with incredible people who helped me develop into a competent engineer (and manager)!&lt;/p&gt;
&lt;p&gt;Over last 12 months, I went from being a first time manager of less than 10 people to managing nearly 30 across 3 different teams. I received a lot of great feedback from my colleagues and higher-ups about my performance and the experience helped me realize that I do like managing and supporting developers. Ultimately, I decided to pursue other jobs because my remit continued to grow and I felt I wanted to be more hands-on for the current stage of my career, rather than a mile wide and an inch deep. While I’m sad to be saying goodbye to some great people, I’m excited to work in a new org with new challenges.&lt;/p&gt;
&lt;p&gt;If you’ve made it this far, thanks for reading!&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2026-05-25-some-links/"/><published>2026-05-26T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2026-01-31-oops-i-did-it-again/</id><title>Oops, I did it again! Another new site build strategy</title><updated>2026-01-31T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;I ditched Hugo after almost 2 years. I came across a post detailing a vanilla HTML/CSS approach. It also leveraged uv to run a build script that converted the markdown files to HTML. I modified said script and added a step for my static site search engine I run on my wiki pages. This drastically simplified my build process. Though as of writing, I have yet to rewrite my GH action for deploy, so maybe I shouldn’t speak so soon. See below for the post I used as insipiration for this refactor.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.vijayp.dev/blog/rewrite-plain-html/"&gt;https://www.vijayp.dev/blog/rewrite-plain-html/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="creating-a-src-directory-and-tidying-up"&gt;Creating a &lt;code&gt;src&lt;/code&gt; directory and tidying up&lt;/h3&gt;
&lt;p&gt;I created a copy of my hugo generated &lt;code&gt;public&lt;/code&gt; directory and used it as reference for both the templates I applied to my markdown files and the generated HTML files resulting from my build script. After creating a &lt;code&gt;src&lt;/code&gt; directory and an &lt;code&gt;index.html&lt;/code&gt; file, I moved my assets and made sure my home page rendered as expected. Then I needed to focus on the other main pages on my site that are in my navigation bar my resume, my portfolio, and my wiki/digital garden (though I actually did a lot of this last).&lt;/p&gt;
&lt;h3 id="refactoring-build.py-script-for-my-site"&gt;Refactoring &lt;code&gt;build.py&lt;/code&gt; script for my site&lt;/h3&gt;
&lt;p&gt;I didn’t have to change too much. I write a traditional blog, poetry page, and a wiki / digital garden. The blog and poems use the same page layout and almost the same CSS. So I made the build script Vijay provided reusable for both sites’ content. I created a separate build function for the wiki pages, since they’re quite different. Overall, still a very short script, topping out around 159 lines or so.&lt;/p&gt;
&lt;h3 id="web-components-for-header-and-footer"&gt;Web components for header and footer&lt;/h3&gt;
&lt;p&gt;I didn’t have Hugo to make partials anymore, so I decided to use some JS to write web components for my header and footer. This does mean that my &lt;code&gt;head.html&lt;/code&gt; is a bit redundant on each page, but since I’m using html templates and Pandoc to generate so many when I run &lt;code&gt;make build&lt;/code&gt;, it works fine.&lt;/p&gt;
&lt;h3 id="rebuilding-my-wiki-search"&gt;Rebuilding my wiki search&lt;/h3&gt;
&lt;p&gt;I tried fiddling with &lt;code&gt;lunar.js&lt;/code&gt; and got pretty far along. I generated the index, just needed to build the actual search box and then I guess the build steps on deploy. But I realized I could just use PageFind like I had been with Hugo, so I went with that. PageFind has worked fine for me and it’s more batteries included. I could probably do some work on the search results. I think it is a little too fuzzy right now, but that’s a problem for another day.&lt;/p&gt;
&lt;p&gt;Now I just gotta deploy the dang thing! I’ll come back here if I have any problems I guess. Fingers crossed!&lt;/p&gt;
&lt;h3 id="update-post-deploy"&gt;UPDATE post deploy&lt;/h3&gt;
&lt;p&gt;This literally built successfully on the first run! Hooray!&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2026-01-31-oops-i-did-it-again/"/><published>2026-01-31T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2025-10-2-stink-without-shame/</id><title>Can you suck without shame?</title><updated>2025-10-02T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;A few days ago, I saw a TikTok where a wife recorded her husband playing in a men’s basketball league. Her caption, along with his familiar combination of lock-down defense, board crashing, and general sense of panic on offense, clued me in that he hadn’t played much organized basketball.&lt;/p&gt;
&lt;p&gt;And yet, no one cared! Unfortunately, the world of basketball, sports writ large, and really any space that involves people doing some activity or learning to do it is not always a welcoming space for amateurs.&lt;/p&gt;
&lt;p&gt;And yet again, the vast majority people who try anything new will suck at first! Unless you’re LeBron James or the LeBron James of violin, knitting, gymnastics, the International Math Olympiad, etc., you will suck! Or at least, not be great. But if you can avoid any shame associated with that, perseverance will push you to improve, grow, and maybe be great! Or at least, not suck.&lt;/p&gt;
&lt;p&gt;Now I’ve had the good fortune of trying to get good of lots of different things over my life. And I would even argue I’m pretty good at a few! And I’m definitely…less good at others. And what I pondered after seeing that video is what worked, if anything, in those communities I spent time in getting better and growing versus ones where I didn’t. Did I feel too much shame being bad that I gave up; too afraid of making a mistake to push my limits enough to improve?&lt;/p&gt;
&lt;p&gt;We cannot control what the members of our communities of practice bring with them. We didn’t raise them, determine their size, or any other innate ability they may or may not possess. So we must focus on what we can control, and I think a very important thing we can control is how our comrades feel when they fail.&lt;/p&gt;
&lt;p&gt;I’m gonna discuss a couple skills I’ve developed either as hobbies or vocations and how supported I felt by my community of practice when I inevitably made mistakes.&lt;/p&gt;
&lt;h3 id="programming-and-software-development"&gt;Programming and Software Development&lt;/h3&gt;
&lt;p&gt;I do this both as a hobby and for a living. In fact, I’m doing it right now, as I write this post on my day off. Now I’ve unfortunately heard tale of some incredbily toxic professional and hobbyist coder communities. Fortunately, my personal and professional coding communities always made me feel welcome, supported, and safe to make mistakes and ask questions.&lt;/p&gt;
&lt;p&gt;Personally, I am part of or have attended events for several Baltimore/DC area coding meetups including Baltimore Tech Meetup, Black Code Collective, and Baltimore Black Techies. I do not have a degree in CS and came to work in software through a series of exceedingly technical roles. For the many self-taught programmers that enter IT and software this way, welcoming communities for newbies are essential. More experienced coders at the meetups I attended shared details of hiring processes and technical interviews, answered very in the weeds questions about everything from SQL to DevOps to what makes a good portfolio. I remember telling an experienced data engineer I wanted to upskill so I could apply for those roles, he proceeded to write a SQL query on a whiteboard of which I understood maybe half. We stood their for about 10 minutes where he went through all the parts I didn’t understand and pointed me to resources where I could learn more.&lt;/p&gt;
&lt;p&gt;Professionally, I landed my first job on a traditional software engineering team filled with people like those from my meetups. Our lead and senior engineers reviewed pull requests with a fine tooth comb and questioned everything. “Why is this named X when it is really doing Y?” “No need to keep this extra variable, you can execute this on one line and maintain readability” “You didn’t touch this function, but it looks like it’s not being used anymore, so we can probably delete it” “I think we need an extra unit test to cover this logic, I’d put it this test module” But those engineers never demeaned you, never yelled at you, never called you names, and would never hesitate to jump into a pair programming session to unstuck you or explain their comments on a PR. I grew so much in that first year. I came in as a mid level engineer and now, 3 years later, I manage the same team with many of the same people!&lt;/p&gt;
&lt;h3 id="learning-foreign-languages"&gt;Learning Foreign Languages&lt;/h3&gt;
&lt;p&gt;I have a degree in Arabic and I minored in Spanish, having studied Spanish since middle school. I’ve on and off studied languages other than my native language of English for over 15 years at this point. And I’ve once again been a part of some great language learning classes and communities. I think for this skill particularly, I’m going to give a list of tips based on my experience and my studies.&lt;/p&gt;
&lt;h4 id="only-correct-people-if-they-ask-for-it-andor-if-it-is-genuinely-interfering-with-comprehension"&gt;1. Only correct people if they ask for it and/or if it is genuinely interfering with comprehension&lt;/h4&gt;
&lt;p&gt;Speaking a foreign language or not, &lt;a href="https://news.northeastern.edu/2023/11/30/where-do-accents-come-from/"&gt;everyone has an accent&lt;/a&gt;. And language learners are especially anxious about it. So if that person you work with or that foreign exchange student is slightly mispronouncing something, leave it be unless you really can’t tell what they’re saying or they’ve told you to bring the hammer down on their diction.&lt;/p&gt;
&lt;h4 id="mistakes-are-super-essential-to-the-process-so-grades-can-be-a-real-hinderance"&gt;2. Mistakes are super essential to the process, so grades can be a real hinderance&lt;/h4&gt;
&lt;p&gt;This is most relevant to those learning in school. One of the reasons, in my opinion, many kids learn to speak their native language without much direct instruction is that they just make mistakes all the time and everyone just accepts that it’s part of the process. Maybe you gently correct a child, maybe you just turn it into a funny inside joke. If we could bring this same energy to adult language learning, adults would have a lot more success.&lt;/p&gt;
&lt;p&gt;However, you can’t make mistakes with reckless abandon when you’ve got to take a midterm or an oral language test. Now teachers need to test to determine student progression and current ability, but I would encourage educators to include as many low-stakes or completion-based assignments as possible to provide the necessary time where students can make mistakes without fear of tanking their grades.&lt;/p&gt;
&lt;h3 id="basketball"&gt;Basketball&lt;/h3&gt;
&lt;p&gt;I’m a pretty average basketball player. I didn’t start playing beyond gym class or the backyard until my freshman year of high school, which was also the year I decided to try out for the JV basketball team after a summer of going to a court and playing pickup. I was about five foot five that first year, so…that didn’t go great! But I kept playing pickup and local rec league games and eventually intramurals once I got to college since three of my closest friends loved to play.&lt;/p&gt;
&lt;p&gt;As you can imagine, competitive pickup or organized basketball at any level can get pretty toxic. Now no one likes to lose, this author included. So I can understand, and even accept, a certain level of intensity from players in HS or College basketball and beyond. Though I’ll never accept demeaning or belittling behavior regardless of how high the stakes. I’ve played on teams, pickup and organized, where teammates yell at each other, straight-up don’t want certain players on the court, or will refuse to pass to certain people. And I’m going to go out on a limb and say not many people enjoy playing any game in an environment like that. Though I can’t speak for others, what really strikes me about those environments is that I, personally, never grew as a player hooping around people like that.&lt;/p&gt;
&lt;p&gt;I really started to grow as a player once I got to college, and I started playing as a way to hang out with people who I am friends with to this day. It certainly helped that those friends were nothing like the toxic players I’ve encountered on other teams. But, I never felt anxious on the court with those guys. Almost always, I was having fun! I knew how they played and they knew how I played and we helped each other get better. We’d of course bust each other’s chops, but always from a place of love and respect.&lt;/p&gt;
&lt;h3 id="let-people-suck-the-end."&gt;Let People Suck! The End.&lt;/h3&gt;
&lt;p&gt;Wow, this post really stretched! This is a thought that’s been tumbling around my brain for a long time, so I’m glad I’ve finally put pen to paper on it.&lt;/p&gt;
&lt;p&gt;But to sum up, when you’re searching for a community of practice, ensure your fellow practioners make you want to get better and are happy to help you fix and understand your mistakes. Run for the hills at the first sign of toxicity! If you are looking to build a community of practice or already have one, make sure beginners and experienced practioners alike aren’t anxious about making mistakes! Sucking at the beginning of the journey and making mistakes along the way are how we grow. Moreover, people tend to stay part of communities that make them happy and help them grow. So you’re not just doing charity work by welcoming newcomers and clearing space for growth, you’re helping the community survive, thrive, and grow!&lt;/p&gt;
&lt;p&gt;Thanks for reading.&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2025-10-2-stink-without-shame/"/><published>2025-10-02T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2025-08-10-some-links/</id><title>Some Links and Stuff (2025-08-10)</title><updated>2025-08-10T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;So I’ve got lots of links and lots of stuff, I hope you’re ready. I’m gonna try to make a little table of contents to quickly hop through everything.&lt;/p&gt;
&lt;ol type="1"&gt;
&lt;li&gt;&lt;a href="#marimo"&gt;Marimo rocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#some-gripes"&gt;Some gripes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#nerd-stuff"&gt;Real Nerd Stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#new-job"&gt;New Job and Hiring&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="marimo"&gt;Marimo rocks and you should try it&lt;/h3&gt;
&lt;p&gt;I managed to crank out another Baltimore data project: this one looks at who owns the vacant houses in the city. I chose Jupyter notebooks for an exploratory analysis of city employee salary data a couple years ago, and felt pretty meh about them. - Version control would work but the diffs were pretty hard to read - I had trouble reproducing other peoples’ Jupyter notebooks in the past - They weren’t very fast - The editor kept breaking on me&lt;/p&gt;
&lt;p&gt;I won’t belabor the point, but I heard about Marimo on the Real Python podcast (I think? it may have been Changelog). I decided to give it a go.&lt;/p&gt;
&lt;p&gt;First off, I installed it with &lt;code&gt;uv&lt;/code&gt; (which I am still loving!) and added any dependencies to my &lt;code&gt;pyproject.toml&lt;/code&gt; file with a quick &lt;code&gt;uv add&lt;/code&gt;. I really only needed like &lt;code&gt;numpy&lt;/code&gt; and &lt;code&gt;duckdb&lt;/code&gt; or some such. The command line tool made it easy to open tutorials, new notebooks, and more.&lt;/p&gt;
&lt;p&gt;Marimo is written in Python, so the diffs are easy to read and version control is more straightforward.&lt;/p&gt;
&lt;p&gt;You can also read data straight from CSVs into Polars/Pandas dataframes or run SQL using DuckDB. The SQL cell exposes the results as dataframes that can be shared across the notebook. However, Marimo is clever! I accidentally named a variable in a one cell the same as a dataframe output from a SQL query in another cell. Marimo threw an error! I was being careless and it stopped me!&lt;/p&gt;
&lt;p&gt;I ran into some issues on deploy, but I caused them myself for the most part by including the data sources as CSVs with my notebook files. I needed to peruse the documentation a bit to learn how to path my data sources correctly so I could read them into the notebook both in my local environment and on my deployed site. I chose to use their web assembly export feature. &lt;a href="https://docs.marimo.io/guides/wasm/#including-data"&gt;Here are some docs&lt;/a&gt; about including paths to data sources so hopefully my dear readers are spared some pain.&lt;/p&gt;
&lt;p&gt;I’d highly recommend checking this out if you’re on the market for a new data analysis framework and you’re a Pythonista.&lt;/p&gt;
&lt;h3 id="some-gripes"&gt;Some gripes but also some wisdom&lt;/h3&gt;
&lt;p&gt;I’ve seen many write about their exhaustion with the current GenAI bubble. I definitely share the lack of enthusiasm, and the link below leads to yet another causualty in the war on using your brain: training and mentoring. I certainly don’t want to live in a world where GenAI bots are left to train the “developers of the future”, so what are we to do? This one is long, but it’s well worth the read. The second one is me all day every day working in Elon Musk and Sam Altman’s tech industry. I don’t think Tech was ever the wonderful, meriotocratic field people made it out to be, but it sure ain’t now. - &lt;a href="https://xeiaso.net/blog/2025/rolling-ladder-behind-us/"&gt;https://xeiaso.net/blog/2025/rolling-ladder-behind-us/&lt;/a&gt; - &lt;a href="https://paddy.carvers.com/posts/2025/07/ai/"&gt;https://paddy.carvers.com/posts/2025/07/ai/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Reading about poverty is no fun, but articles like the one below I find very valuable because they treat poverty like the very solvable issue that it is. The People’s Policy Project has been doing great writing, analysis, and research on US social policy and the welfare state for years now. I’d also recommend Dr. Kathryn Edwards (@keds_economist) on most socials and her podcast, the Optimist Economy for more good economic policy talk and analysis. - &lt;a href="https://www.peoplespolicyproject.org/2019/09/16/the-us-welfare-state-cut-poverty-by-two-thirds-in-2018/"&gt;https://www.peoplespolicyproject.org/2019/09/16/the-us-welfare-state-cut-poverty-by-two-thirds-in-2018/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A UCLA professor wrote this advice for assisting people learning to use computers nearly 30 years ago, but I’ll be damned if every piece on that page doesn’t hold true. Quick and well worth your time! - &lt;a href="https://pages.gseis.ucla.edu/faculty/agre/how-to-help.html"&gt;https://pages.gseis.ucla.edu/faculty/agre/how-to-help.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="nerd-stuff"&gt;Real nerd stuff and things I want to try&lt;/h3&gt;
&lt;p&gt;I’ve been watching a lot of Kevin Powell’s videos to clean up the CSS on my site. The one below was the best explainer I’ve seen on building a sticky footer for your site. I.e. a footer that goes to the bottom of your broswers viewport even if you don’t have content that extends that far. Kevin provides a couple options depending on if you want to use flexbox, grid, or something else I think. - &lt;a href="https://www.youtube.com/watch?v=yc2olxLgKLk"&gt;https://www.youtube.com/watch?v=yc2olxLgKLk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I elected to go with the flexbox solution for my sticky footer, but the &lt;code&gt;&amp;lt;hr&amp;gt;&lt;/code&gt; dividers I used in my HTML resume disappeared. I went a googlin’ and shockingly found myself at the doorstep of Stack Overflow once again. I got not only a solution but a very cool explanation, with links and everything! I love programmers. Thanks for all the help over this years, Stack. I hope the LLMs take a bit longer to do you in. - &lt;a href="https://stackoverflow.com/questions/34365271/hr-inside-container-with-display-flex-become-corrupted"&gt;https://stackoverflow.com/questions/34365271/hr-inside-container-with-display-flex-become-corrupted&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I came across a really cool little independent research lab. One of the cofounders (at least I believe they are a cofounder) is none other than Martin Kleppmann of Designing Data Intensive Applications fame. Name of the lab is Ink &amp;amp; Switch. They wrote a conference paper on local-first software. They discuss use cases, the limits of cloud-based dominance we see now, and even walk us through a set of distributed systems algorithms called CRDTs that they think could help power these new local first softwares. The paper is pretty technical, but concrete and well-written. - &lt;a href="https://www.inkandswitch.com/essay/local-first/#towards-a-better-future"&gt;https://www.inkandswitch.com/essay/local-first/#towards-a-better-future&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I feel like I come across a ton of wacky, classic hacker-type stories where a coder just decided to poke at something to see if they could. These stories really keep the original hacker ethos alive. The one below tells a tale of a house full of nerds deciding to hack their WiFi-enabled washing machine. - &lt;a href="https://nexy.blog/2025/07/27/how-i-hacked-my-washing-machine/"&gt;https://nexy.blog/2025/07/27/how-i-hacked-my-washing-machine/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finally, I read a post about how a person’s company uses a slack channel for informal chatting, code assitance (aka rubber ducking), and other communication. They called it the “digital water cooler”. Might be something cool to try on my new team, especially with new members joining India and there being less working hour overlap. - &lt;a href="https://stephango.com/ramblings"&gt;https://stephango.com/ramblings&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="new-job"&gt;New job and the state of hiring&lt;/h3&gt;
&lt;p&gt;I am a people manager now! Senior leadership told my boss that she needed to give up all but one of the teams she was managing (at her peak, she had 3). She was a great boss (we still work fairly closely) so I was pretty bummed at first because I had grown accustomed to our team dynamic. But she put in a recommendation for me to replace her, and as we had been talking about my career path, I decided now was the time to see if people management suited me. This seemed like the right time and the right team. So far…very busy! I like the technical training, mentoring, and working across teams. Lots of meetings though…&lt;/p&gt;
&lt;p&gt;You win some, you lose some! But overall, it’s going pretty well. And my great team is still my great team.&lt;/p&gt;
&lt;p&gt;This job announcement brings me to my final two links about hiring in tech. The first details the author’s most important values and aspects of a hiring process and which interview methods and types they find most effective and appropriate for said values. I pretty much agreed with everything in here. Living coding is helpful when done during a pair program. I don’t really think it’s the best way to evaluate candidates in a job interview. I just think you get too many false negatives. And I say this as someone who has been told I interview well, technical and non-technical. I don’t mean to brag, I say that to say: I’ve figured out how to survive this system, but it’s not very good and we should do better. - &lt;a href="https://jyn.dev/an-engineers-perspective-on-hiring/"&gt;https://jyn.dev/an-engineers-perspective-on-hiring/&lt;/a&gt; - &lt;a href="https://hadid.dev/posts/living-coding/"&gt;https://hadid.dev/posts/living-coding/&lt;/a&gt;&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2025-08-10-some-links/"/><published>2025-08-10T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2025-04-05-some-links/</id><title>Some Links and Stuff (2025-04-05)</title><updated>2025-04-05T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;I’ve seen other bloggers make posts like this, so Im giving it a go. I often store links I like in my Wiki and I’ll continue to do that. But some links maybe don’t fit so neatly into my predominantly technical wiki while still warranting notice. So I’ll share some of those links here!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aeon.co/essays/what-makes-a-person-poor-and-what-should-we-do-about-it?"&gt;https://aeon.co/essays/what-makes-a-person-poor-and-what-should-we-do-about-it?&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;a bit corny at times (the &lt;em&gt;Good Will Hunting&lt;/em&gt;, come onnn), but it was pretty comprehensive and took seriously the idea that poverty is a solveable problem&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.milwaukeeindependent.com/thom-hartmann/two-santas-strategy-gop-used-economic-scam-manipulate-americans-40-years/"&gt;https://www.milwaukeeindependent.com/thom-hartmann/two-santas-strategy-gop-used-economic-scam-manipulate-americans-40-years/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;a very hilarious name for a very sinister strategy. The left is using government to give people things they need, so GOP strategists thought, what if we just made that harder and lied about it? sigh&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jvns.ca/blog/2023/08/11/some-notes-on-mastodon/"&gt;https://jvns.ca/blog/2023/08/11/some-notes-on-mastodon/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;one of my favorite bloggers, Julia Evans, reviews how she created a single-person mastodon server. she also talks about her likes and dislikes of the platform.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.dusktreader.dev/2025/03/29/self-contained-python-scripts-with-uv/"&gt;https://blog.dusktreader.dev/2025/03/29/self-contained-python-scripts-with-uv/&lt;/a&gt; - i’ve used uv a couple times now and I’m loving it. it makes managing python for projects and even one-off little experiments sooo easy.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://justingarrison.com/blog/2025-03-31-signal-domain-shortcut/"&gt;https://justingarrison.com/blog/2025-03-31-signal-domain-shortcut/&lt;/a&gt; - Justin from Fork Around and Find Out (Cohosted with Autumn Nash) explains how to use your personal domain as your signal username.&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2025-04-05-some-links/"/><published>2025-04-05T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/open-data-blues/</id><title>Open Data Blues: My Fight to Measure City Worker Salaries and Game With My Friends</title><updated>2025-02-17T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;Found myself once again wrestling with Open Baltimore Data to measure employee salaries. I consider this project a follow up to my more &lt;a href="https://citysalaries.johnwmathena.com"&gt;exploratory&lt;/a&gt; analysis of city employee salaries. Fortunately there’s been a data update and this time I’m only looking at FY2024 salaries so I can compare them to MIT’s &lt;a href="https://livingwage.mit.edu"&gt;Living Wage Calculator&lt;/a&gt; for Baltimore City in 2024. Unfortunately, there’s still no data dictionary I can find and I still have questions! Their API rate throttling is also annoying and it’s pretty much guesswork to create a URL that will filter data the way you want, but I digress. I’m also just downloading the data set directly from the Open Baltimore Data site since it’s pretty small (approx. 17k rows).&lt;/p&gt;
&lt;p&gt;I’ll list the fields provided on the &lt;a href="https://data.baltimorecity.gov/datasets/baltimore::baltimore-city-employee-salaries-3/about"&gt;city salaries&lt;/a&gt; to ground my beef. 1. &lt;code&gt;Name&lt;/code&gt;: seems straightforward 2. &lt;code&gt;Job Title&lt;/code&gt;: two for two 3. &lt;code&gt;AgencyID&lt;/code&gt;: Agency could be a bit nebulous but I think I follow 4. &lt;code&gt;AgencyName&lt;/code&gt;: Ok together with number three, makes sense 5. &lt;code&gt;HireDate&lt;/code&gt;: great wonderful love it 6. &lt;code&gt;AnnualSalary&lt;/code&gt;: is this gross? I’d assume so 7. &lt;code&gt;GrossPay&lt;/code&gt;: wait hold on 8. &lt;code&gt;FiscalYear&lt;/code&gt;: yup got that&lt;/p&gt;
&lt;p&gt;Overall, pretty good. The rub is that the two fields I really need (the two salary fields), I’m not super clear on. And the actual data fuzzies the picture even more. I’ll go into the details a little more in the actual project once I get it done (stay tuned!). But, I saw records where &lt;code&gt;AnnualSalary&lt;/code&gt; was 0 but &lt;code&gt;GrossPay&lt;/code&gt; had a value and vice-versa. If a worker receives no annual salary from an employer, why would they have any gross pay? (pay before taxes, health insuances, etc.) Conversely, if a worker received no gross pay in a fiscal year, why would they have an annual salary?&lt;/p&gt;
&lt;p&gt;Now, I believe the city is including part time, seasonal, and other non-full time works in this data set. That could explain some strange data points. For example, there are hundreds election judges who received very little gross pay, but also have no annual salary because they are not full time city workers. I also see what appears to be coaches or teachers for recreation center activities that work part-time or intermittently. Maybe there’s also records on employees taking some kind of leave of absence?&lt;/p&gt;
&lt;p&gt;Bottom line is: open data is great! But &lt;em&gt;some&lt;/em&gt; documentation would be appreciated. I see the Open Baltimore site lists some pages with data governance, annual reports, and a blog. Perhaps somewhere in those pages, I’ll find some answers.&lt;/p&gt;
&lt;p&gt;Last month, I finally released a project I’d promised some of my friends for months: a Discord bot. &lt;a href="https://github.com/jmathena/gamer-gorl-bot"&gt;gamerGorlBot&lt;/a&gt; allows to compare each other’s Steam wish lists and see what wishlisted games may be on sale. I stood up the bot pretty quickly with help from the Discord Developer documentation. I did find out after the fact that there are even easier libraries others have built to further streamline the bot building process (Discord.js and Discord.py are what I’m referencing). But no biggie, less dependencies for meeee! But only slightly, it’s still a Node/Express app.&lt;/p&gt;
&lt;p&gt;Anywho, I saw someone made a &lt;a href="https://github.com/The-HopelessGamer/steamwishlistcalculator"&gt;Steam wish list calculator&lt;/a&gt;, which I referenced to build queries to the Steam API. But otherwise, I resorted to the Steam API documentation, which you can find &lt;a href="https://steamcommunity.com/dev"&gt;here&lt;/a&gt;. From that link alone, I couldn’t really figure out how to get information about actual games. Through googling though, I managed to find &lt;a href="https://steamwebapi.azurewebsites.net/"&gt;these docs&lt;/a&gt; aptly named “Better Steam Web API Documentation”. I would highly recommend anyone wanting to play with Steam data to use the better docs. God bless programmers putting things out there for free.&lt;/p&gt;
&lt;p&gt;The way I’m writing this up makes it seem like less of a pain than it was. I’m recounting my woes diving into documentation at least a month or so after the fact, so I’m missing some of the deets. But it was a pain in the ass for sure. I’d also not done much user facing web development like that, so that was a learning curve. Aren’t they all? I deployed the bot on fly.io and let me tell you, if you have a small project definitely consider fly. Super easy and very cheap. Granted I’ve got like four users and only ever intend to have like four users, but I remember putting one of my other side projects on GCP feeling so laborious. Good experience, but I’m in AWS land everyday. I’m whittling a stick, I don’t need a chainsaw, ya know?&lt;/p&gt;
&lt;p&gt;I say all that to say…wait I forgot my closer. The throughline here is open data, open APIs, open whatever is great! We want more! But these products need a clear direction and purpose. I did manage to find and skim a Data Governance Charter I found on the open data site, which is pretty good. There’s a clear &lt;a href="https://docs.google.com/document/d/1fAAkhis1yaZVt3BsizjIhtghhLIrpGqcRQEcKWUW47g/edit?tab=t.0#heading=h.4dl6rd31mzg7"&gt;mission&lt;/a&gt; mentioned, which I love. Perusing the site more, I’ve found some surprising documents and information like some kind of Baltimore Data Academy? I wish they advertised this more. So good job, Baltimore! But do some more self-promotion.&lt;/p&gt;
&lt;p&gt;Now for Valve, I’m not sure what building and maintaining a quality API really does for their business. I’m guessing that’s why it’s so meh. Moreover, I don’t know what any of us can really do about that except build our own stuff, which clearly several people did. Good for us! I think that’s it. til next time&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/open-data-blues/"/><published>2025-02-17T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2025-02-07-my-web-detox-hopefully/</id><title>My Web Detox, hopefully</title><updated>2025-02-07T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;I’ve needed to curate my media intake more thoughtfully for awhile and the US fall election, recent inauguration, and media around them both reminded me time is of the essence. I started by getting off Twitter and moving to Bluesky. I brought most of my follows with me. And while I like all my follows, my Bluesky feed basically just looks like my Twitter feed pre-Musk, which was usually informative but often overwelming.&lt;/p&gt;
&lt;p&gt;I’ll be closely following how/if the atproto Bluesky is built on really takes off and launches a whole ecosystem of apps. As the link below shows, they’ve put a significant amount of effort into giving would-be developers some docs on how to start building. Seems like their heart is in the right, but it will be interesting to see where they are in a year.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://atproto.com/articles/atproto-for-distsys-engineers"&gt;https://atproto.com/articles/atproto-for-distsys-engineers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I also started using an RSS reader to follow my favorite bloggers, magazines, and other outlets. I even have the Associated Press in there. I use &lt;a href="https://inoreader.com"&gt;Inoreader&lt;/a&gt; for those who want to know. I’m currently on the free tier, which I can stay at until I reach 150 feeds and I’m almost half way there (73 at the time of writing). It’s refreshing to exert such control over what I read and follow on the web. And I feel like I’m seeing such random, cool stuff! I added Hacker News and I think I saw the link below there. This is a site where someone explains and gives examples of every HTML element currently in use.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://iamwillwang.com/dollar/every-html-element/"&gt;https://iamwillwang.com/dollar/every-html-element/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Curating my feed more towards my nerdy software interests lengthened my already overflowing potential projects list. I’ve also felt the urge to tinker with my site more and forunately have carried out some updates like: - adding logos for the tools used in my portfolio projects - fixing an error in my hugo build by straightening out the template structure - surfacing my rss feeds for my blogs and poems - updating my resume to reflect my promotion (I’m a senior swe now, baby!)&lt;/p&gt;
&lt;p&gt;But all that of course has not stopped me from wanting more. Nor should it! I love this stuff. And I hope to one day be running this site on a server and hardware that I own; ideally solar powered, but one step at a time. Mira Welner was nice enough to write a very accessible post on standing up an Apache server using a Raspbery Pi. I hope to one day go through it and scratch another project off my list.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mirawelner.com/posts/website_howto.html#backups"&gt;https://mirawelner.com/posts/website_howto.html#backups&lt;/a&gt;&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2025-02-07-my-web-detox-hopefully/"/><published>2025-02-07T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2024-11-01-digital-packrat/</id><title>On Digital Packrats and Why Open Source Rules</title><updated>2024-11-01T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;In my last post I talked about how exciting and relatively seamless my migration to Hugo was. Wellllll, it broke in prod. NOOO! But I had an idea. I posted on the Hugo forums for help! I posted late on a Friday night; maybe around 8pm or 8:30 (after checking the post it was just before 8pm) but after an hour or a little less, a very nice person named Joe cloned my website repo and started debugging for me.&lt;/p&gt;
&lt;p&gt;He commented that the hugo build process is indeed building all the expected files. He also recommended I start using relative links throughout my site, which I obliged. We then started going back forth about the custom domain I’m using for my site and how that was set up.&lt;/p&gt;
&lt;p&gt;The issue that caused me to post was that all my pages were loading except the &lt;code&gt;droppin-dimes&lt;/code&gt; part of the site. Those pages displayed 404 not found errors through GitHub Pages (where I host this site), which we found odd since we confirmed our build process was in fact building all the necessary html files. Eventually, I told Joe that I migrated &lt;code&gt;droppin-dimes&lt;/code&gt; and &lt;code&gt;the-strays&lt;/code&gt; from their own repos.&lt;/p&gt;
&lt;p&gt;Then he discovered that the original &lt;code&gt;droppin-dimes&lt;/code&gt; repo was still deployed a page to johnwmathena.com/droppin-dimes, which is the address I attempted to use in my new monorepo. Joe summarized the issue in his last reply to the post, which I will quote below:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;That was a good learning experience.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ol type="1"&gt;
&lt;li&gt;If you create a GitHub repository for a personal GitHub Pages site…&lt;code&gt;https://github.com/user/user.github.io&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ol start="2" type="1"&gt;
&lt;li&gt;And then configure that repository with a custom domain name…&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ol start="3" type="1"&gt;
&lt;li&gt;And the published personal GitHub Pages site has a subdirectory named “foo”…&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ol start="4" type="1"&gt;
&lt;li&gt;You will have a conflict if you have a repository named “foo”&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;https://github.com/user/foo&lt;/code&gt; So, in your case, we could have renamed the droppin-dimes directory to dropping-dimes and it would have worked fine (no conflict).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’ll add the link to the post at the end for the record but there’s two main takeaways here, at least for me. 1) Don’t be a digital packrat. Delete old stuff! If I would’ve just deleted my old repos once I moved all my old code, this probably would not have happened. 2) Open source rules! Having all my code publically available allowed a fellow programmer to not only see and poke at the issue in the initial codebase, but also check all my other work to see if something in another code repository was mucking things up (which was the case here!). This would have been a lot harder if I locked my code behind paywalls.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://discourse.gohugo.io/t/personal-github-pages-site-with-custom-domain-conflicts-with-another-repo/52238/11"&gt;https://discourse.gohugo.io/t/personal-github-pages-site-with-custom-domain-conflicts-with-another-repo/52238/11&lt;/a&gt;&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2024-11-01-digital-packrat/"/><published>2024-11-01T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2024-10-14-migrated-twice/</id><title>Hugo is so nice, I migrated twice</title><updated>2024-10-14T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;After changing my blog and poetry site build systems to Hugo, I thought why not move everything to Hugo?&lt;/p&gt;
&lt;p&gt;I was recently updating my main website, which lives in its own repo. With my repos for blogging and poetry, that brings us to three repos with pretty much the same CSS, headers, footers, and all that jazz.&lt;/p&gt;
&lt;p&gt;I’m learning Go for a different side project so I figured why not go full in on Hugo. You don’t need all that much Go knowledge to build a relatively simple site like mine in Hugo, but it doesn’t hurt. And the nice thing about static site generators is that, well, they generate static files for your site. So if I get tired of Hugo, I can take my generated HTML files and go somewhere else.&lt;/p&gt;
&lt;p&gt;I definitely had to obtain a deeper understanding of Hugo templates to make this monorepo work compared to my other two Hugo sites, but I chunked the migration process pretty well so it didn’t seem insurmountable. I started with the main pages on my personal site: - resume - portfolio - wiki - blogs&lt;/p&gt;
&lt;h3 id="resume"&gt;Resume&lt;/h3&gt;
&lt;p&gt;My resume was pretty easy. Once I figured out what formatting I need to to keep in the Sass file and what I could accomplish in Markdown, it was pretty smooth sailing.&lt;/p&gt;
&lt;h3 id="portfolio"&gt;Portfolio&lt;/h3&gt;
&lt;p&gt;The portfolio was a bit trickier because I realized I needed some way to apply the Sass across all the projects I wanted to showcase. But the &lt;code&gt;range&lt;/code&gt; function in Hugo templates ended up coming in handy.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/jmathena1/jmathena1.github.io/blob/a6ecb210734912a64e5881f0b25ea916f01664dd/layouts/portfolio/list.html#L3-L21"&gt;https://github.com/jmathena1/jmathena1.github.io/blob/a6ecb210734912a64e5881f0b25ea916f01664dd/layouts/portfolio/list.html#L3-L21&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I maintained the &lt;code&gt;details&lt;/code&gt; and &lt;code&gt;summary&lt;/code&gt; html tags from my original site and added parameters to the content files. That way I could &lt;code&gt;range&lt;/code&gt; through different types of projects and display them together. &lt;code&gt;.Site.RegularPages&lt;/code&gt; specifies that you want to look at content files that match the directory of the layout file. So here, I’m looping through all the content files in the &lt;code&gt;portfolio&lt;/code&gt; content directory and displaying a link to that file if the &lt;code&gt;portfolioType&lt;/code&gt; is &lt;code&gt;academic&lt;/code&gt;. &lt;code&gt;details&lt;/code&gt; and &lt;code&gt;summary&lt;/code&gt; are super useful when you want to display different categories of content to users, but keep the interface clean and tidy.&lt;/p&gt;
&lt;h3 id="wiki"&gt;Wiki&lt;/h3&gt;
&lt;p&gt;I thought migrating my digital garden wiki would be easy, but I couldn’t figure out how to distinguish between what I call parent and child pages. Basically, I categorize my wiki topics and nest sub-topics within the main ones that appear on the &lt;a href="/wiki-pages"&gt;home garden&lt;/a&gt; page. I again turned to custom parameters on the content files, this one is &lt;code&gt;wikiType&lt;/code&gt;. I applied &lt;code&gt;range&lt;/code&gt; to the wiki directory and only display wiki pages with a &lt;code&gt;wikiType&lt;/code&gt; of &lt;code&gt;parent&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/jmathena1/jmathena1.github.io/blob/a6ecb210734912a64e5881f0b25ea916f01664dd/layouts/wiki-pages/list.html#L8-L17"&gt;https://github.com/jmathena1/jmathena1.github.io/blob/a6ecb210734912a64e5881f0b25ea916f01664dd/layouts/wiki-pages/list.html#L8-L17&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="blogs"&gt;Blogs&lt;/h3&gt;
&lt;p&gt;Since I wrote the blogs using Hugo already, this one was pretty straightforward. I wrangled with the Sass for awhile because I wrote the blogs as standalone sites and now they existed as part of a larger site with its own header and everything.&lt;/p&gt;
&lt;p&gt;I feel like I’ve re-architected these sites a million times, but I think that’s the point! Who knows how long I’ll stick with Hugo, but I’m pretty satisfied with the end result.&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2024-10-14-migrated-twice/"/><published>2024-10-14T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2024-03-16-same-blog-different-build/</id><title>Same Blog, Different Build. On to Hugo!</title><updated>2024-03-16T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;I migrated my blog to &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;! I’ve been using &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; to build my blogging site for the past couple years but I read that it is no longer actively supported. Several bloggers I follow have made the switch to Hugo and claim the build speed is a lot faster. Though that’s not really a concern for me at the moment, if I keep publishing here I’ll eventually run into those problems.&lt;/p&gt;
&lt;p&gt;The biggest hurdle was figuring out how Hugo does templating differently than Jekyll. Once I figured that out, it was pretty smooth sailing. Hugo actually has a specific Jekyll import function you can use.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;hugo import jekyll &amp;lt;path-to-old-blog&amp;gt; &amp;lt;path-to-new-blog&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That brought over all four of my posts and my assets I think. I’ll post the links I found essential to getting set up.&lt;/p&gt;
&lt;ol type="1"&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://gohugo.io/getting-started/quick-start/"&gt;Hugo Quickstart page&lt;/a&gt; &amp;gt; - Gets you a first post and basic configurations to see your site run in browser locally&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://gohugo.io/templates/lookup-order/"&gt;Hugo template lookup order reference&lt;/a&gt; &amp;gt; - Shows you how Hugo looks through your directory for templates depending on the type of page you’re creating&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cloudcannon.com/tutorials/hugo-beginner-tutorial/"&gt;cloudcannon Hugo tutorial&lt;/a&gt; &amp;gt; - one of the first results when I googled for tutorials. I found it helpful for organizing my templates. My site is a bit simpler but helped illustrate how to use the template lookup order and create some good templates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://chenhuijing.com/blog/migrating-from-jekyll-to-hugo/"&gt;Chen Hui Jing’s Jekyll to Hugo Migration post&lt;/a&gt; &amp;gt; - Didn’t read the whole thing but was very in depth and would probably be best for those migrating large blogs to Hugo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you read through all that, you’ll be in good shape to migrate a blog or set up your own honestly. Happy blogging!&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2024-03-16-same-blog-different-build/"/><published>2024-03-16T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2024-02-25-musings-on-ai-pt-2/</id><title>Musings on AI pt 2</title><updated>2024-02-25T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;Though I don’t feel anything from pt 1 was incorrect, I wanted lend a bit more credulity to AI and Machine Learning work. I’m gonna reference mostly work and posts from a machine learning engineer and tech writer I follow, Vicki Boykis. She has a great post from Feb 2023 on Chat GPT titled &lt;a href="https://vickiboykis.com/2023/02/26/what-should-you-use-chatgpt-for"&gt;“What should you use Chat GPT for?”&lt;/a&gt;. Part of her assessment from then: &amp;gt; “So, for myself, my rules for engaging with Chat GPT are to give it small, inconsequential things it can iterate well on and that I have the ability to check…”&lt;/p&gt;
&lt;p&gt;I think I saw Kareem Carr say something similar on Twitter (also a great follow if you’re not already).&lt;/p&gt;
&lt;p&gt;Seems a good assessment. And this coming from someone with a lot of experience with software as a whole and machine learning in particular. Now I’ve also seen some (mostly on Twitter though again) compare the advent of LLM based coding tools to compilers. That doesn’t quite sit right with me. I don’t have a CS degree nor have I event taken a CS class, but I’ve been programming for the better part of a decade (professionally for about five years) and I can read so I’m gonna try to break down why. Maybe I’ll look back on this series in 10 years and cringe but whatever at least I tried.&lt;/p&gt;
&lt;p&gt;Compilers essentially translate code written in one language into another language. This allows us to write in more human readable (high level) languages like Java rather than machine code (literal ones and zeroes corresponding to circuits and gates on the hardware).&lt;/p&gt;
&lt;p&gt;Since computer scientists built the first compilers in the mid 20th century, we’ve gotten better and better at allowing software developers to write programs quickly and without caring so much the hardware. Whether this is good or bad depends on who you ask. I think lower barriers to pushing an app out the door has definitely led to some bloated software. When programmers don’t have to care about optmizing how their programs use hardware resources, they won’t. This is something I’m trying to care more about as I grow as a developer and programmer.&lt;/p&gt;
&lt;p&gt;Enter AI that can write apps. When you can literally just type “build me a to do list app” and know next to nothing about programming or software development, and have ChatGPT give you something that may actually run, that’s not really programming. When you open a program written in Python and it gets compiled into bytecode and interpreted into machine code, you are utilizing explicit processes written by another human. When you open a program you got from ChatGPT, you’re getting a best guess. ChatGPT is troving the mountains of data on existing computer code it’s seen and trying to throw something back at you that seems to match what you said.&lt;/p&gt;
&lt;p&gt;It’s very cool and can be accurate! But this is not what happens when you write computer code. Computers, for better or worse, do exactly what you tell them. You ask a computer to “Print” instead of “print”, not gonna run. You say a variable is equal to “one” instead of 1 (depending on the language), doesn’t know what you’re talking about. I’m sure every programmer will wax poetic about times like these. But what computers lack in forgiveness, they make up for in precision (usually).&lt;/p&gt;
&lt;p&gt;I could go on, but yeah these AI tools are different than compilers. I’m not trying to gatekeep software and programming by any means. And I also know that creating efficient, quality software quickly is a real value-add and something worth pursuing. But I think you need trained professionals to do that. These AI code assistant tools could help programmers reference unfamiliar languages and frameworks faster and maybe do some auto-completion (though these kinds of features are not new to programmers).&lt;/p&gt;
&lt;p&gt;There’s certainly room for improvement in modern software development, but I’m not convinced unleashing the AI tools will fix the current problems in the field. I’m worried they’ll make things worse.&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2024-02-25-musings-on-ai-pt-2/"/><published>2024-02-25T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2024-02-23-musings-on-ai/</id><title>Musings on AI</title><updated>2024-02-23T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;I’m trying to get in the habit of blogging a bit more frequently so this will seem less collected than other posts.&lt;/p&gt;
&lt;p&gt;I’ve largely avoided tinkering too much with the various generative AI tools. Mostly because I have little patience for signing up for new things and I’ve largely found my current methods of looking things up and getting things done adequate (maybe that’s my age showing). On top of that, especially for the latest OpenAI product &lt;a href="https://openai.com/sora"&gt;Sora&lt;/a&gt;, I truly don’t understand why you would want to use this. If you’re a creative person who has a vision you want to bring to life, why wouldn’t you want to grab a camera and start?&lt;/p&gt;
&lt;p&gt;Some use cases I can sort of understand. I’ve asked ChatGPT to help me write a function I knew how to write in Python, but in JavaScript. But now that I’m pretty comfortable in JavaScript and TypeScript I just read the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference"&gt;Mozilla JavaScript docs&lt;/a&gt; or go to StackOverflow. Hopefully StackOverflow doesn’t get AI trained out of existence by these LLMs. A mentor at my company explained how he (or someone on his team, I can’t remember) used Chat GPT to build a Slack integration allowing authorized users to build an AWS EC2 instance with certain parameters for quick prototyping. But I mean, you can build AWS resources from the command line with the AWS CLI installed and you can set up a Sandbox to play around with prototypes.&lt;/p&gt;
&lt;p&gt;The slack integration is neat. Asking ChatGPT to build you a calendar app and seeing it return something that’s not half bad is neat. And that’s where my impression of these tools ends. Most people trying to learn and practice a skill (least of all programmers), need reps &lt;em&gt;as well as&lt;/em&gt; practice looking at references for help. Those references could be people or documents. These tools at times provide references for the answers they provide, but as a programmer I frankly don’t find what they provide that helpful or &lt;strong&gt;fun&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;And recently, also at work, leadership acquired some licenses to use Amazon’s new code assistant and chatbot &lt;a href="https://aws.amazon.com/q/"&gt;Q&lt;/a&gt;. No one’s been pushing developers to use Q very hard, but I can very easily see a future where we are forced or &lt;em&gt;strongly encouraged&lt;/em&gt; to use tools like Q to boost productivity.&lt;/p&gt;
&lt;p&gt;Now we’re programmers. Increasing productivity is kind of what we are here for. But what I don’t want is to be feeding training data 40 hours a week to a black box that’s simply trying to feed its bottom line. That’s what all these big companies who’ve developed LLMs are doing. Even OpenAI, which started as a nonprofit out to save humanity from the potentially evil AI they helped create, added a for profit arm. The nonprofit still runs the company, but we know where the money will be coming from.&lt;/p&gt;
&lt;p&gt;All this money coming from tools that were developed by scraping data produced by countless hours of free labor (see Wikipedia, Reddit, GitHub, STACK OVERFLOW!!!). OpenAI and their ilk trained their machines on some of the broadest (and mostly accurate) collections of human knowledge ever created, and now they’re gonna sell that knowledge back to us? And help companies the world over automate not just the jobs of the developers who build these machines, but lawyers, teachers, truck drivers, whatever? Yeah no I don’t like this.&lt;/p&gt;
&lt;p&gt;Machine learning (interdisciplinary field where these AI tools derive much of their theoretical basis) has some truly spectactular applications for simulation and modeling in fields like drug discovery and genetics. Fields where there are so many variables and interactions to track that computers supplment human cognition and ingenuity in a brilliant way. That work is great! Stealing blog posts from everyone to let your bot write some kid’s term paper is not so great!&lt;/p&gt;
&lt;p&gt;And finally, I’d love to see a world where we’ve automated a lot of the boring work we humans don’t want to do. But I don’t think we’re going to get there with these current companies and their current structures. And they’re trying to automate fun stuff! Creative writing, making funny videos, bad poetry (trust me, I know), these things are fun! Don’t let us programmers take that from you!&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2024-02-23-musings-on-ai/"/><published>2024-02-23T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2023-07-10-the-bear-shows-us-how-to-grow/</id><title>The Bear show us how to grow</title><updated>2023-07-10T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;(&lt;em&gt;Minor spoilers for The Bear season 2 lie ahead&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Episode four of season two of &lt;a href="https://en.wikipedia.org/wiki/The_Bear_(TV_series)#Season_2_(2023)"&gt;The Bear&lt;/a&gt; takes a slight detour from a Chicago family restaurant aiming to reinvent itself to a high-end kitchen in the Netherlands. The Chicago shop’s head chefs send their baker, Marcus, to Copenhagen to learn some new dishes from a pastry chef named Luca.&lt;/p&gt;
&lt;p&gt;Bright and early just before 5 am after crossing an ocean, Marcus meets Luca in the kitchen and hits the ground running. The show immediately portrays Luca as a prototypical upscale chef; straight to the point in his instructions with high expectations. But what surprises me as Marcus continues to train under him is his patience and calm.&lt;/p&gt;
&lt;p&gt;Now Marcus is no slouch. Last season, he established himself as one of the most creative and hardworking talents in the restaurant. He kept meticulous notes and drawings of pastry ideas in his journal while stocking the whole kitchen with loaves of bread and rolls needed for their homestyle dishes. He’s demonstrated he’s more than capable of excelling in the hyper-competitive dining industry. But just because it’s clear you have what it takes doesn’t mean anyone - especially a person with power, experience to share, or both - will give you the time and space it takes to realize your potential. And yet Luca does!&lt;/p&gt;
&lt;p&gt;He never yells at Marcus when he stumbles. He doesn’t accost him with petty or offensive insults and slurs like JK Simmons in Whiplash. He’s stern and consistent while also kind and helpful (and a bit goofy). Finally the two open up to each other in one of my favorite scenes of television in recent memory.&lt;/p&gt;
&lt;p&gt;They ask each other how they found themselves cutting and weighing chunks of raw dough together at 5 in the morning. Luca shares that he ended up as a dishwasher for misbehaving when he was young and fell in love with working in kitchens. He never looked back and he always felt like he was the best wherever he went, until he got a job with this other young chef. It’s heavily implied that this other young chef is Carmy (arguably the main character of the show and head of the restaurant back in Chicago) but I digress. Luca admits this other chef was the best he’d ever seen. Better than Luca could ever hope to be. And Luca ultimately decided the best thing he could do for himself was try to keep up.&lt;/p&gt;
&lt;p&gt;“And did you get better?” Marcus asks.&lt;br /&gt;
“Better than I ever thought I could be.”&lt;/p&gt;
&lt;p&gt;I’m paraphrasing here because I’m too lazy to look up the actual quote. Marcus then jokingly refers to Luca as the Scotty Pippen to this chef’s Michael Jordan. “Still a hall of famer!” Marcus’ path to the kitchen also took some twists and turns. He was a D3 college football player and eventually found his way into kitchens needing to make money to support his sick mother. He started at a McDonald’s and ended up at his current restaurant because he was in there for lunch a lot and the previous owner wanted to open a bakery.&lt;/p&gt;
&lt;p&gt;I adored watching a black man from Chicago live out his dreams. Marcus went on a whole journey centered on him and his quest to hone his craft and find his beauty. It was joyful. We don’t see enough of it. This episode serves as a blueprint and proof-of-concept for TV to give us more character journeys like this.&lt;/p&gt;
&lt;p&gt;I also love that this episode shows us how driven, highly skilled people can achieve and learn so much from each other without the bitterness and vitriol we’re bred to believe needs to be part of the process. We don’t have to tear each other down to build ourselves up. We don’t have to sabotage those who are or may become better than us at one time or another. We all learn and grow best when we give others the space, time, and tools they need to make the best of themselves.&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2023-07-10-the-bear-shows-us-how-to-grow/"/><published>2023-07-10T00:00:00+00:00</published></entry><entry><id>https://www.johnwmathena.com/the-strays/2022-04-14-please-dont-make-me-kill/</id><title>Please don't make me kill</title><updated>2022-04-14T00:00:00+00:00</updated><author><name>John Mathena</name></author><content type="html">&lt;p&gt;A &lt;a href="https://www.wsj.com/articles/student-debt-relief-payment-pause-free-colege-military-navy-recruitment-education-11649800856"&gt;WSJ op-ed&lt;/a&gt; made its rounds through my little corner of lefty twitter. I’m not a subscriber, so I did not read it. Take this post with however big a grain of salt you feel appropriate.&lt;/p&gt;
&lt;p&gt;The op-ed title and subtitle read: “&lt;strong&gt;An Unintended Consequence of Student-Debt Relief&lt;/strong&gt; - &lt;em&gt;Will young Americans volunteer for the armed forces in adequate numbers?&lt;/em&gt;”&lt;/p&gt;
&lt;p&gt;I’m pretty disappointed Chrome incognito mode couldn’t bust me into this article. I considered many career paths in and around the US Military to help pay off my student loan debt. I’m curious exactly how common a path this is.&lt;/p&gt;
&lt;p&gt;My immediate guess is: pretty common. Americans valorize going into military or police service. College students probably see loan forgiveness on top of additional respect as a win-win. I certainly did. But after working in and around Intel and Law Enforcement, I realized two things.&lt;/p&gt;
&lt;ol type="1"&gt;
&lt;li&gt;This is a terrible career path for me.&lt;/li&gt;
&lt;li&gt;I convinced myself to want this career path because of the social benefits and the loan forgiveness.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Number one deserves its own posts - or series, and I’m certainly not the first person to critique the US Military - but two I can get into.&lt;/p&gt;
&lt;p&gt;Both my parents are lifelong public servants (my dad a civil engineer and my mom a journalist, teacher, and now principal). I grew up dreaming of serving my community. I did well in language classes through grade school and had an ‘analytical’ mind. Post 9/11, young nerds who loved languages and wanted to serve found a very well lit path to Uncle Sam’s HR department. But there are lots of jobs where you serve your people and don’t involve volunteering to kill or be killed (or support those that do).&lt;/p&gt;
&lt;p&gt;Many of those jobs pay shit (read: teaching, social work, nursing…and many many many more). And many don’t carry the glorious weight of having ‘served’, though many damn well should. I’m not bashing individual cops or soldiers. I’ve worked with many and many earnestly try to do good work. But without going into number one, as I said I wouldn’t, both jobs require you be ready to end another person’s life as part of your job. That’s a serious fucking act. And we should not be lamenting this country taking a baby step in creating a more just education system because some kids might not be pushed toward killing in order to finance their schooling.&lt;/p&gt;
</content><link href="https://www.johnwmathena.com/the-strays/2022-04-14-please-dont-make-me-kill/"/><published>2022-04-14T00:00:00+00:00</published></entry></feed>