Blog

Full Blog Posts

341 posts latest post 2026-05-11
Publishing rhythm
Feb 2026 | 6 posts

Refactoring one line links into wikilinks

Previously I had setup a feature of my website to expand one line links into a card. This was not a standard, even to the point that some formatters wrap the links with , thus breaking my custom plugin. Moving to the wikilink standard will allow my markdown posts to work accross more site builders without custom integrations. Expand One Line Links [1] What is a wikilink # [2] Wikilinks are standard to a lot of wikis written in markdown. markdown-it-wikilinks [3] The wikilink syntax is a slug wrapped in double square brackets. [[ slug ]] Marksman lsp will even autocomplete these for you, its pretty sweet. Note I recently implemented hover for wikilinks and and am pretty stoked about the result. Check this one out sick wikilink hover [4]. Vim Quickfix # [5] You could use vimgrep to fill your quickfix list will all of the one line links but I am less familiar with vimgrep and kept missing posts for some reason, I think it was something in my file glob missing some directori...
2 min read

about this site

I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I were laid off. The company I was working for at the time did it’s first major downsizing in history sending many really good engineers out to look for new opportunities in a world flooded with many in the same situation. This was very similar to what happened to the tech industry in 2024. This was very similar to what happened to the tech industry in 2024. See Waylon Walker [1] for more about me. What is this site? # [2] - It’s a blog - Digital Garden - Learn in public - TIL - portfolio - my personal corner of the internet It’s [NOT]{.text-red-500 .text-6xl .font-bold} Perfect # [3] - There will be mistakes - I will learn - Grammar will be fine, but never perfect - Code will run on my machine, but not guaranteed to be perfect - There will be days when the whole site is broken It started as a blog # [4] This site...
4 min read

sick wikilink hover

Today I set up some sick wikilink hover effects using tailwind see A Case For Tailwindcss [1]. When you hover over them they show an image preview of the link that you are going to. I cant find where I have seen this but it comes from some docs sites. I’ll finish this article later, just excited to see it up. References: [1]: /a-case-for-tailwindcss/
1 min read

markata

This post is a work in progress. Markata is the static site generator that I created to build my website about this site [1]. I built it for me and I enjoy using it. I know everying it can do and I can extend it to do more easily. I have set it up for some friends to also use it and am proud that it helps them publish their content. It’s a meme to create your own static site generator to make your website. Yes its funny, I don’t recommend it if your not ready for the level of work that comes with it, but at the end of the day it’s very rewarding and a great way to learn. Static Sites were all the rage # [2] JAMStack was 🔥 Gatsby and Next.js hit the scene as the next generation of static site builders and were getting big around the time I started building my site in 2017. They were based on react. I dove into react and learned it enough to build my website, but I really lacked the depth of knowledge in the js ecosystem to really work on it effectively. For instance when it got ...

my linked in work history

My linked in work history is empty. I made up a position about content developer that tracks how long I’ve been blogging. I think i did this because LinkedIn requires it. Either way this is public knowledge and fine sharing. Social Engineering # [1] If you have taken any security class for your job seriously you have already been told not to share your work with most companies to the public, this is private information that only opens you up for social engineering attacks against that company. I care about privacy and security # [2] I care about the security of these companies I work for and their reputation, so I refuse to publically share it. Need to know # [3] If somehow you need to know where I work it’s my choice to tell you. I don’t need to advertise to every social engineering hacker where I work on the platform that they go to get that information from. References: [1]: #social-engineering [2]: #i-care-about-privacy-and-security [3]: #need-to-know

Your LinkedIn is Garbage

Your linkedin link sits at the top of your resume, its one of the first things I see when I open your resume, but yet it gives me no more information that the damn resume you sent me. Save that space on your resume for something useful. So you want that /in/me on your resume # [1] Fine if you want it on your resume make it actually useful for someone reading your resume. Actually post something # [2] If I am reading resume’s and I actually take the time to look at your linkedin I want to see you post something. Take a side, make an opinion and post it. Learn something new, make a post about it. If you have a blog and you make a good post share it there. Your work history belongs on your resume # [3] Any security 101 tells you that you should not share your work history on linked in. You should not share photos of you at your workplace that include sensitive information such as your badge. Your work history on LinkedIn is for hackers to steal and use for social engineering. ...

One Day Build - Play Outside

Inspired by Adam Savage and his One Day builds on youtube. I often build things, and want to make them generally useful for others and over configure out of the gate. This project is purely for me inspired by a need I have. - play-outside [1] !How-To # [2] This post will not directly show how to make a weather app, but document the process that I went through to make mine. It will show the tools that I used to make it, and the final result. The Situation # [3] It often goes in our house ask dad while he is busy and he will probably just say yes without thinking much. This happens a lot when kids ask to go outside. I think sure, go for it, you will figure it out. Then my wife walks in and asks where they are, followed by, did you even check the weather, its -11 degrees outside right now. I need a tool for this decision making process Lungs # [4] You we have a family of not the most heathly lungs, we have my wife with lung cancer, one lung missing, and kids with asthma. We nee...
6 min read

feeds

I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in your rss reader thats what this is for. This one might feel like it has some extra noise with multiple posts per day, including starts, and instagram style posts, for a bit less look at the [[ main ]] feed. TLDR If you are looking for everything look here <https://waylonwalker.com/archive/rss.xml> All # [1] This is a feed of everything that I have published on my site to date including Posts tagged: blog [2], [[ til ]], Thoughts [3], [[ stars ]], Posts tagged: shots [4], [[ pings ]]. - web [5] - rss [6] Main # [7] Like the All feed, but drops the shots (instagram style posts) and stars (github stars). - web [8] - rss [9] til - daily(ish) # [10] think gist with a tweet This is a feed of all of my TIL’s (Today I Learned). These are generally short single topic posts that I write up quickly. They are generally things t...

Thoughts

These are generally my thoughts on a web page or some sort of url, except a rare few don’t have a link. These are dual published off of my thoughts.waylonwalker.com [1] site. It’s a fully dynamically rendered site 2000’s style. Posts are stored in a database and instantly available. Almost all of the posts were written in a small <textarea> field within a chrome extension that I built for it. These posts are intended to in two ways. One, link building for the author. I hope that I give the people helping me out along the way just a little bit of a boost. Two, they serve as a permanant commented bookmark for me to search, and come back to later when I have forgotten where I have seen something. - web [2] - rss [3] All thoughts posts cross posted to my site are prefixed with a thought balloon 💭. The tech # [4] Since this blog is mostly a tech blog about software development, and my journey as I learn, lets talk tech. - python - fastapi [5] - htmx [6] - sqlite - docker - ht...

kubernetes 6 months in

I stumbled into kubernetes December 2023 when I was looking for a better way to self host [1] applications. I was looking for something that didn’t require logging into a server and building and deploying like a cave man. I wanted a smoother experience than docker compose was giving me. https://waylonwalker.com/looking-for-a-heroku-replacement/ This post turned into a list of tools that I have adopted into my k8s workflow, and plan to keep. enjoy. Kompose # [2] [3] Kompose is a great tool for gettting going and converting your docker-compose to kubernetes manifests or helm templates. It was a great tool for me to get started with, but I was afraid that it was hindering me learning more and just blindly using its output so I have tried to use it less and less. I’m now not solely leaning on it, but using it to get out quick POCs with low friction. Kompose really helped me go 0 to 60 and get right into kubernetes with my existing docker compose files and very little change. I fou...

poc is not product

A poc is not a product. I started focais, not in a rush, but as something that I already had a POC for and thought it would be easy. I wanted to build tools to make creating blog posts like this one easier. I stared with shots a tool that takes screenshots of websites. POC (proof of concept) # [1] For the poc, I made a single fastapi [2] endpoint that takes a url and returns a screenshot of the page. It converts the url into a key that I can lookup to see if I have the shot, if I don’t I go get it. With the open source libraries out there, this is not too hard of a task. Progress Thus Far # [3] - /shot But this wasn’t enough All it does so far for this first tool is take screenshots of websites, and give you a hosted image. Users # [4] To bring in users, I need to create a signup flow, with a database to store users, login, logout, and email recovery. I’ve never had to use an email service before that wasn’t already mandated by a company or an iternal smtp server. After some...

thoughts on unit tests

[1] Your browser does not support the audio element. Theo’s response puts a lot of my feelings about unit testing into words. Many of us have grown up in this world preaching unit testing. We often hear these statements “Everything must be unit tested, tests make code more maintainable.” In reality when we are not writing complex low level code unit tests are probably the wrong approach. [2] Most of us are assemblers # [3] So much of software engineering is assembling existing well tested code. Crud applications, UI, Data Pipelines, building on top of battle tested code. Manufacturing Analogy - Unit Testing # [4] This kind of reminds me of Manufacturing. Individual components are QA tested with tests that look more like unit test. Parts like bearings, pistons, shafts, valves, they are all tested against sophisticated statistics of sample measurements. This is quite similar to unit testing. [5] You see measuring the individual sizes of these components does not guarantee ...
5 min read

Looking for a Heroku replacement, What I found was shocking!

Your browser does not support the audio element. I’ve long hosted my personal blog as a static site on waylonwalker.com. It’s all markdown, converted to html [1], and shipped as is. It’s been great, I’ve moved it from GitHub Pages, to Netlify, tried Vercel for a minute, and have landed on Cloudflare Pages. Each migration has not really been that hard, it’s just pointing ci to a different host after the site has built. [2] What about server side # [3] Now the part that I have struggled with is how to cheaply host a server rendered application that can just live on forever without me paying for it. This is a harder problem as it costs more to keep servers spinning, memory, and disk all ready for you to use at a moments notice. Honestly # [4] I never really deployed anything that useful on heroku, but it seems like the klenex of the bunch that’s why they are in the title. I’ve moved between digital ocean and fly.io, and have had some great experiences with both. I just don’t want...

why-is-postgres-default

Serious question. No one ever got fired for choosing PostgreSQL # [1] But, why. It’s the most loved db, right? Right? Maybe it’s time to rethink it. Don’t get me wrong, if I need a relational db as a service, PostgreSQL is going to be my first choice, but why do I need to run a separate application for it? Tutorials use sqlite # [2] Why is that? Because there is nothing else to stand up. Nothing else to maintain. And you probably already have it installed on just about anything that has a battery. SQLite runs in memory # [3] Don’t need, or maybe don’t want to persist state. Run it in memory. This is a nice feature for running tests. Less exposure # [4] SQLite is a file on your filesystem. It’s not a web service. It’s not a cloud service. Not that postgres is insecure, but it is one more endpoint that you have to think about securing. this means that is probably also cheaper 🤑 SQLite is easy to replicate # [5] Want to run your new feature with prod data? Pull a replica or...

A Case For Tailwindcss

I was watching @theprimeagen recently and I think he sold me on using tailwindcss. The thing about tailwind is that it is not a big component library, it’s a set of css classes mapped to a few (usually one) style. All css classes are shitty, so you might as well use someone else’s shitty css classes on all your projects rather than thinking you’re being smart with a new set of classes that you will hate in 6 months when you come back to the project. roughly quoted from memory of @theprimeagen It’s tiny # [1] So unlike big component libraries like tailwind, it comes with a cli that that it uses to create the final css file. It is able to treeshake out all the tailwind classes that you are not using and only ship the ones that you are using. It’s hard to clash # [2] Since the classes are so small and single purpose it’s hard to end up with something like .card in two places that mean different things causing you to duplicate most of that css anyways so that the whole design doesn...

Make the easy things easy

It’s so easy to get out of rhythm, get busy, and drop the ball on some things that you really want to do or should do. This blog is a good example. I took some time off for some family reasons, but have taken a long time to get back to it simply because I am out of rhythm. As I am trying to get back into the rhythm there is some tooling that I have set up for it that I completely forgot about that feel good to use again. Repetitive Tasks # [1] Simple Repetitive Tasks that I have to do often can just feel soul crushing, and one main thing that got me interested in programming. AI tools are becoming more and more useful at solving these problems. For instance code generation tools like co-pilot or codeium are really good at boilerplate and pattern repetition. Things that used to be a few vim macros is now just banging on tab. I often look for setting up templates or some sort of snippet to replace a big chunk of boilerplate that I know I will need over and over. timebox # [2] Do...

Underground Bases with Wyatt

Playing minecraft with Wyatt today he started a server all on his own and had me join. All vanilla, only one rule, underground bases. [1] I spawned into the server and it was already night time. I gathered up some wood on my way down a tree, and was attacked by zombies before I could get any tools, so I ran up another tree and crafted a crafting table. [2] Now to follow the rules, it’s time to head underground to build my base. [3] I made a mistake and died, but look at this view from my respawn point. [4] References: [1]: https://dropper.waylonwalker.com/api/file/eb43e707-ae55-48f8-9916-86321b3b8754.webp [2]: https://dropper.waylonwalker.com/api/file/25a3493a-f08b-4ea8-8535-b03cc7bcbf00.webp [3]: https://dropper.waylonwalker.com/api/file/74fc59aa-f0da-4643-a67a-36dc65480760.webp [4]: https://dropper.waylonwalker.com/api/file/7e852358-a680-460b-88c0-ed31b2a18501.webp

I took a break

Life comes in waves, and sometimes you need to set down some of your projects to focus on others. For the first part of 2023 I’ve really had a lot of family stuff to focus on, we also are pretty new homeowners and are still trying to get our new to us house cleaned up and modernized. Side Projects # [1] You can see in my growing list of repos [2] that I have poked around on quite a few side projects over the past few months. This has been quite relaxng to me, mostly things that I use to learn from, but also a lot that are tools and things I use that bring me joy. Pydantic # [3] I haven’t wrote about it at all yet, but I have really been starting to lean into pydantic on all of these side projects. I have really been enjoying the type system. A good friend @pypeaday [4] got me hooked and we have been throwing around this phrase that he learned from a math professor “Make it So”. The idea boils down to leveraging pydantic to make all the values you want to exist up front, or fail ...

Playing Star Wars Text Adventure with a 10 yr old

article.blog-post { max-width: 1200px; } The following is a playthrough of Star Wars Text Adventure with a 10 yr old.The following is a playthrough of StarThe following is a playthrough of Star ❯ sw-adventure game run [05/15/23 18:47:42] INFO marvin.marvin: Using OpenAI model "gpt-3.5-turbo" logging.py:50 18:47:42.699 | INFO | marvin.marvin - [default on default]Using OpenAI model "gpt-3.5-turbo"[/] [18:47:42] Starting game game.py:30 generating your character ╭─ Zorin Kreez's Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮ │ Zorin Kreez │ Zorin Kreez was born on Tatooine and grew up in a small farming community. He │ │ health │ 100 │ always dreamed of adventure and excitement. As soon as he was old enough, he │ │ imperial credits │ 5000 │ joined the Imperial Navy and quickly rose through the ranks. He is now a skilled │ │ fuel level │ 100 │ pilot and loyal member of the Empire. │ │ │ │ │ Imperial │ A nimble and deadly starfight...
1 min read

Pydantic and singledispatch

I was reading about pydantic-singledispatch [1] from Giddeon’s blog and found it very intersting. I’m getting ready to implement pydantic on my static site generator markata [2], and I think there are so uses for this idea, so I want to try it out. The Idea # [3] Let’s set up some pydantic settings. We will need separate Models for each environment that we want to support for this to work. The whole idea is to use functools.singledispatch and type hints to provide unique execution for each environment. We might want something like a path_prefix in prod for environments like GithubPages that deploy to /<name-of-repo> while keeping the root at / in dev. Settings Model # [4] Here is our model for our settings. We will create a CommonSettings model that will be used by all environments. We will also create a DevSettings model that will be used in dev and ProdSettings that will be used in prod. We will use env as the discriminator so pydantic knows which model to use. from typing im...
2 min read