[{"title":"Microsoft Doesn't Have it in Them to Win - YouTube","link":"https://youtu.be/n5gE2RX2GVA?si=Wu08hMDV8fREPJKJ","tags":"dev","message":"I havent used windows in years at this point, but I feel this on the products I am forced to use for work.  Basic features are not right, kinda work most of the time.  New features, ai integrations, new skin/design, but still teams can't use my system mic appropriately yet every other app does.\n\nAlso feel this computers have not got significantly better since around getting ssds.  Yes they are better, but not at the same rate of being obsolete every two years.  I hope we hit local model land and it flips this a bit, not in quite the obsolete every two years range, but some new hardware actually lets you do meaningful more new things.","published":true,"public":true,"date":"2026-05-09T12:00:01.215994","id":992,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Install Silksong mods on the Steam Deck | Long Play Tech","link":"https://longplaytech.com/posts/how-to-install-silksong-mods-on-the-steam-deck/","tags":"gaming, hollow-knight-silksong","message":"Really good tutorial for how to mod silksong on the steam deck.  We just did this on my son's steam deck.  I'd add a reccomendation to map ~ to a back button like L4. I think this guy was docked with a keyboard.","published":true,"public":true,"date":"2026-05-09T09:46:52.524033","id":991,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Cloudflare cuts 1100","link":"https://blog.cloudflare.com/building-for-the-future/","tags":"dev","message":"Full salary for the rest of the year after being let go.  As much as this sucks as much as the job market sucks.  It's good to see that these companies laying off huge numbers during good times are trying to take care of those they brought on.","published":true,"public":true,"date":"2026-05-08T08:59:48.245325","id":990,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Programming Sucks","link":"https://www.stilldrinking.org/programming-sucks","tags":"dev","message":"Absolutely incredible, will fill some notes later","published":true,"public":true,"date":"2026-05-08T08:41:49.802480","id":989,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Programming Still Sucks. — Writing","link":"https://www.stvn.sh/writing/programming-still-sucks-fqffhyp","tags":"dev, ai, llm, agents ","message":"Absolute banger of a post, this is the time we are living in. Explain \"are you afraid AI is going to take your job\" to a non tech blue collar worker.  Broken over promises, greed, and projects mismanaged by leadership who has no idea what the day to day work actually does and how critical it is.\n\nI'm not quite in Sara's position, but I feel something shielded by half of this working deep inside of a non tech part of a non tech company leading a very small rag tag team with get shit done attitude.\n\nBut I feel it, I see colleagues hit by these blasts.b I get clipped with shrapnel from some of the largest blasts.  But nothing as significant as I see many others hit with ","published":true,"public":true,"date":"2026-05-07T08:50:59.214632","id":988,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ghostty is leaving GitHub","link":"https://news.ycombinator.com/item?id=47939579","tags":"dev","message":"The GitHub tears post.  I feel it, maybe not as much as @mitchelh, but I feel it.","published":true,"public":true,"date":"2026-05-06T20:38:11.158811","id":987,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Red Squares — the GitHub outage graph","link":"https://red-squares.cian.lol/","tags":"dev","message":"yet another interesting visualization of github outages.  These guys are getting raked over the coals.  It really sucks to see.  Not quite tears to my eyes [mitchelh](https://news.ycombinator.com/item?id=47939579).  But it feels like a core part of opensource has been dying for a few years now and is now getting ripped to shreds.  The central location for open source is becoming more fragmented and I don't see a path to where it ever gets any better.","published":true,"public":true,"date":"2026-05-06T20:36:00.071985","id":986,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Desktop Crash 2026","link":"https://pype.dev/desktop-crash-2026/","tags":"dev","message":"I'm taking this as a reminder to treat every machine like its about to catch fire, any machine with a user regularly using it already has the match lit.  I need to go through and commit draft blog posts, dirty homelab POC's need to get out or get in, and not forever be in limbo.  My efforts this year have been well intention ed to keep projects clean, on main, not dirty, but I think agents are making it worse before they make it better.  I have some new ideas forming and old ideas for managing this have failed me.","published":true,"public":true,"date":"2026-05-02T10:30:05.176682","id":985,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ARTEMIS II PHOTO TIMELINE","link":"https://artemistimeline.com/#jeremy-hansen-suited-up-and-ready","tags":"nasa","message":"Hank Greed made a really cool site to explore the Artemis II mission with Claude Code.  Now this is what agentic coding is for, such a cool app to scroll around on and visualize when the photos were taken.  Listening to the video is sounded really hard to get all of the data to line up correctly, between devices and timezones it ws not straightforward even though all of the schedules and images were made public.\n\n![72dbd361-091e-4e3e-b965-bca6dd11e33e.webp](https://dropper.wayl.one/file/72dbd361-091e-4e3e-b965-bca6dd11e33e.webp)","published":true,"public":true,"date":"2026-05-02T09:38:05.963770","id":984,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hacker News RSS","link":"https://hnrss.github.io/","tags":"rss","message":"hacker news rss feeds, Nice list of feeds to consider adding to your feed reader.","published":true,"public":true,"date":"2026-05-02T09:33:39.622725","id":983,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hybrid theory is the greatest album of our generation - YouTube","link":"https://www.youtube.com/shorts/4BwsqMbruJA","tags":"moto","message":"Jaime's title hooked me in here, what guitar riff from Linkin Park had the greatest riff of our generation.  Theres something about Linkin Park unlike Killswitch Engage, Atreyu, Avenged Sevenfold, bands I would listen to at this time that I cant remember a single riff, I can think of Chesters vocals, or the unique scratching they did, but mostly the songs were a whole piece.  What riff is he talking about.\n\nThe very first note of \"One Step Closer\" plays and I'm immediately transported back to 2003 sitting in my garage watching [HuevosIII](https://www.youtube.com/watch?v=AoQ6fUTuYvg&list=PLoSp9yq_oDOdCOfCp_QTS017cjAi4Cv_0&index=2) on repeat.  I can still remember the timing that Wes Miller did on the edit.  I can see the riders I looked up to for so long riding in formation.\n\nTurns out this riff is so recognizable it takes me exactly where I was when I listened to it hundreds of times.","published":true,"public":true,"date":"2026-04-28T21:31:51.557824","id":982,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Super Slow-Moto: The ","link":"https://www.youtube.com/watch?v=mhzDT37b158","tags":"moto","message":"The most iconic shots of a scrub ever caught on camera.","published":true,"public":true,"date":"2026-04-27T20:04:35.977921","id":981,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":" \"Am I Crazy?\" [Wading Through AI - Episode 3]","link":"https://www.youtube.com/watch?v=Sp1EmFRDquA","tags":"llm, ai","message":"Casey had an interesting point here.  I think demitri came back with some sense of sanity that its just not how corporations look at employee cost, but I still thought it was a head scratcher.  \n\nRoughly translated not quoted\n\n> If the sellers of ai are telling you that your developers are going to be 10x productive, why are they only spending half their salary in tokens?  Why not 9x?\n","published":true,"public":true,"date":"2026-04-16T21:10:02.743207","id":980,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A love letter to Pi | Lucas Meijer","link":"https://www.youtube.com/watch?v=fdbXNWkpPMY","tags":"ai, llm, agents","message":"I hate how he called out terminal user interfaces as shit... then proved web interfaces to be superior.  Damn him.  I love working from my terminal, but having ai prove itself through html reports including video, image, metrics, charts, and text is goated.  Rethinking yourself has the bottleneck not the orchestrator feels real.  Validating the work is hard, theres a shift right now and everyone is trying to figure it out.  Lucas's technique is a little bit of be lazy and tell it to prove itself to you, so as you juggle your 15 agents you have a nice report to read.","published":true,"public":true,"date":"2026-04-15T16:12:33.499768","id":979,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How Claude Code’s Creator Starts EVERY Project - YouTube","link":"https://www.youtube.com/watch?v=KWrsLqnB6vA","tags":"llm, ai, agents","message":"This is a really good guide, with quite a few good nuggets.  I need to try deleting my AGENTS.md and rebuilding it from scratch more often.  I liked how he talked about having agents prove their work and tell them up front how they will be judged. What I didn't care for so much was the feeling that a lot of the rules go in markdown, thats not a rule, thats a suggestion.  Rules should be deterministic.  They should be tests and linters that ensure they are followed.  Suggestions are good, but dont trust the agents to always follow them.  And don't trust that they wont change your rules, keep them honest.","published":true,"public":true,"date":"2026-04-15T16:07:26.693727","id":978,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"POV: Growing up as a Millennial be like 🤣 AC:@mikemancusi #millennials #existential #geny #usafyp - YouTube","link":"https://www.youtube.com/shorts/qH3KH-q_tGE","tags":"random","message":"Feeling this today, feels like everything continues to get worse.  Trying to be more positive, and its hard.","published":true,"public":true,"date":"2026-04-15T16:02:46.126837","id":977,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Write It First, Then Let AI Drive - Kenneth Reitz","link":"https://kennethreitz.org/essays/2026-04-12-write_it_first_then_let_ai_drive","tags":"llm, ai","message":"Interesting take by Kenneth Reitz.  Not quite sure how I feel about it anymore.  It kinda hurts, but I'm not sure if code aesthetics matter as much as the product anymore.  I cared when I was the one editing, but at this point I'm not doing a lot of edits by hand.  Do these aesthetics affect the final products that users use, Not sure.  AI makes me sad.","published":true,"public":true,"date":"2026-04-14T20:05:11.213680","id":976,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I am slowly coming around to AI assisted programming.  ","link":"https://x.com/ThePrimeagen/status/2043861800819761382","tags":"llm, ai","message":"If agents make prime a bit faster, what does that mean for the rest of us mortals?","published":true,"public":true,"date":"2026-04-14T15:17:09.042602","id":975,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"AIs aren’t good rule followers","link":"https://x.com/unclebobmartin/status/2044065822067282396","tags":"llm, ai","message":"I've gotta agree with bob on this one, the first thing I did to my biggest brownfield project I wanted to use agents on BEFORE they did work was a hardened pre-commit.yaml, ci, hardened type checking and linting. SECOND get rid of bad inconsistent patterns, let them replicate consistency, force them to pass checks.  Agents will follow all of your markdown suggestions _most_ of the time, enough for you to become complacent if you let it.  They are goal seeking, if you put them to a task you thought was possible that is not given your constraints, they will try to find a way given enough tokens.  I dont see this ever changing, its one thing that makes them great, it just needs to be kept in check.","published":true,"public":true,"date":"2026-04-14T15:16:11.019313","id":974,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A quote from Steve Yegge","link":"https://simonwillison.net/2026/Apr/13/steve-yegge/#atom-everything","tags":"llm, ai","message":"behind, yet positioned to completely dominate this race by hitting it with some sense.  Making trends in what looks like longevity in the race that is not subsidising to simply get users, but to get by until they figure out how to 100x reduce the cost to a reasonable level.  They feel like the guy sitting in the back with nothing big or flashy to say that is going to drop the hammer on their competition that overstretched itself taking on too much debt because it was necessary to change the game.  There might be something to having a mix of hipsters, boomers, and luddites all trying to balance each other out.","published":true,"public":true,"date":"2026-04-13T21:10:23.395385","id":973,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How does Claude Code *actually* work? - YouTube","link":"https://www.youtube.com/watch?v=I82j7AzMU80","tags":"ai, llm","message":"5 star video, if you are going to watch one video to understand how harnesses and agents work, this is it.  This really had my gears spinning on what tools do for agents and how big of a difference they make in their ability to manage context efficiently and accurately create changes.  It's crazy how good bash works, and that gives the agents the ability to do just about everything, but it could be better.","published":true,"public":true,"date":"2026-04-13T10:15:26.013384","id":972,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Artemis II Lunar Flyby","link":"https://www.nasa.gov/gallery/lunar-flyby/","tags":"science","message":"One of the biggest scientific achievement of our lifetime happened this week.  I will forever remember sitting in a Culvers in between theater builds looking through these photos as they came live, looking at them in awe.\n\n![9987010a-a448-472d-9c60-2831b61a1d3a.webp](http://dropper.wayl.one/file/9987010a-a448-472d-9c60-2831b61a1d3a.webp)\nOne of the most famous images from the shoot \"Setting Earth\"","published":true,"public":true,"date":"2026-04-09T21:53:49.594957","id":971,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Explaining the Most Important Artemis II Photos - YouTube","link":"https://www.youtube.com/watch?v=oaXRREHVkHo","tags":"science","message":"What an amazing set of photos created by the Artemis II crew accompanying a fantastic breakdown by Hank Green.\n\n![0b53a4ed-924e-42b5-84f4-51c189f60801.webp](http://dropper.wayl.one/file/0b53a4ed-924e-42b5-84f4-51c189f60801.webp)\nI like this one, as its probably one of the ones not shred a ton\n\nWhole gallery is worth looking at https://www.nasa.gov/gallery/lunar-flyby/","published":true,"public":true,"date":"2026-04-09T21:44:47.931162","id":970,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"An AI state of the union: We’ve passed the inflection point & dark factories are coming - YouTube","link":"https://www.youtube.com/watch?v=wc8FBhQtdsA","tags":"ai, llm","message":"A really interesting long form interview with @simonwillison.net.  If you follow him closely most of it is probably not new, but I found some interesting nuggets.\n\nSimon is writing most of his code from his phone these days using anthropic hosted platform.  He mentioned that a lot of security risks go away when you don't put secrets on the platform and you let them take the risk of running ai written code with ai chosen supply chain.\n\nHe talked about the Pelican Riding a Bike benchmark for quite awhile.  He was surprised at how well of a proxy it is for how capable a model is at just about everything.  He also said that when he runs the benchmark he also runs half a dozen others that he's never talked about so that He could see if they were to train a model specific to his benchmark he could catch them, but it seems they had caught on and if they were they seem that they would already be doing it on all of his others anyways.\n\nTDD is incredibly boring for humans, it strips so much creativity and joy from the process.  Who cares if agents are bored they do better when doing TDD.","published":true,"public":true,"date":"2026-04-08T09:29:40.452257","id":969,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DDR5 Prices are Crashing... Kind Of. - YouTube","link":"https://www.youtube.com/watch?v=0jCMF7OeH9w&t=328s","tags":"homelab","message":"THIS is the future of homelab, excited to see someone who knows so much more about hardware than I do get excited about this.\n\n![f69c86b9-ab79-46ad-9ef0-4d794544e943.webp](http://dropper.waylonwalker.com/file/f69c86b9-ab79-46ad-9ef0-4d794544e943.webp)","published":true,"public":true,"date":"2026-04-08T08:41:16.171018","id":968,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"@seldo.com on Bluesky","link":"https://bsky.app/profile/seldo.com/post/3miybjol76p2r","tags":"llm, ai","message":"Is Glasswing the next inflection point\n\n\n![00bc13be-32bd-4410-b0c4-2ecc0f2f6b95.webp](http://dropper.wayl.one/file/00bc13be-32bd-4410-b0c4-2ecc0f2f6b95.webp)","published":true,"public":true,"date":"2026-04-08T07:31:34.374704","id":967,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"BumpMesh by CNC Kitchen","link":"https://bumpmesh.com/","tags":"3d","message":"Absolutely sick texture app from cnc kitchen.  Like him I've spent a bunch of time attempting and failing to learn blender, I'm so glad someone else vibe coded out such a good app that can `just` add texture to stls with basic masks and is the very basics of what you would want to add to 3d prints to make them interesting, I'm excited to use this for some real projects.\n\n![d959e3dc-3fde-410b-acaf-8f0574f68a1a.webp](http://dropper.wayl.one/file/d959e3dc-3fde-410b-acaf-8f0574f68a1a.webp)\n\n![e10dddf6-0f2e-498f-bef7-81901afced7b.webp](http://dropper.wayl.one/file/e10dddf6-0f2e-498f-bef7-81901afced7b.webp)","published":true,"public":true,"date":"2026-04-05T10:54:20.459460","id":966,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Bush: Tiny Desk Concert - YouTube","link":"https://www.youtube.com/watch?v=lBuHH7WE4yE&list=RDlBuHH7WE4yE&start_radio=1","tags":"music","message":"Bush on tiny desk.  Iconic band on an iconic platform.  Will be re-listening to this several times.\n\n![3b67304c-41cc-4040-b6cd-7e0c16633e3d.webp](http://dropper.wayl.one/file/3b67304c-41cc-4040-b6cd-7e0c16633e3d.webp)","published":true,"public":true,"date":"2026-04-03T20:23:28.024680","id":965,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"GitHub - kraanzu/smassh at terminaltrove · GitHub","link":"https://github.com/kraanzu/smassh?ref=terminaltrove","tags":"terminal, tui","message":"smassh is the coolest monkeytype tui clone, its impressively accurate.  Easy to install and run, all the same themes appear to be there and everything.  maybe a good way to get a few reps in while agents are running these days.\n\n![35102587-dffe-48ec-920a-a037917e7776.mp4](http://dropper.wayl.one/file/35102587-dffe-48ec-920a-a037917e7776.mp4)\nI need to go back and brush up on my skills I'm down a good 20wpm from what I should be doing.","published":true,"public":true,"date":"2026-04-02T09:07:37.975212","id":964,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"What Happens When AI Stops Being Artificially Cheap | Daniel Miessler","link":"https://danielmiessler.com/blog/ai-stops-being-artificially-cheap","tags":"llm, ai","message":"I've been thinking about this for awhile and Daniel makes some great arguments here.  Interestingly keeping inference cheap removes the incentives to make our tools better, help us choose the right model, lean on local models, open weight models.  The frontier models are so affordable through subsidized subscription models why would you deal with anything less intelligent at this point.  The tooling we use is not optimized for it, and why should it be.","published":true,"public":true,"date":"2026-04-01T12:04:12.090640","id":963,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Tuesday, March 31, 2026 | Baty.net","link":"https://baty.net/journal/31mar26/","tags":"other","message":"emacs config so bad he launch obsidian, YIKES!  grantid I'm using obsidian currently on my phone, not for this post, but for journal entries while I'm away from my desk.  Use this as a reminder that you can swim through murky waters with your dotfiles for awhile, but occasionally its good to do a clean up, pin it, put em in a docker image, have a good fallback to go to if shit really hits the fan.  Iv'e been using https://github.com/waylonwalker/nvim-manager as part of my strategy for awhile now.","published":true,"public":true,"date":"2026-03-31T21:09:19.859450","id":962,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Release 0.9.17 · astral-sh/uv · GitHub","link":"https://github.com/astral-sh/uv/releases/tag/0.9.17","tags":"python","message":"uv adds dependency cooldowns via [#16814](https://github.com/astral-sh/uv/pull/16814). Well needed feature in todays world, far from a guarantee, but its something.","published":true,"public":true,"date":"2026-03-31T21:02:17.184525","id":961,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Package Managers Need to Cool Down","link":"https://simonwillison.net/2026/Mar/24/package-managers-need-to-cool-down/","tags":"dev","message":"2026, finding the balance between fixed bugs and zero days.  There is very unlikely ever a reason you **need** to be running bleeding edge packages in prod most package managers now support cool downs.","published":true,"public":true,"date":"2026-03-31T20:40:50.995776","id":960,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"no one read the source","link":"https://x.com/ThePrimeagen/status/2038978962089492631","tags":"llm, ai, twitter, anthropic","message":"Everyone look away, nothing to see here.\n\n![090f03b2-e6f5-4ede-a814-bfbb4e237b54.webp](http://dropper.wayl.one/file/090f03b2-e6f5-4ede-a814-bfbb4e237b54.webp)","published":true,"public":true,"date":"2026-03-31T18:47:59.298526","id":959,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"safe words","link":"https://x.com/metedata/status/2038924041453441422","tags":"llm, ai, twitter, anthropic","message":"Anthropic safewords are the talk of the town today.\n\n![c097c6dc-4b10-4fab-a9f9-1d4181422285.webp](http://dropper.wayl.one/file/c097c6dc-4b10-4fab-a9f9-1d4181422285.webp)","published":true,"public":true,"date":"2026-03-31T18:46:01.433856","id":958,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"the cheng lou pretext tweet","link":"https://x.com/_chenglou/status/2037713766205608234","tags":"webdev","message":"webdev twitter is blowing up with implementations of pretext text calculations.  The examples are absolutely fun and ridiculous.\n\n![350a368f-0e6b-4375-98d6-6303961c0d6c.webp](http://dropper.wayl.one/file/350a368f-0e6b-4375-98d6-6303961c0d6c.webp)","published":true,"public":true,"date":"2026-03-31T18:38:39.287700","id":957,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"you can replace the spinning verbs in Claude Code","link":"https://x.com/joshmedeski/status/2039010741039120417","tags":"llm, ai, twitter","message":"The claude code source code leaked today and the tweets are great, maybe twitter is back.\n\n> Did you know you can replace the spinning verbs in Claude Code. I'm having fun with it.\n\n![8cf5cf65-40e1-4f40-8d09-b596a97dd51d.webp](http://dropper.wayl.one/file/8cf5cf65-40e1-4f40-8d09-b596a97dd51d.webp)","published":true,"public":true,"date":"2026-03-31T18:31:56.330580","id":956,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"@nicknisi.com on Bluesky","link":"https://bsky.app/profile/nicknisi.com/post/3mhgcbpm4ds2p","tags":"llm, ai","message":"I'm about to be pi pilled.","published":true,"public":true,"date":"2026-03-31T10:19:49.455772","id":955,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"To Live In A World Without AI","link":"https://pype.dev/to-live-in-a-world-without-ai/","tags":"llm, ai","message":"We f&*#ing said @pype.dev, well f&*#ing said.  I think a lot of us are feeling this, we've pitched our brain into a bucket and we are no longer stretching it in the same way.  We still work in similar ways of old, with new ways of turning off and saying yes a bunch of times.  the best thing I can hope for is that as things get better we have fewer yes loops, and more architectural design debates and deep thoughts.  But I fear deep thoughts are gone to the way of \"research the leading 10 frameworks and pick the best one for this project.\" and letting the clankers do the deep thinking.  Its signing us up for a weird distopia.\n\nI think a lot of us wish we could undo what has happened and go back to actually understanding what we are doing, but the world has changed, and if you are building average shit, like the average person, using models trained on average people doing average shit you cant keep up anymore.","published":true,"public":true,"date":"2026-03-26T08:29:37.566025","id":954,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"pype.dev - https://github.com/steveyegge/beads","link":"https://pype.dev/my-thoughts-on-beads/","tags":"llm, ai","message":"I'm in step with @pype.dev here, I really want beads to work for me, but my systems for infra/platform work are all over the place, not one repo.  I'm considering trying the `BEADS_DIR` env var but idk if it fits my workflow.  For now, similar to @pype.dev, I am rocking my own home vibed solution that I've intentionally put little effort in and its working great and I expect it to be broken and not working with the latest harnesses and models within a few months anyways, cause there is no predicting this train.","published":true,"public":true,"date":"2026-03-26T08:24:05.888642","id":953,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"paynepride dot com outage on vacation","link":"https://pype.dev/paynepride-dot-com-outage-on-vacation/","tags":"homelab","message":"oof, outage on the homelab during vacation, brutal.  I can think of a couple of similar solutions to what @pype.dev has done to tailscale in, but I'm not sure that I could do this remotely.  On one hand I'm so glad that cloudflared just takes care of certs on the other hand this really brings a gap in my understanding of what the heck I would do if it were broken.\n\nAn untested DR plan is not a DR plan.\n\nAn untested backup does not exist.","published":true,"public":true,"date":"2026-03-26T08:20:22.294414","id":952,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Has 3D Printing Reduced Adam Savage's Maker's High? - YouTube","link":"https://youtu.be/l8vxTYJbzSY?t=107","tags":"making, ai, llm","message":"Vibe coding is going so far into the news sphere now that Adam Savage even weighs in with perspectives from someone who has built a life around building things with his hands, keeping up with new making techniques, discovering old techniques as they combine with new.  He talks about 3d printing reviving his love of the pantograph as one automation technique eases the most difficult part of another.","published":true,"public":true,"date":"2026-03-25T20:37:06.030860","id":951,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"kubernetes is beautiful r/kubernetes ","link":"https://www.reddit.com/r/kubernetes/comments/1rzyhip/kubernetes_is_beautiful/","tags":"kubernetes","message":"This is a fantastic progression through kuberentes concepts.  From running a pod, to making it resiliant, holding secrets, accepting traffic, and autoscaling.","published":true,"public":true,"date":"2026-03-23T21:29:40.954556","id":950,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"More Details Than You Probably Wanted to Know About Recent Updates to My Notes Site - Jim Nielsen’s Blog","link":"https://blog.jim-nielsen.com/2026/notes-site-updates/","tags":"webdev, blog","message":"I love the level of thought that Jim has put into these changes and making sure that urls don't change.  I've got a big change in flight to my main site and this is one of the reasons that I've been sitting on it so long.  I want to make sure urls arent broken, redirects work as they should, and there are no 404's from existing urls.  Currently the new version only exists on a separate deployement https://go.waylonwalker.com/\n\n> I also added the ability to “shuffle” between posts. This is mostly for myself. I like to randomly jump through notes I’ve published in the past for reoccurring inspiration\n\nLove this idea and have it on my new site already as well, and have really enjoyed using it by pressing it a dozen or so times over the course of a few sessions.  It highlights that I have too many posts like stars and thoughts and I should do some weighting to main posts.  mine is at https://go.waylonwalker.com/random/","published":true,"public":true,"date":"2026-03-23T12:26:22.487435","id":949,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Notes – 06:34 Mon 23 Mar 2026 – David Bushell – Web Dev (UK)","link":"https://dbushell.com/notes/2026-03-23T06:34Z/","tags":"llm, ai","message":"> Does anyone think fast-code will continue to pay the same salary? The answer isn’t to switch your brain off during your McCode shift and write a poem after work. Your job will be replaced by a Banglasdeshi slop-shop if AI improves (which is inevitable, apparently). Possibly the same sweatshop that loomed my £3 T-shirt. The Luddites didn’t accept their fate so easily.\n\nDavid has some good points here, but I'm feeling the opposite direction a bit.  Execs have always liked keeping the PM's and the people steering the ship close by and were willing to farm out more and more grunt work.  It feels like we are in a weird phase where there used to be a big group of people paid to write code.   A few of them are exceptionally good at it and will remain.  There will be a need for these people everywhere.  Somehow we still need people hand editing assembly code optimizations, fortran, and cobol today.  Those industries largely moved on, but a few great ones remain.  I think this fast-code slop factory is going to be a  short forgotten time in history, but no one yet knows what's next.  We are all waiting to find out.  Just with anything there is still value in doing it by hand and understanding it at a deep level, but its quickly becoming hobby work.  The things that most people code, things like CRUD apps do not require a special skill.  They are largely replicating existing good patterns on frameworks to implement business logic that are custom to the app.  There is no way of getting around the latter.  Someone will always need to understand the business logic and be able to \"sign off\" and assert that it does the thing the business needs.","published":true,"public":true,"date":"2026-03-23T09:07:38.962838","id":948,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ten year computer","link":"https://alexwlchan.net/2026/ten-year-computer/","tags":"tech","message":"Great gusto here from someone looking to fill landfills less.  Get more use from what they paid for.  Dodge some tough times in the hardware industry.  I'm going to argue that the 10 year computer is not one bit crazy right now.  No idea what the future entails, if local llms get good enough to really get so useful they feel required this could easily change.  One issue I had with the post as they are looking to get a machine for the next 10 years is they were so focused on themself that they missed the point.  They were so focused on buying something that would work for them for 10 years that they bought something brand new rather than thinking about the bigger issue of how do we get hardware to last 10+ years.  Some factor of this involves giving our devices a second life.  Two things went wrong here.  First it appears they they have a perfectly good imac with a broken screen.  I know nothing about apple/imac, assuming that the screen is toast and unrepairable, I know you can ssh into a mac this feels like good potential for server hardware.  Next they purchased a brand new mac mini.  Hardware has been good for a long time, there is no need to buy new right now, especially now.  I haven't bought a new machine in years and most of my hardware is second hand cobbled together stuff, and has no issues.  I've got one machine thats 16 years old, 2 machines at 9 years, one at 8 years.  To get here they need to be repairable, designed to last, and probably no run windows as they will release something that renders them too slow or require new hardware for security that wont work.","published":true,"public":true,"date":"2026-03-17T09:32:50.641964","id":947,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The future of Coding and Code Quality - YouTube","link":"https://www.youtube.com/watch?v=baIHCeccbbw","tags":"llm, ai","message":"Very interesting takes from @thdxr in this interview.  A lot has been hashed out by others all over the place, but a hot take here is that code quality is higher than ever right now.  Codebases are becoming more consistent than ever.   If you are not starting with a good consistent base from the start you are poising your context and doomed to fail and have all the common failures of ai written code.  He still reads almost every PR, and will read all of the code eventually.  There are a few cases where reading the PR is not worthwhile only when its low stakes, knows that good patterns have been established and followed.  He argues that someone needs to be the expert of the code and of the product still and fears that too many people not looking at prs will fail companies.","published":true,"public":true,"date":"2026-03-17T09:07:41.116246","id":946,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Do You Have Token anxiety? - YouTube","link":"https://www.youtube.com/watch?v=ZJEnQOsMtsU","tags":"llm, ai","message":"Kids are leaving the party early, not drinking, cant watch netflix without the laptop open.  They are leaving the party early to check on their agents.  I get it, that feeling that you need to eek out one more prompt, keep your agents running. if they arent running what are you even doing.  If not you 6 others are ready to pass you up.  The timeline to be first has shrunk to nothing but unachievable.","published":true,"public":true,"date":"2026-03-15T09:27:15.252444","id":945,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"No one under 18 installs Linux","link":"https://youtube.com/clip/UgkxVmrLKcNieh6FffrnSu2-iXD8SVFzSCzj?si=rV4k2piZM3Jcq9w0","tags":"linux","message":"😂 Should I be concerned that My 12yo installed Arch BTW on his own?","published":true,"public":true,"date":"2026-03-09T11:46:15.330185","id":944,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The web is bearable with RSS","link":"https://pluralistic.net/2026/03/07/reader-mode/","tags":"blog","message":"It's wild how much of a hit Google took from killing reader, almost any time I hear about killedbygoogle, reader is the top of the list.  Its the thing that we all remember being really good and the incumbants just did not match up.  Somehow we are here 13 years later still bitching about it, despite it only having a 6 year run.  You should probably get an rss reader, and follow some incredible people that make feeds.  Most sites that produce content have the ability to subscribe over rss.  Unlike @pluralistic.net, I dont read in my reader.  My reader is just a list of links out to the web and I typically read it how the author intended on their site.  I nod a long to Cory's enshitified internet just as much as the next guy, I love text based interfaces, I despise  the bloat that js has brought on.  But I don't believe all js is bad, I don't turn it off, even though he has me questioning this now.  News sites kinda suck, we can agree there, but its rare that a small indie web creator has fully enshitified their site with js.  I don't buy that.  Sub to the feeds.","published":true,"public":true,"date":"2026-03-09T09:00:55.470341","id":943,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I need a new blog to subscribe to. Know… | justin․searls․co","link":"https://justin.searls.co/takes/2026-03-08-23h18m29s/","tags":"blog","message":"Sent Justin my list https://go.waylonwalker.com/blogroll, will soon be on the main site, but right now its only on the go subdomain.  I've long had reader.waylonwalker.com, but thats soon going to be wrapped into the main site as well at /reader.\n\nI'm interested to see what good stuff Justin gets and if you have any good ones to share reply.","published":true,"public":true,"date":"2026-03-09T08:31:53.251530","id":942,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"jack cuts block in half","link":"https://x.com/jack/status/2027129697092731343?s=20","tags":"dev","message":"One of the well worded shitty messages I've seen, good severance, help, timeline to cut off coms.\n\n> we're not making this decision because we're in trouble. our business is strong. gross profit continues to grow, we continue to serve more and more customers, and profitability is improving. but something has changed. we're already seeing that the intelligence tools we’re creating and using, paired with smaller and flatter teams, are enabling a new way of working which fundamentally changes what it means to build and run a company. and that's accelerating rapidly.\n\nMuch better than the get rid of people cause AI can do the work.  Honestly I feel this though.  I was just talking with some colleages how do we divvy work in the age of agents without just constantly walking on each other.  If each of us is now an architect who is managing teams of junior agents under us it feels MUCH different than before.\n\nI'm far from working in a large software org like this and I'm feeling it.  I only imagine that it gets worse the more people that have to orchestrate around each other.\n\nAppreciate the honesty and transparance, but man this sucks for those impacted and the job market right now.","published":true,"public":true,"date":"2026-02-27T11:29:10.696692","id":941,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"FFmpeg video crop","link":"https://tools.simonwillison.net/ffmpeg-crop","tags":"webdev","message":"This was the inspiration for the next update in dropper that became a full clip editor.  The one that I've long wanted, but forgotten about.  It's going to include this cropper, resize, image extractor, and trimmer.","published":true,"public":true,"date":"2026-02-25T08:29:59.408578","id":940,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Tiny Tool Town 🏘️","link":"https://www.tinytooltown.com/","tags":"webdev","message":"Learned about this one from the @stipete [interview](https://youtu.be/Wm7tsiJ1nIo?si=_qvZaR5SPWozBjrY) @scotthanselman did on YouTube.  This is proof that the internet is alive.  It's such web 1.0 nostalgia to see that people can just build things!  Did you know that you can literally just build things and make them exist?  You don't need users, You don't need a big platform, you can just make something into existance.  It seems like something we have forgotten through web 2.0 where everything as become 4 major apps all linking to each other and trying to hoard all of the attention. Scroll through tehre are some really cool apps, probably nothing that has the polish you want, or is going to change your world.  What these apps have more than anything you've probably used in the recent years, is inspiration.  Its xyz, but the way I wanted, or with my little twist.  And no one else has to like it but me because I'm the user.","published":true,"public":true,"date":"2026-02-25T08:27:11.115536","id":939,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"FancyGist","link":"https://fancygist.com/","tags":"dev","message":"I saw this in @cassido's newsletter this week and had to give it a run.  I despise that there is no dark mode and it insists on burning my retinas 😤.  But really this is an absolute beate of a web based markdown editor, I love the command mode to press slash and it just pops out in this whimsical animation ready for me to pick what I want.\n\n![](https://dropper.waylonwalker.com/file/74f0ac1e-ac50-4939-8bba-4698a8043b25.mp4)","published":true,"public":true,"date":"2026-02-25T08:07:40.069873","id":938,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Reply guy","link":"https://simonwillison.net/2026/Feb/23/reply-guy/#atom-everything","tags":"sass","message":"I had no idea there were such things as \"reply guy\" as a service.  I can see this as a really genuine thing where brands want to genuinely engage with their communities, quickly being taken over by slop bros to ruin everything.","published":true,"public":true,"date":"2026-02-23T08:39:41.085152","id":937,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Smaller and dumber - daverupert.com","link":"https://daverupert.com/2026/02/smaller-and-dumber/","tags":"dev","message":"Important things to remember in the age of cheap code.  More code, not always more better.  More code mean, more risk, more maintenance, harder to change.","published":true,"public":true,"date":"2026-02-23T08:36:05.253576","id":936,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"An attempt at a balanced perspective on AI - YouTube","link":"https://www.youtube.com/watch?v=FC7YGG0FzZ0","tags":"ai, llm","message":"THIS, THIS is how most people are feeling about AI right now.  Theres lots of \"oh ai bad\", \"but ai help\", \"but ai company sleezy\".  Cassidy did a fantastic job summarizing how most of us are feeling.  Ending with well at the end of the day, I can't do anything about the bad, the best thing I can do is learn how to embrace the good cause it aint going away any time soon.","published":true,"public":true,"date":"2026-02-22T21:09:05.652226","id":935,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Post by @castpixel.bsky.social — Bluesky","link":"https://bsky.app/profile/castpixel.bsky.social/post/3mf52azn5oc2h","tags":"pcb","message":"This is a wild way to build prototype pcb's, so cool and creative.","published":true,"public":true,"date":"2026-02-19T17:11:42.001734","id":934,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Session: Skate Sim on X: \"Our long-awaited Skate Core Update is now LIVE 🛹🔥 Peep all the changes in our dev blog → https://t.co/GB0de8ebPj Don’t own Session yet? Fix that here → https://t.co/JseSvy5DML https://t.co/QyB2lhZF0H\" / X","link":"https://x.com/SessionGame/status/2024469214396838140","tags":"gaming, session-skate-sim","message":"Had 10 minutes to play with the new session updates this afternoon and it feels so much smoother.  I can definitely feel it even as a casual user.","published":true,"public":true,"date":"2026-02-19T17:10:18.526628","id":933,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"trash on X: \"loving the state of development right now https://t.co/4WyBPbio6V\" / X","link":"https://x.com/trashh_dev/status/2024476878015468027","tags":"dev","message":"There are so many config files right now, glad to see some standards coming in around Agents.md, but so much is still specialized to a whole host of tools that have not been standardized on yet.","published":true,"public":true,"date":"2026-02-19T17:07:34.564144","id":932,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Silksong Demastered","link":"https://nekodot.itch.io/silksong-nes","tags":"gaming","message":"This is an abolute banger of a game on itch.  It nails the nes aesthetic while keeping true to the modern silksong movements.  You can play through the first boss Moss Mother, and where you start the first ascend into Bone Bottom.  I was in shock when I discovered the little climb effect hornet does when you just cant quite make a jump, the hold jump for height is on point.  Her downstrike with the hunters crest is perfect.","published":true,"public":true,"date":"2026-02-17T18:20:18.324211","id":931,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Blueskii on X: \"this underground creator named \"sN0UK\" made Queens Garden from Hollow Knight In GD! 🗡️🕸️ https://t.co/eR8SnoX6lb\" / X","link":"https://x.com/LayoutPerson/status/2023551519375900957","tags":"gaming","message":"Wyatt would absolutely love this banger of a level.\n\n![](https://x.com/i/status/2023551519375900957)","published":true,"public":true,"date":"2026-02-17T08:02:51.752600","id":930,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Home / X","link":"https://x.com/dhh/status/2023710298201350606/photo/1","tags":"terminal","message":"To the untrained eye this passes as any normal gui editor.\n\n![](https://dropper.waylonwalker.com/file/86d45a22-9ed4-4f14-8070-5f0cadee9bad.webp)","published":true,"public":true,"date":"2026-02-17T07:58:16.540419","id":929,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"uvx.sh | Astral","link":"https://uvx.sh/","tags":"python, uv","message":"astral silently dropped a clever uvx.sh to help builders reach a wider audience, no longer does a user need to have python installed prior to installing a python cli. It does have a hard requirement on having curl or wget available.","published":true,"public":true,"date":"2026-02-16T14:21:29.353601","id":928,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(178) POV: You install Clawdbot on VPS - YouTube","link":"https://www.youtube.com/shorts/bof8TkZkr1I","tags":"linux, ai, llm","message":"Use a linux vps, It's easy, just follow these simple instructions.","published":true,"public":true,"date":"2026-02-16T10:22:40.588350","id":927,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(178) POV: Your AI Models change faster than JS Frameworks - YouTube","link":"https://www.youtube.com/shorts/vGKC9LpGnOQ","tags":"","message":"We are living through the js framework wars for agents and llms now.  We will look back on this with clarity, and wonder why we wasted time with things like graphql, and why we couldn't see the real winners from the start.","published":true,"public":true,"date":"2026-02-16T10:21:52.724234","id":926,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"OpenClaw: The Viral AI Agent that Broke the Internet - Peter Steinberger | Lex Fridman Podcast #491 - YouTube","link":"https://www.youtube.com/watch?v=YFjfBk8HI5o","tags":"ai, llm, agents","message":"Such a good interview @lexfridman is such a talented interview.  It's so cool to see the other side of this.  For weeks we've heard about the story of the name change, we've seen everyone shitting on the security model, buying up all the mac minis in existance, fear mongering not to install this thing.  @steipete.me has such a cool story from the beginning talking about making this thing fun and exciting.  Giving it a personality that is not \"You are absolutely right\".  The story of changing the name twice, and getting pwnd on every step the first time and nailing it the second time is incredible.  Dude is having fun trying to make the thing he wants in the world exist.","published":true,"public":true,"date":"2026-02-16T10:19:08.454539","id":925,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Naya Connect | Hackaday","link":"https://hackaday.com/tag/naya-connect/","tags":"keeb","message":"The idea of adjustable key caps to mutate your board into something that really fits you, how you type, how your fingers move, is an absolute banger.","published":true,"public":true,"date":"2026-02-12T21:39:21.635691","id":924,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Background Patterns with CSS `corner-radius` – Frontend Masters Blog","link":"https://frontendmasters.com/blog/background-patterns-with-css-corner-radius/","tags":"webdev css","message":"These patterns are really good.  I like a good repeating background on a website.  Takes me back to the old days of web, but with a nice crispness that was never there on sites of old ","published":true,"public":true,"date":"2026-02-10T08:41:45.712948","id":923,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The shovelware cometh","link":"https://jerodsanto.net/2026/02/the-shovelware-cometh/","tags":"llm, ai","message":"Not surprising theirs a lag, between the models getting better, the tools getting better, and the masses getting better at using them, it takes time.  This is still quite a hockey stick.  I'm wondering how many are not posting on Show HN embarrassed they built something they know nothing about and afraid to get questions.  I have no idea how anyone would get this ratio, but if I were a betting man, Id bet the ratio of build/show went way up.  Plus we are probably getting a ton of people who have never heard of HN start building cool bespoke things for themselves and thats it, they use it, they love it, they might tell/show a friend.","published":true,"public":true,"date":"2026-02-03T21:45:51.457544","id":922,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The shovelware cometh","link":"https://jerodsanto.net/2026/02/the-shovelware-cometh/","tags":"llm, ai","message":"Not surprising theirs a lag, between the models getting better, the tools getting better, and the masses getting better at using them, it takes time.  This is still quite a hockey stick.  I'm wondering how many are not posting on Show HN embarrassed they built something they know nothing about and afraid to get questions.  I have no idea how anyone would get this ratio, but if I were a betting man, Id bet the ratio of build/show went way up.  Plus we are probably getting a ton of people who have never heard of HN start building cool bespoke things for themselves and thats it, they use it, they love it, they might tell/show a friend.","published":true,"public":true,"date":"2026-02-03T21:45:51.010373","id":921,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"dax on X: \"finally got around to setting up an always on opencode server so i can run sessions on any device from anywhere takes a few minutes - showed it off here https://t.co/wIVGqlTbpQ\" / X","link":"https://x.com/thdxr/status/2017691649384620057","tags":"dev, ai, llm, opencode","message":"I tried this flow [of running an opencode server on tailscale] on day one of getting opencode, I wanted to prompt from my phone while were were  running lights at the theater. It kinda worked, but the ui was really bad on phone, hard to use and the experience overall--it felt buggy.  Happy to see they are making improvements and it might now be ready for some real use.\n\nhttps://dropper.wayl.one/file/9065fcb2-5e40-479c-967e-498bc9bb6a4f.mp4","published":true,"public":true,"date":"2026-02-03T08:18:39.746765","id":920,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Short Month, Big Ideas (February 2026 Wallpapers Edition) — Smashing Magazine","link":"https://www.smashingmagazine.com/2026/01/desktop-wallpaper-calendars-february-2026/","tags":"design","message":"test\n","published":true,"public":true,"date":"2026-02-02T08:48:03.390596","id":919,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Peter Steinberger","link":"https://steipete.me/","tags":"later","message":"Pete has a ton of good posts here and actually ships a lot of product.  reccommended read.","published":true,"public":true,"date":"2026-01-26T14:00:57.611843","id":918,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Stay away from my trash! - tldraw: Build whiteboards in React with the tldraw SDK","link":"https://tldraw.dev/blog/stay-away-from-my-trash","tags":"later","message":"read later","published":true,"public":true,"date":"2026-01-26T13:59:50.972983","id":917,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I'm back from the dead","link":"https://pype.dev/im-back-from-the-dead/","tags":"note","message":"I'm jelous... as I was getting better, I got kicked down again. cant hold a conversation without coughing.  Its hitting people from all over like crazy this year.  so glad its just the flu and not something seriously harmful for hospitalization.","published":true,"public":true,"date":"2026-01-25T20:48:26.087797","id":916,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DockFrame - Modular USB-C Hub with Framework-Compatible Expansion Cards","link":"https://dockframe.com/","tags":"hardware ","message":"Dockframe looks like a really cool concept using the framework tiles ( the connectors idk what they are called ) to build a dock.","published":true,"public":true,"date":"2026-01-21T21:21:53.029016","id":915,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"make no mistakes by Beginbot | Suno","link":"https://suno.com/song/f5821216-ea6e-49c3-98de-67880e517a89","tags":"llm, ai","message":"Ai prompt music, the right level of cringe to be great.","published":true,"public":true,"date":"2026-01-19T20:25:15.517074","id":914,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I Hope This Email Finds You Before I Do - Last Week in AWS Blog","link":"https://www.lastweekinaws.com/blog/i-hope-this-email-finds-you-before-i-do/","tags":"llm, ai","message":"This post was filled with real life, snark, entertainment, feelings.  I get a lot of these emails that claim they can change my SEO game if I give them 500, for a site making 0, Link partnerships from small startups.  A lot of these are so automated that if I do respond I dont even get a response.  I've responded to many simply asking what is this about, I get 10 others just like you a week.  Can you tell me what exactly you want and what each of us benefit from it, how did you find me.  All normal questions, they almost always result in crickets, no response, maybe its time to implement a Billie for more snark.","published":true,"public":true,"date":"2026-01-19T15:24:34.256840","id":913,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(137) Hollow Knight: Silksong by Ceen in 54:55 - Awesome Games Done Quick 2026 - YouTube","link":"https://www.youtube.com/watch?v=M9Li3gm4JCI","tags":"gaming, silksong","message":"What a goat, speedrunning silksong at a competitive pace, live, with live audience, while co hosting, and raising $2M for Prevent Cancer Foundation.  CEEN moves in ways that do not compute with my brain, everything looks so simple, things that take me so long are done in a few swipes.  Watching this it really make silkspear look OP, this thing does so much damage if you never take damage and can use it continuously without needing silk for healing.","published":true,"public":true,"date":"2026-01-14T02:35:01.155219","id":912,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(137) \"I shipped code I don't understand and I bet you have too\" – Jake Nations, Netflix - YouTube","link":"https://www.youtube.com/watch?v=eIoohUmYpGI","tags":"llm, ai, later","message":"Absolute banger of a conference talk, saving to come back with more notes later.","published":true,"public":true,"date":"2026-01-14T02:15:41.950619","id":910,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Reflections on 13 years and 1,000 posts of writing on my blog","link":"https://hamy.xyz/blog/2026-01_1000-blog-posts","tags":"blog","message":"> The answer is I do it habitually. If there's a big enough idea I've had floating around in my head and I think others might find it useful / interesting then I usually think it's worth logging it somewhere. If I don't, I'll likely just keep thinking about it so might as well get it out of my head and on the internet where people can find it.\n> - [hammy](https://hammy.xyz)\n\nThis is how you do it.  If you want to do something, you need to make it a habit. Something you crave, something you need.  I need to write my ideas down in this blog, it helps me index ideas for later, but more importantly it helps me flesh them out and think through real things.\n\nCongrats on 1k, your site is awesome [Hammy](https://hammy.xyz)","published":true,"public":true,"date":"2026-01-13T03:15:54.881044","id":909,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Don't fall into the anti-AI hype","link":"https://simonwillison.net/2026/Jan/11/dont-fall-into-the-anti-ai-hype/#atom-everything","tags":"llm, ai","message":"Never believe in absolutes, see what I did there.  The hype bros will take you to the extremes, ai will take your jobs in six months or be burned to the ground in six months.  How about its useful now and will be more useful in six months.  If you turned off the hype bro feed for six months you would probably be fine, in fact you would probably be better off for not capturing so much noise along the way.  AI has gone the way of next js framework, it churns fast, hype bros are always an expert that know exactly whats best for everyone.  It changes fast, what was the best last week might be dead next week.  In fact getting to know what works well for you and knowing that tool really well for a longer period will take you farther.","published":true,"public":true,"date":"2026-01-12T03:03:25.602819","id":908,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(137) Salesforces mistake - YouTube","link":"https://www.youtube.com/shorts/tBWenRZIgdg","tags":"llm, ai","message":"Salesforce gets pwnd by the ai hype bros and killed its reputation with employees, letting them know where they truely stand with them.  4k people sounds like a lot, its probably a big chunk of savings, but was it worth the loss of reputation?  There must be a better way to give this a trial run that lets them understand this before disrupting the lives of real people right???","published":true,"public":true,"date":"2026-01-12T02:52:55.976434","id":907,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Diffs, from Pierre","link":"https://diffs.com/","tags":"","message":"This looks like a really nice and performant diffing library that supports vanilla and react, with a lot of options.","published":true,"public":true,"date":"2026-01-10T23:28:59.545316","id":906,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Oxide and Friends 1/5/2026 -- Predictions 2026!! - YouTube","link":"https://www.youtube.com/clip/UgkxKSVMasWf0UpGaRVRqeBmn9C5Oh1syH2Q","tags":"llm, ai","message":"I thought this was an interesting take from Simon.  I've been hearing him consistently say there will be more demand for software engineering in the future.  More companies will have the ability and need to deal with software applications, but fewer of us will be hand editing any code.  I thought this was an interesting interaction in the clip.\n\n> Uh Simon, what do you got for us? \n\n> I've just got the one. I think the act\n\n\n> of the the the job of being paid money to type code into a computer Yeah.\n\n\n> will go the same way as punching punch cards. \n\n> Okay. \n\n> I do I think in\n\n\n> six years time I do not think it will anyone will be paid to 80:56\njust do the thing where you type the code. \n\n> Just type the code. Okay. \n\n> I\nthink software engineering will still be an enormous career. I just think the\nsoftware engineers won't be spending multiple hours of their day in a text\neditor typing out syntax. 81:09 \n\n> It will look like punching cards. I think\nso. Yeah. \n\n> Yeah. Interesting. In uh in six years. Um and but software\nengineering still very much exists. \n\n> I believe so. I I hope so. [laughter] I\nvery much hope so because I think \n\n> the um the challenge of being a software\n81:23 engineer is not remembering \n\n> how if what what if what for loops look\nlike. It is understanding what computers can do and how to turn fuzzy human\nrequirements into actual like working software. And that's that's what we're\nfor. And I think we'll still be doing that just a lot more of it in a lot more\nambitious scale. \n\n> And then Okay. Do you Does the software engineer though\ndeals with code? I mean they I mean the code is being written. \n\n> I think\nthey probably look at it occasionally. \n\n> Okay. Only occasionally a little\nbit. So I met 81:53 \n\n> Who debugs it? \n\n> Um I I hate to say it, the agents\ndebug it themselves. \n\n> Okay. Who debugs your device driver that either works\nor doesn't? I like \n\n> working on this programming language like I'm doing my\nown codegen and like \n\n> claude is happy to pull out GDB and just like\n","published":true,"public":true,"date":"2026-01-09T21:41:43.833095","id":905,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"There's an Actual Reason You Can't Recycle Plastic - YouTube","link":"https://www.youtube.com/watch?v=325HdQe4WM4","tags":"environment","message":"In all of the documentaries I've seen on how hard it is to recycle plastic, how hard it is to separate all the small pieces from each other, how expensive it is, dirty it is, how just plain ineffective we are at doing it I've never seen this angle.  In a nutshell the other side of the equation is that as we pull natural gas out of shale is that we pull ethylene out as a byproduct.  We don't even ask for it, it just comes with the methane gas that we are going for.  So as we drill, Frack, and mine this out to heat our homes and create electricity we are stuck with all of this ethylene.  It's terrible for the environment, just like methane it's a rough greenhouse gas.  Companies are allowed to flare off a certain amount, they can push some down the pipe, but are still left with tons leftover that they practically give away.  Turns out that this stuff is very cheap and very much wants to be turned into plastic.  Very clean food grade plastic, very easily and cheaply compared to recycling.  Excess is a big problem that needs solutions, but it has hard problems at both ends of the situation that don't make it easy for anyone trying to take care of it.","published":true,"public":true,"date":"2026-01-08T03:16:18.271460","id":904,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"feat: add llms.txt endpoint for LLM-optimized documentation by quantizor · Pull Request #2388 · tailwindlabs/tailwindcss.com","link":"https://github.com/tailwindlabs/tailwindcss.com/pull/2388#issuecomment-3717222957","tags":"webdev, css, tailwindcss","message":"Damn this one is getting some reach, I've seen it from [Simon Willison](https://simonwillison.net/2026/Jan/7/adam-wathan/#atom-everything) and [Justin Searls](https://justin.searls.co/takes/2026-01-07-14h15m44s/) and [t3.gg](https://www.youtube.com/watch?v=luhgjBrRulk).  I feel for Adam, He has built a fantastic product that the world is running with, something we all needed.  Something that everyone laughs at turns their nose up \"ppft I don't need that\" the first time they see it, but once they try people get it, and a lot of them like it and keep it.  But its something that no one really wants to pay for, no matter how big of products get built on it.  As we see more and more features coming to css, its not stopping, the work will always be there.  I really hope to see something happen to tailwind to keep it afloat. massive growth and revenue down 80% does not help. ","published":true,"public":true,"date":"2026-01-08T01:22:02.227264","id":903,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Photoshop for text — Steph Ango","link":"https://stephango.com/photoshop-for-text","tags":"blog, writing, llm","message":"While the non deterministic nature of llms scare the heck out of me in the sense of just cutting it loose on my writing.  letting it go through all of my files and just edit them.  I do like the idea of mundane tools like \"desaturate\", \"Gaussian blur\", evolving out of it for text.  I don't yet see this with the tools we have now, but it will be interesting to see them evolve.","published":true,"public":true,"date":"2026-01-06T02:48:34.155544","id":902,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"File over app — Steph Ango","link":"https://stephango.com/file-over-app","tags":"blog, writing","message":"file over app is a fantastic philosophy laid out well and concisely documented very well in this post.  The idea is that tools will change, we will want to use different tools, different editors, different computers over time.  What's likely to outlast everything is plain text files that we can interact with a wide variety of tools.  Not encrypted in dedicated formats that die with our tools, but in plain text where a computer from 2160 is likey as capable of reading the file as one from 1960 would be.","published":true,"public":true,"date":"2026-01-05T18:54:06.140893","id":901,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The most popular blogs of Hacker News in 2025","link":"https://simonwillison.net/2026/Jan/2/most-popular-blogs-of-hacker-news/#atom-everything","tags":"","message":"Congrats Simon!  Well deserved metric for the level of content that he produces, Its remarkable the amount of high quality posts that come out of Simon Willison.  Also this looks like a really great resource to find other high quality blogs that I have not read before.","published":true,"public":true,"date":"2026-01-03T18:14:32.509703","id":900,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Convert a video from dark mode to light mode with FFmpeg!","link":"https://cassidoo.co/post/ffmpeg-dark-light/","tags":"webdev, ffmpeg","message":"Converting video from dark mode to light mode after the fact is a pretty great idea, I'm surprised at how well it does.  Its definitely not perfect, but looks really good.","published":true,"public":true,"date":"2026-01-01T18:00:56.537778","id":899,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"RAM Prices Are Getting Worse - YouTube","link":"https://www.youtube.com/watch?v=R5B0fjG55Fw","tags":"pc","message":"I actually like linus's take here.  My parents dropped $4k (~$8k in todays money) on a computer when I was a kid, (which turned into something too $$ to let me touch at that point).  I played some educational games that no one else has heard of and I've long forgotten along with an early ciivilization game.  It was e-waste in 2 years we maybe kept it 5, and it was barely working.  Contrast this to my PC now I spent $2k on 3 years ago refurb from 2017, and it has no signs of age from me, does everything I need it to.  Ram crisis sucks, the outright reason behind it sucks.  But on the bright side you can still get a baller build for less than you could late 90s without inflation.  The industry is not there for consumers right now, we had better times, but its still not bad times.  Keep the hope alive that good times will come.","published":true,"public":true,"date":"2025-12-24T02:34:55.435067","id":898,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Smartphones are black holes","link":"https://kerkour.com/smartphones-blackhole","tags":"social-media","message":"This sounds great.... I'm sick AF right now and dont want to do anything but watch YouTube, and let opencode do my work.","published":true,"public":true,"date":"2025-12-24T02:29:01.082109","id":897,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Using stderr/stdout correctly - YouTube","link":"https://youtu.be/XDAfpzjBYJQ?t=353","tags":"dev, cli","message":"> Yeah there's some basics, you know things you might expect like using standard error and standard out correctly. One thing I'll say on that because I think this is commonly misunderstood, standard error is not for errors, it's for any information that isn't part of the normal output. So you know often times that's warnings and errors, but it might just be progress information. You know anytime that you just need to have something go to the user that's what it's there for.\" (6:15 - 6:42)\n\nI've definitely done this sin in my own tooling before, and it does make things harder to use.  I think I still take err/out at face value.  I really like the translation Jeff gave here, one is for normal output, i.e. what the user asked for and the other is extra information.  So if I wanted to list something and pipe it into something else, stdout only captures the list, thats it.  if you have a bunch of information about config warnings, showing environment, are you sure questions, none of that is captured.","published":true,"public":true,"date":"2025-12-22T15:35:30.437810","id":896,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"You Might Also Like: My Notes Blog - Jim Nielsen’s Blog","link":"https://blog.jim-nielsen.com/2025/you-might-also-like-my-notes-blog/","tags":"blog","message":"I really like a good link blog, it's the old timers version of a reaction video.  It gives me new posts to discover from other writers, and gives additional perspectives from ones I trust enough to add to my RSS.\n\n> It’s nice to have a place where I can jot down a few notes, fire off my reaction, and nobody can respond to it lol. At least, not in any easy, friction-less way. You’d have to go out of your way to read my commentary, find my contact info, and fire off a message (critiquing or praising). That’s how I like it. Cuts through the noise.\n\nDitto Jim.  I've oddly found mine more useful to search than blog posts, zettlekaten, notes, whatever you want to call them.  For me writing something down makes it more concrete in my brain that I'm less likely to need to go reference, but I often need to re read or references posts from others, this is where [[ thoughts ]] comes in handy for me \n\nLike Jim I have a bunch of [[ feeds ]] you can subscribe to if you want some or all of my stuff, but I aggregate everything to the same root site.","published":true,"public":true,"date":"2025-12-19T16:11:31.828441","id":895,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"“You should never build a CMS” | Sanity","link":"https://www.sanity.io/blog/you-should-never-build-a-cms","tags":"blog, markdown, cms, later","message":"Such a good breakdown of the leerob article, that is hitting everywhere right now.  Feels like sanity was just a bit late to getting things right and it would have just worked for them how leerob was trying to use it, but MCP sucked so he jumped.\n\nReading their loose descriptions of a CMS, its an interesting realization to realize I'm rolling my own cms.  I kinda feel like theres a few inspiration features to take from here, but I have no regrets.  As a developer I like being able to build my own tools, I like being able to search and edit from nvim, and not have to write GROQ queries, and transforms.  There were some really good points here that as I get more and more content on my personal site, I do kinda feel it.  I'm surprised there is not more tooling that does some of these things for piles of markdown.\n\npinning this to re-read later, feels like a lot of good tidbits here.","published":true,"public":true,"date":"2025-12-17T15:21:41.228607","id":894,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(103) The Github Tax (I can't believe they actually did this...) - YouTube","link":"https://www.youtube.com/watch?v=xTSar1SEmIU","tags":"dev","message":"It really feels like M$ is coming down hard on GH lately to make some unfavorable decisions for users.  Maybe there is good reason for all of these changes from a business perspective, I can't judge that.  But right now there are some really great alternatives out there.  I'm so grateful for what forgejo and gittea offer, and at the same time seeing the community get split up from GH is sad.","published":true,"public":true,"date":"2025-12-17T15:04:09.392649","id":893,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hollow Knight: Silksong - Sea of Sorrow Teaser","link":"https://www.youtube.com/watch?v=qDFEeeLy6ws","tags":"gaming","message":"Silksong DLC announcement already, we waited 8 years for the game, and are getting DLC's months after launch.  Dudes I haven't even finished the game get, maybe not even half way.  It's amazing.  Its amazing that these three make such a kick ass game with great art, story, voice, gameplay, and now drop a free dlc in 2026.","published":true,"public":true,"date":"2025-12-16T04:28:37.980625","id":892,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"AI, DevOps, and Kubernetes: Kelsey Hightower on What’s Next - YouTube","link":"https://www.youtube.com/watch?v=HdUbTyvrfKo","tags":"kubernetes","message":"Kelsey has a really good lightbulb moment here about platform engineering.\n\n> \"if you had to do all the deployments for the entire company what questions would you ask of the development team?\"\n\nThat's your api, your platform, this is your product as a platform engineer.  It's not images, docker, terraform, hcl, yaml, kubernetes, It's building out the right api for your company to deploy its products effectively.\n\nhttps://www.youtube.com/watch?v=HdUbTyvrfKo&t=429s\n\n> timestamped","published":true,"public":true,"date":"2025-12-13T04:07:15.357911","id":891,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Why is Everyone So Wrong About AI Water Use?? - YouTube","link":"https://www.youtube.com/watch?v=H_c6MWk7PQc","tags":"ai","message":"I did not realize all the places to be considered as AI water usage.  Hank goes deep highlighting all of the sources he is aware of, most reports leave off a lot of these sources, some reports go maybe too far adding sources that may not make sense depending on the question you are asking.\n\nAs someone that runs computers with gpus in their house, and watching LTT make AIO installs on GPUs I've wondered what would AI use water for, now I understand that its a lot. No where near agriculture, but a lot.\n\nUnlike running a gpu in your house, potentially with a closed loop AIO, data centers are filled with hardware making heat and it all must go somewhere.  Current technology has this done with evaporative cooling, i.e. its not a closed loop, the water goes into the sky.\n\nHe goes on to point out that its not just the data center, using water, but also chip fab and power plants.\n\nSomething I hadn't put a lot of thought into is the type of water.  While a lot of agriculture and power applications do not use municipal water, a lot of data centers do, putting excess strain on water treatment.\n\nSomething I find interesting is that Altman is doing the same thing here that he does on his financial numbers.  Stating they use almost nothing on inference.  Missing training, missing training for models that turned out to be a flop and never made it anywhere, but they learned how to make better models from it.  Missing chip fab, construction, transportation, and power.  The way report numbers bases on a small subset of their entire business feels wrong.\n\nAnyways Hank does a great job at saying this is not a simple answer, its complicated.  Things are moving so fast that its hard to be accurate, its hard for infrastructure to keep up.  There's a lot more to think about than the water use on a single query.\n\n","published":true,"public":true,"date":"2025-12-09T14:39:18.907375","id":890,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Notes – 05:09 Tue 9 Dec 2025 – David Bushell – Web Dev (UK)","link":"https://dbushell.com/notes/2025-12-09T05:09Z/","tags":"social","message":"Age verification hitting bluesky?? At least its not yet requiring your govt issued id or anything, but stepping that direction.  I don't know how I feel about age checks, does it actually protect kids when parents aren't involved?  I can't say anything there, but it really does feel like its about ready to hurt the rest of us, requiring us to whip out ids and personal data for anything done online.  This is a real problem that is hard to solve, and reasons why it has not been solved yet.","published":true,"public":true,"date":"2025-12-09T14:08:20.336279","id":889,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Deprecations via warnings don’t work for Python libraries","link":"https://simonwillison.net/2025/Dec/9/deprecations-via-warnings/#atom-everything","tags":"python","message":"Deprecation warnings are so easy to miss, ignore, become numb to.  Creating tools and processes to catch and address these issues is important.  I'm surprised such big projects let deprecations just hang around for years.","published":true,"public":true,"date":"2025-12-09T14:01:29.395194","id":888,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A quote from Claude","link":"https://simonwillison.net/2025/Dec/9/claude/#atom-everything","tags":"ai","message":"damn this is a rough one.  A users entire home directory removed by claude code from an rm command.\n\n``` bash\nrm -rf tests/ patches/ plan/ ~/\n```\n\nReading the first half of that command it LGTM.  If you had approved rm, you are hosed.  If  this is inside a larger script its running, you really gotta read close.  This one still feels pretty obvious, but I can imagine some bash doing some nasty things I miss if I read it and understand it let alone glance at it.\n\n\nI'll take this as a reminder that I really need to be paying full-ass attention to agents, and moving towards a better sandbox for them, something in docker, maybe something like distrobox that is a magic wrapper over podman that just gives you the things you need for what it does.  Something that starts up with access to start web servers, run agentic cli of choice, see project, git commit.  It feels like the right thing has a lot of what distrobox does, but distrobox has too much and would be prone to this using it as I've used it in the past.","published":true,"public":true,"date":"2025-12-09T13:56:30.133324","id":887,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"3d Printing a Geared Vice - Will It work? - YouTube","link":"https://www.youtube.com/watch?v=9z8XdJnQp1A","tags":"woodworking","message":"This looks like a really good low cost option for some workholding.  There is never a shortage of workholding in the shop and everything has a place.  Having something low cost that you can have a bunch of makes a lot of sense.  Maybe you still need a super scucum unit for really clamping the shit out of something, but this easily covers most use cases in a garage workshop.  I want to build it.","published":true,"public":true,"date":"2025-12-07T21:28:39.551112","id":886,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Steam Machine CAN Start at $399 with THIS SKU! | Cut Down Yields - YouTube","link":"https://www.youtube.com/watch?v=v1JN8nCD1JM","tags":"gaming","message":"Moore's Law is Dead pitches a pretty ingenious sku for the new gabecube aka steam machine.  I fully support repairability and ewaste reduction. most of these components have not had **MAJOR** improvements in years, hence his channel name.  There is a possibility here that Valve could ship with their unique hardware, (apu, psu, case, ports, networking) and let you bring your own ssd and ram from an old device that you might not use anymore.  I love this idea.  At the same time it feels like entering the star wars universe where there are no more new manufacturing and everything is cobbled together from old hardware made long ago.","published":true,"public":true,"date":"2025-12-07T17:24:50.698106","id":885,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(85) You’ll own NOTHING and be happy? - YouTube","link":"https://www.youtube.com/watch?v=S45rLuY48w4","tags":"","message":"What a heart breaking video to listen to.  I'm trying to do a better job of being positive right now.  I'm trying to look at the world in what I have control over (not much more than my attitude about it).  AI is killing so much right now I'm trying to look at it as the good tools the engineers made it to be.  Ownership is dying around every goddamn corner.  Hats off to Edison, this guy gets it.  We need more companies like this taking a stand for the average person who wants to make it out there.","published":true,"public":true,"date":"2025-12-06T21:33:15.648818","id":884,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Secret of the AWS Outage | The Standup - YouTube","link":"https://www.youtube.com/watch?v=r3bPmtEP9SQ","tags":"cloud","message":"What a great campfire story Casey stumbled into.  Whether any of this is true few will ever know, but its very reasonable that a race condition and a stalled job to apply configuration caused by someone who left the company 10 years ago caused an outage.  I find it hilarious that they call this guy he answers, yup I still know the password, but how do I know you're legit, I'm not just handing out the password.  Casey did a stand up job telling this story.","published":true,"public":true,"date":"2025-12-06T21:29:48.423261","id":883,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Building the PERFECT Linux PC with Linus Torvalds - YouTube","link":"https://www.youtube.com/watch?v=mfv0V1SxbNA","tags":"ai","message":"Linus is [[ techbrophobic ]] like the rest of us.  This is such an unexpectedly mild take from him.  I expected some threat to the mother of the vibe coder, but he gave a pretty great middle of the road take.  The industry sucks, it smells off, we know a lot wrong with it, it feels like theres a lot more wrong than we know.  But the tools that its making are really good when used in the right ways.  They are not a replacement for anything, they are assistive.  They can lift someone from not knowing how to code to making a small webapp for their use.  Someone who wants to write backend and give them a decent front end, someone who whats to write front end and give them a decent backend.\n\nGreat take from someone with more experience than most can ever dream of having, worth a listen.","published":true,"public":true,"date":"2025-12-06T21:23:37.289850","id":882,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"snow-fall Web Component—zachleat.com","link":"https://www.zachleat.com/web/snow-fall/","tags":"webdev","message":"This is a very fun way to add some whimsy to your site, added it to mine immediately when I saw it.  This is what digital gardens are for, Fun, entertainment, and self-exxpression.","published":true,"public":true,"date":"2025-12-06T15:25:11.805593","id":881,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The 3D Printed Ball Vise Every Creative Should Own - YouTube","link":"https://www.youtube.com/watch?v=bQhVKB64r4U","tags":"3d-printing","message":"This ball vise Idea is incredible and I want one.  Its a heavy workholding unit that can accept a variety of tools and manipulate things to a lot of angles while working on them.  This looks really good for painting miniatures soldering or generally working on small 3d printed parts that I do.","published":true,"public":true,"date":"2025-12-06T15:22:45.774532","id":880,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Deleting Code for Performance – David Bushell – Web Dev (UK)","link":"https://dbushell.com/2025/12/04/deleting-code-for-performance/","tags":"blog","message":"I did not realize that David's site was built on a homegrown Static Site Generator.  As someone who also does this myself I appreciate the effort.  I build my site on [[ markata ]].  It started as a project to learn a set of tools and has become a project that I depend on everywhere and cant put down.  It's a great tool, but you probably shouldn't use it.  Anyways, I feel this **really** shows on David's site. His site is filled with custom features that make it very unique, one off, and always a pleasure to read.","published":true,"public":true,"date":"2025-12-04T16:12:19.912929","id":879,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Self-hosting Github","link":"https://www.youtube.com/shorts/MhZQTnfo8Ok","tags":"self-hosting","message":"Niche companies will rise from the ashes.  Companies that want to build good products for customers.  Companies that will get hundreds of users.  They will treat them right and make enough money to support themselves, maybe.\n\nAlongside them we will self host.  We will run our own services out of our basement.  There will be downtime, but its ok.  We will enjoy ourselves. We will tell everyone how much better it is BTW\n\nNext to that is a firehose of shit piling back into the circular snakes mouth as all of your data flows freely between any company that can get their hands on it.  These companies will spend and make money hand over fist. Most people will continue to use these services until enough is enough and unplug from everything.\n\nIn this world I don't see how we sustain the amount of engineers we have created.  Small companies run lean, small, and allow slow organic growth happen.\n\nIt will be interesting to see play out.\n\n![](https://dropper.wayl.one/file/95ae2a95-308b-4d1d-bff8-8ce6194db132.webp)\n","published":true,"public":true,"date":"2025-12-02T03:45:10.133166","id":877,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Malicious Traffic and Static Sites - Jim Nielsen’s Blog","link":"https://blog.jim-nielsen.com/2025/malicious-traffic-on-static-sites/","tags":"blog","message":"These look like fun endpoints to add anti-maliciously, give good stuff for the sleezy things to read.","published":true,"public":true,"date":"2025-12-01T21:41:03.811282","id":876,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A ChatGPT prompt equals about 5.1 seconds of Netflix","link":"https://simonwillison.net/2025/Nov/29/chatgpt-netflix","tags":"ai","message":"This feels very promising for the future as we enter a world that is more and more dependent on AI that inference is so cheap.  I did not understand the scale to how much cheaper inference is compared to training.  As we get better with training I imagine this gets significantly better as well.  I know they all claim to be profitable on inference, but scrolling through Simon's feed here you see several articles on the stark difference.","published":true,"public":true,"date":"2025-12-01T21:34:30.350215","id":875,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A pretty good email scam","link":"https://cassidoo.co/post/email-settings-scam/","tags":"tech","message":"scams suck.  This is a good story, sorry to hear that it happened to a real person.  If you or anyone in your family has a compromised email, add these to your checklist to fix. \n\n* automatic forwards\n* 2-factor email","published":true,"public":true,"date":"2025-12-01T18:22:02.887406","id":874,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"2025-11-27 Notes","link":"https://pype.dev/2025-11-27-notes/","tags":"dev","message":"Nic is also building out a similar workspaces script.  This feels like such a great thing to have ai work on fully customized tools for your personal workflow.  Also Nice shout out!","published":true,"public":true,"date":"2025-12-01T17:28:13.250972","id":873,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"K8s Diagram Builder - Free Visual Kubernetes Architecture Designer & YAML Generator","link":"http://k8sdiagram.fun/","tags":"k8s","message":"This looks like great prototyping tool for k8s. I too often ask ai to get me going with the things I need.  I've used k8s long enough that I can generally remember all the things I need, roughly where they go, would probably forget a few things and need to iterate, but I cannot remember exactly what goes where and need examples at a minimum.  I need to give this a go from desktop and see if it will work for me.  Right now looking through mobile looks promising.","published":true,"public":true,"date":"2025-12-01T14:10:55.299017","id":872,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Microsoft keeps losing - YouTube","link":"https://youtu.be/AyuMdNoL1Vs?si=QQ3BoV33nXR_TPnC","tags":"linux","message":"👏👏👏preach it prime!  M$ continues to prove that they are not making products for you something else is affoot and shit you don't want is shoved down your throat and forced on you.\n\nPrime points out that the agentic is prompt injected itself😂.  Rather than making a better os experience it's assuming you are stupid and need everything done for you.  But what I don't get here in the text scaling example.  Why the F does it not just fix it for me.  When I ask the machine to make text bigger it puts a flashy circle where to click.  This is a one time setup for someone who gives no fucks to remember how to do it.  Why is the machine doing this weird hand holding watching us do it's work rather than just doing it? I like the pattern when you change display setting it gives you a counter that reverts everything if for some reason shit is so bad you can't even see it.  Do that, not this help me click bs.\n\nNow in parallel we have steam making Linux desktop better and better.  Allowing you to just access the hardware you own to do what you want to do with it.  Providing a fantastic hands off out of the box experience for the price of the hardware.  No ongoing fees, no upgrade cycle, soft lock, aribraray cutoff date, tpm bs requirements.  Good stuff as it was supposed to be created.","published":true,"public":true,"date":"2025-11-15T17:51:23.601031","id":870,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"PETaflop cluster - Justin Garrison","link":"https://justingarrison.com/blog/petaflop-cluster/","tags":"kubernetes","message":"Justin makes the coolest kubernetes clusters wishing I could see it in the flesh at Kubecon.","published":true,"public":true,"date":"2025-11-12T17:44:41.174388","id":869,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ChatGPT made me delusional","link":"https://www.youtube.com/watch?v=VRjgNgJms3Q","tags":"ai","message":"Absolutely banger of a video, what a wild idea to send gippity a bit off course and just see how far off the rails it will go.  Dude did a banger of an edit on it.  I'll admit that I listened to the whole thing, but did not watch much, saving here as I might go back when I have time to really watch it.  It was really weird how easy it was for chat to say something that could be true, but nearly no chance of it actually happening over and over and just keep it going down this dark spiral of conspiracies.  It was ready to electrocute him and separate him from anyone who had a chance of being a non believer.  At any moment was ready to say that those closest to him might be his problem.  gipity is not your friend, or your therapist.","published":true,"public":true,"date":"2025-11-12T02:35:21.285251","id":868,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Post | LinkedIn","link":"https://www.linkedin.com/posts/anton-martyniuk_mark-zuckerberg-scaled-facebook-in-2005-activity-7393550498584371201-iqDA/?utm_source=share&utm_medium=member_desktop&rcm=ACoAACM7I2cBosNBb12iAVlY0IZbLYYHgFOyIg4","tags":"catalytic","message":"Lean on your skills and your goals. If your goals are to have fun, use whatever you want. If you are looking for a job, Lean on tech that bridges the gap between your resume and the job you want. If you want to build a good product use the tech you are best at. No one in their right mind would throw away 20 years of tech progression because Zuck built facebook ftping php to a server.\n\nThe sentiment in this post is fine at best the picture feels triggering and oversimplies  way too much.  If you like kubernetes [[ just-fucking-use-kubernetes ]].\n\nThis topic deserves a full on post, maybe later.","published":true,"public":true,"date":"2025-11-11T02:43:05.285565","id":867,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ford Thinks We're Cooked, I agree- YouTube","link":"https://youtu.be/TyCR8YpvqhE?si=VmV389UaBzGbjdO-","tags":"automotive","message":"Are we cooked?  Are we?  Yes the consumers are cooked there are no more affordable cars with basic shit that you need to go point a to point b.  Ford make us cars we can afford and you won't be cooked by this dumb shit.  If you can market it?  \n\nMost people don't care what sticker price is and only the monthly payment.  This is why we are cooked.  We stopped caring that these things cost way too much.  I'm probably in a small minority that just want an affordable reliable vehicle and could care less about features past climate control.  I don't use them.  My phone has maps and music I don't need a screen in my vehicle for anything.","published":true,"public":true,"date":"2025-11-06T16:35:18.403337","id":866,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I refuse to change the way I play… 😂🔥 #comedy #videogames #minecraft - YouTube","link":"https://www.youtube.com/watch?v=2TUER4JftGA","tags":"minecraft","message":"Microsoft has been addding features to Minecraft for over 10 years now.  Idk if there was momentum from the mojang theme, but we've barely paid attention to any updates in the last five years.  The ocean update was huge, caves and cliffs were huge then it trailed off to we play each release on release day, use commands to try out new features, then never touch them again either to play minecraft as we always have or to play a modded pack with crazy new features that really make an impact on gameplay.","published":true,"public":true,"date":"2025-11-02T16:12:02.382366","id":865,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(33) Rewriting SQLite from prison with Preston Thorpe - YouTube","link":"https://www.youtube.com/watch?v=AEPf9zUI_fQ","tags":"database, oss","message":"Absolutely incredible what Preston is doing with his time.  What a life changing experience this must be for him.  Good job to Turso for making this happen.  We are going to end up with very feature rich file based databases out of this that the whole world will benefit from.","published":true,"public":true,"date":"2025-11-02T15:46:38.529535","id":864,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"STOP. Using AI Right now - YouTube","link":"https://www.youtube.com/watch?v=qw4fDU18RcU","tags":"","message":"Absolutely love this selfhosted arc of pewdiepie that is going on right now.  It's crazy to witness now fast he is picking up linux / self hosting, and sounds like soon will be programming.  In this one he built a $20k AI beast that crushes gippity with power, speed, proximity, and security.  No one to take your data, no latency to the data center, no one else bogging down your prompts, just raw speed.  It looks absolutely wild.  He implemented RAG and gave it a bunch of data about himself and its able to spit out his wife's name and phone number in under a second.  It writes code at blazing pace.  This may be the future that we get over the next few years as things shift towards AI there will be more affordable options, and a larger second hand market for building out these highly capable machines.","published":true,"public":true,"date":"2025-11-02T15:42:29.914369","id":863,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Glorious Pipe Operator (Elixir for PHP Devs) | Jesse Leite","link":"https://jesseleite.com/2025/the-glorious-pipe-operator","tags":"software","message":"I'm so glad that python supports method chaining out of the box, very similar to the pipe operator that Jesse mentions here.  It makes everything much more readable to follow the flow rather than needing to parse nested funcion calls `out(inside())`.","published":true,"public":true,"date":"2025-11-02T15:36:24.011783","id":862,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"is AI ruining opensource? - YouTube","link":"https://www.youtube.com/watch?v=kP93L683UOE","tags":"oss","message":"I greatly appreciated the wide variety of experienced maintainers of large oss projects.  From webdev to desktop application.  The most common sentiment here was don't contribute to open source just to contribute to open source. Bring something meaningful to the project.  Find a project you like, look at the discussions/issues for work or start some discussions.  If there are no meaningful features that you can add to projects that you use and love, make your own thing.  Adam from tailwind really hit on this one several times.  He has made tailwind extensible so that you **don't** have to contribute to tailwind to get new capabilities, you can probably just extend tailwind with your thing.  Its likely that it makes a lot more sense or your use case, and if it turns out that it makes sense for everyone have the discussion about bringing it in.  The upside to small oss projects is that you can move at whatever pace you want and break them all you want when the user base is just you.  As you move your stuff into tailwind you have to be very careful not to break the massive tailwind user base and you have to bend to the release schedule of tailwind.\n\nThe other adjacent topic that kept coming back is that low effort Prs are definitely on the rise with some of the projects.  Refactor PRs get automatically closed because they are likely LLM driven, bring little to no value to the project, but bring a ton of risk.  Don't do this to maintiners.","published":true,"public":true,"date":"2025-11-02T15:31:24.746938","id":861,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"You already have a git server: (Maurycy's blog)","link":"https://maurycyz.com/misc/easy_git/","tags":"git","message":"It's so easy to forget low level tech sometimes.  Things that are dead simple and just work without a hitch.  `git` is one of those rock solid things thats very easy to remember all that it does, this is a classic use case.\n\nThis just works\n\n``` bash\ncd /parent/directory/for/repo\ngit clone ssh://username@server/path/to/repo\n```\n\nIn order to recieve you must update the remote to allow recieve.\n\n``` bash\ngit config receive.denyCurrentBranch updateInstead\n```\n\nNow you can pull update push.  \n\nIt's funny how this was the way I first learned to do Continuous Deployment to a RHEL7 machine, also how Heroku worked, but its so easy to forget this solution is there.  I come across it every few years and immediately have a few use cases in mind.","published":true,"public":true,"date":"2025-10-29T13:04:20.028524","id":860,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Please don't give Reflect Orbital money: (Maurycy's blog)","link":"https://maurycyz.com/misc/sunlight_as_a_service/","tags":"science, solar","message":"Well done write up about reflecting solar energy back to earth from low orbit space.  I did not know this was a thing, apparently it is/isn't.  Solar is a great technology, its largest limitations are that its not consistent.  This tech does not fix this problem, what does is efficient long term storage.  I've seen some crazy ideas going back to my days in school, maybe elementry school.  Theres a lot of innovative ways to store potential energy by moving heavy objects uphill whether fluid or solid.  The issue is that energy storage at grid scale is HUGE and not efficient enough.  Even assuming this idea had any legs at all, it still doesn't solve the problem of inconsistent power because it still cant go through clouds!","published":true,"public":true,"date":"2025-10-29T12:45:07.974847","id":859,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Post by @letitmelo.bsky.social — Bluesky","link":"https://bsky.app/profile/letitmelo.bsky.social/post/3m4bxweqs3k2u","tags":"gaming","message":"Wild to see the LinkedIn post linked here to see how out of touch this feels.  I find it astonishing that they have something so ingrained into gaming culture as twitch, yet build something like Prime Gaming.  Maybe I have no idea what Prime gaming is, but it feels like the opposite of ownership.  What I get from steam is a sense of ownership.  I own the desktop/laptop/handheld, no one **cough** _nintendo_ **cough cough** cant remotely disable my device for using it inappropriately.  I have a sense of trust with steam that as long as Gabe is alive I own what I paid for and will be able to open up and play anything at any time on any device I want.  It might be a $100 dell workstation raised out of the coorporate refurb bin, it might be a high end machine, It could be my 2010 gateway or my 2045 custom build and they are all likely to play a good amount of my library at some level.  I still understand that I really own nothing and the moment steam turns off its servers its quite likely  that everything is broken, but its by far the best we have.  Far from the status quo we are headed towards with subscription and cloud based gaming.  If they wanted to disrupt steam they did not understand their audience.","published":true,"public":true,"date":"2025-10-29T03:29:25.304652","id":858,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Bazzite on X: \"@thesvpanda @_Messier_33 @LeagueOfLegends Unfortunately that game uses some of the worst spyware in the industry, it will never work outside of Windows with secure boot enabled and TPM hardware. Consider Dota 2 or other mobas by competent developers.\" / X","link":"https://x.com/bazzite_gg/status/1983204433627623590","tags":"","message":"ROASTED\n\n> Unfortunately that game uses some of the worst spyware in the industry, it will never work outside of > Windows with secure boot enabled and TPM hardware.\n> \n> Consider Dota 2 or other mobas by competent developers","published":true,"public":true,"date":"2025-10-28T21:46:30.007346","id":857,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Post by @meredithmeredith.bsky.social — Bluesky","link":"https://bsky.app/profile/meredithmeredith.bsky.social/post/3m46a2fm5ac23","tags":"","message":"Great justification for using the cloud.  The infrastructure requirement for signal to be such a great app would be massive for a small team with low budget.  The cloud is fantastic at unknown scaling, bursts beyond reasonable capacity to run yourself, getting compute **everywhere** in the world, and offloading huge infrastructure management costs.\n\nDHH is 100% right that we have gone too far, too many things come out cloud first for services that can be ran locally **cough** _such as your bed_ **cough cough**.  One week ago when the world came to a hault, I did not bat an eye at these small teams with complex requirements going down with AWS.  \n\nTheir own products seem quite damning to me.  It signals that they cannot themselves become resilient to themselves.  It shows how hard this problem is, how much cost in complexity and resources it requires.  I'm sure there are fail overs that happened successfully that we will never hear about, critical products with large engineering overhead.  ","published":true,"public":true,"date":"2025-10-28T02:16:52.003651","id":855,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ellie Huxtable on evolving Atuin (her shell history tool) for the desktop with Rust and Tauri - YouTube","link":"https://www.youtube.com/watch?v=OK3HrqDXqtU&t=1675s","tags":"cli, tui","message":"Atuin desktop sounds dope AF, tried to install it off the AUR and it was broken for me.  Seems early and the dev team is all in on mac.  They have an official .deb and .rpm.  I'll have to try again later, maybe the binary will work.\n\nThe idea of building out runbooks from my Atuin data sounds dope AF.  It sounds like a mix of markdown and executable cells like a jupyter notebook, but not.  Really pitching hard to those of us in the system administration, dev ops, SRE space.  Having something that you walk through when a system goes down and you are feeling panicked in DR mode sounds relieving.","published":true,"public":true,"date":"2025-10-24T00:53:16.156733","id":854,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"My Bed Doesn't Work Because of AWS Outage? TheStandup - YouTube","link":"https://www.youtube.com/watch?v=J893_8HlkPM","tags":"cloud","message":"Cloud is cooked bois.  Seriously too much dumb shit relies on the cloud.  Too much critical shit relies on single AZ's.  If normies are literally loosing sleep over an AWS outage (queue the Uncle Roger Voice), You've Fucked up.  It's wild to even think about a bed relying on the cloud let alone fully stop working when UE-1 goes down.  I want to live in a world of opt in FEATURES, things that bring value to a product because it makes it better.  Somehow a bed smells suspiciously like a cash grab for a subscription because its cloud connected.  And yet for some reason it takes 16GeeeBee's per month.  I don't own one of these, and I don't want to.  I don't want a subscription for everything, I want my shit to just work.  The future we are headed towards a world that is ever more reliant on a few key clouds.  Which is fine.  It's fantastic that small companies can start and scale without owning an infrastructure team.  It's great that they have the ability to give us many nines of reliability.  Some things just don't need the cloud.","published":true,"public":true,"date":"2025-10-24T00:48:31.201047","id":853,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"#artificialintelligence #hiring | Gary Vaynerchuk | 20 comments","link":"https://www.linkedin.com/posts/garyvaynerchuk_artificialintelligence-hiring-activity-7387261666289373184-BOIo","tags":"ai, catalytic","message":"More Human stuff that's what we will be doing.  Less looking at docs, more architecting (which suspiciously looks like writing docs), more decision making, more explaining.  This is a good positive take on AI right now.  ","published":true,"public":true,"date":"2025-10-24T00:39:49.240844","id":852,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"This Web Server Is 100% Solar Powered - YouTube","link":"https://www.youtube.com/watch?v=Gz56Cm-B6kg","tags":"webdev","message":"This is super cool, thanks to Brodie for reading me this content as I do household chores.  [lowtech magazine](https://solar.lowtechmagazine.com/) is a website ran completely on solar power with only enough battery backup to cover most days.  Adding enough to cover all days would increase its carbon footprint and negate the carbon offset of the solar panels it runs on.  \n\nIt's fascinating to see a web server running completely off grid in a close power system.  These interesting websites are fascinating keep em coming Brodie.","published":true,"public":true,"date":"2025-10-11T22:21:38.624589","id":851,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"2025 The Year Of The Linux Desktop - YouTube","link":"https://www.youtube.com/watch?v=GQJZ96l-XQ4","tags":"linux","message":"The Year of the Linux Desktop is a meme, every year is the year of the Linux desktop as it gains rounding errors of market share.  Outside of Linux nerds, developers that use servers on the regular, cheap asses reviving old hardware that is dead in the eyes of other OS's, the average user wont even notice a difference with the right distro.  I ran bazzite with plasma for over a year, It would be super beginner friendly while allowing users customization on levels never seen on non-Linux machines.  Other than adobe, roblox, and EA games with easy anti-cheat most users probably aren't going to run in to any issues.  They probably wont even notice at this point, which is where the meme comes in.  Why would anyone switch if its not noticeably different for the average user, they wont, until what is working for them stops working for them.","published":true,"public":true,"date":"2025-10-10T13:14:37.744025","id":850,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Litewind","link":"https://litewindcss.com/","tags":"webdev","message":"This is a sick no-build version of tailwind.  I have a couple of projects that the build step of tailwind is cumbersome on, mostly because they are for non-js devs.  Some are for backend python devs, some are for folks that mostly want markdown with some styles.  This is a perfect no-build tailwind alternative.","published":true,"public":true,"date":"2025-10-05T01:12:20.785374","id":849,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"python 3.14 highlights! - YouTube","link":"https://www.youtube.com/watch?v=-Z-BDux-TRk","tags":"python","message":"anthony has some of the best python highlight videos each year.  This might be a good sign, but each year there seems to be less and less that I am chomping at the bit to get to.  I thought the remote debugger looked every interesting, his use case for `babi` seemed very interesting.  I wonder what textual would look like built in a 3.14 world, would it still have built its own debugger/console?\n\n``` bash\nuv tool run --python=3.14 babi\n```\n\nWithout a process flag you need sudo permissions to attach a pdb debugger similar to gdb.\n\n``` bash\nps -ef | grep babi\nuv tool run --python=3.14 python -m pdb -p8605\n```\n\n![screenshot-2025-10-03T01-11-02-918Z.png](https://dropper.wayl.one/api/file/b5e1a34d-c198-440a-ab30-4498bfa6962a.png)\n","published":true,"public":true,"date":"2025-10-03T01:04:57.877625","id":848,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"This $15 Fingerboard Mold from Amazon SHOCKED me!! - YouTube","link":"https://www.youtube.com/watch?v=GAudJhMrqwo","tags":"fingerboard","message":"This is a pretty sick result, good fingerboards are stupid expensive.  This looks like a fun way to make some good ones on the cheap.","published":true,"public":true,"date":"2025-10-03T00:59:29.492888","id":847,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"PEP 735 – Dependency Groups in pyproject.toml | peps.python.org","link":"https://peps.python.org/pep-0735/","tags":"python ","message":"PEP 735 describes dependency groups as sets of optional dependencies that are not shipped with the package but intended for development purposes.\n\nThe PEP includes an example for groups that include test, docs, typing, and a combo typing-test.\n\n``` toml\n[dependency-groups]\ntest = [\"pytest\", \"coverage\"]\ndocs = [\"sphinx\", \"sphinx-rtd-theme\"]\ntyping = [\"mypy\", \"types-requests\"]\ntyping-test = [{include-group = \"typing\"}, {include-group = \"test\"}, \"useful-types\"]\n```\n\nThis is implemented in uv and can be used by several of their commands.\n\n``` bash\nuv sync --group test\nuv run --group test\nuv add --group test pytest\nuv remove --group test pytest\nuv export --group test\nuv tree --group test\n```\n\n## Dependency Groups are not Extras\n\nThe docs describe extras as being intended to ship with the application and dependency groups intended for development.  The spec allows both to exist with the same name, but care should be taken as tools may have different implementations.\n\n>  Tools MAY choose to provide the same interfaces for installing Dependency Groups as they do for installing extras.\n>\n> Note that this specification does not forbid having an extra whose name matches a Dependency Group.\n>\n> Users are advised to avoid creating Dependency Groups whose names match extras. Tools MAY treat such matching as an error.","published":true,"public":true,"date":"2025-10-01T16:25:57.931729","id":846,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Running Software on Software You’ve Never Run","link":"https://blog.jim-nielsen.com/2025/run-software-on-software-youve-never-run/","tags":"dev","message":"Running software applications in production today is crazy.  One point release opens up for supply chain attacks.  What's crazier is not running your production applications without a lock file, potentially running dependencies you've never ran before for the first time in prod.","published":true,"public":true,"date":"2025-09-29T18:54:45.784106","id":845,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Using Litestream to Restore My Database for Easy Development","link":"https://pype.dev/using-litestream-to-restore-my-database-for-easy-development/#Update","tags":"sqlite","message":"I really like how well the local dev is setup to run off of production data here.  I'll use this as a reminder that I need to set up lite stream on a few of my projects that it's missing from and include a nice sync prod data [[ justfile ]] recipe.\n\nLitestreams interface always throws me for a loop.  It works fantastic,  but the global config stored in /etc and some of the commands break my brain.  It's not you it's me.\n\nUsing real data when you can is goated.  Fake data is so often a perfect example of what someone thinks the backend should look like and does not include things that users actually do, running pipelines for days, or setting titles to paragraphs worth of text.  Obviously this is not possible everywhere and the more sensitive your data the harder that process becomes.","published":true,"public":true,"date":"2025-09-29T18:49:12.987469","id":844,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"TIL: Loading .env files with uv run","link":"https://daniel.feldroy.com/posts/til-2025-09-env-files-with-uv-run","tags":"python","message":"I smell a dependency to `python-dotenv` dying in my workflow.  I originally read the title of the post and thought, \"I know how to manage .env and almost skipped it\".  I'm leaning more and more on `uv run` these days, so this should [[ just ]] go in my [[ just file ]] to make it easy to run.","published":true,"public":true,"date":"2025-09-29T18:42:01.187264","id":843,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A quote from Dan Abramov","link":"https://simonwillison.net/2025/Sep/27/dan-abramov/#atom-everything","tags":"social","message":"Interesting catch from the HN discussion over his [article](https://overreacted.io/open-social/) that came out yestereday.  I scanned it yesterday and it has some really fascinating diagrams showing different phases of the web being open, to being siloed, to somewhere that we are trying to make it easy to publish, and retain ownership.  I don't know enough about bluesky, but the core is build on the AT protocol, you can self host your own instance, you can build different front ends for it.  So rather than having siloed instagram, FB, twitter, there are clones of those platforms that read the same data from everyones data, that they have the option of self hosting.  \n\nI like this distinction between Mastadon here.  Mastadon can also be self host, but its data aggregation is decentralized, so each instance is fragmented and cannot have a complete view of the data.  The way that the ATproto does its aggregation is quite fascinating and feels right for an open social platform.  I'm probably missing something, but if you are posting to one of these platfoms publically, why not have the data available to all of them, if you don't want it shared it probably belongs somewhere more private anyways and there are platforms for that.","published":true,"public":true,"date":"2025-09-27T16:11:23.613618","id":842,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"This printed design holds a steel tube where the tube goes. #opensourcehardware #conduit - YouTube","link":"https://www.youtube.com/shorts/PWyZB1nha_o","tags":"3d-printing","message":"This is a super cool movement, I like the idea of giving access to composable components like we have in open source.  You want to build a website you have a bunch of options from raw dogging assembly all the way up to predefined templates that just need your content.  Idk if the analogy is perfect but there are aspects of it that work.  I see where right now we are somewhere in raw dogging c or python.   We have cheap nuts and bolts and some low level things, but once someone needs some coupler like this it's dropping down to drawing it by hand.","published":true,"public":true,"date":"2025-09-27T02:16:06.094608","id":841,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Print over Part - YouTube","link":"https://youtube.com/shorts/ED2olTp8wGw?si=UU_E2dlREhavlzJc","tags":"3d-printing","message":"Wow, I've never seen or thought of multi setup parts this is very thought provoking, not sure how useful it is as we have good adhesives and stuff for printed parts.  I definitely want to try this though ","published":true,"public":true,"date":"2025-09-26T14:15:24.316299","id":840,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Haiden Deegan IN for Motocross of Nations?! | The Blair Matthes Project 032 - YouTube","link":"https://www.youtube.com/watch?v=kZvk4dUyWVs","tags":"moto","message":"I can't believe this thing is so devicive.  I kinda can't belive that I sit on the same side as Mathes and his always against the grain, non corporate influenced response.  So many others have praised Haiden for bringing back the real gladiator bloodsport that SX is, is it that though??  It's a race to the finish.  different than a lot of other racing its very unpredictable takeout moves happen, occasionally as an accident, often taking both riders down at the same time.  \n\nAlso different than MANY sports we have a huge industry of weekend warriors, Some of which make it into the night show of the biggest race on TV.  You see we only bring 20 riders from each class, the top half to top quarter are \"Factory\" riders, the rest are privateers, sometimes these privateers are completely their on their own.  \n\nThere is also something called a last chance qualifier.  This is your last chance to get into the night show, often fought by these privateers out of box vans with their brother as a mechanic.  Often that last spot is filled by sketchy on edge riding and takeout moves from a rider that looks like he is barely making it, but would run circles around anyone at your local race.\n\nWe celebrate these as a fight to the finish, anything goes, you just gotta cross the finishline.\n\nWhat's different here from last weekend (someone could really write a book on the build up of tension, shit talking, lack of harsh penalties in the rules) is really that Haiden had zero shot at the championship.  He was winning the race, Joe in Second with a secure championship.  This is when Haiden started riding behind him, slowing down for Joe to catch up, and taking shots at Joe until he broke his own collarbone.  He went out knowing he needed to knock Joe down enough to cover the points deficit and the penalty.  This was not a pass for the win, or a pass for the last spot in the night show, this was a pass to clear a deficit which required Joe on the ground.\n\nThis seems to be celebrated by half the industry, but dude you had already lost going into this night this aint cool, you lost this one put on a face let Joe have his moment, make your statement by going one one and crushing these dudes by 30 seconds metaphorically, not literally crushing them.","published":true,"public":true,"date":"2025-09-26T12:36:26.110969","id":839,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Chris Joslin 360 Flips El Toro!!!!! - YouTube","link":"https://www.youtube.com/watch?v=5cRKSwWSd5U&t=631s","tags":"skate","message":"Epic that this Joslin came back 7 years later to complete this.  I thought el Toro was dead, aparantly not.  Dude got robbed by a broke ass truck, this must have been eating his soul for the last 7 years.","published":true,"public":true,"date":"2025-09-20T15:58:45.692699","id":838,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Big W: A Family Tradition","link":"https://www.bigwengineering.com/post/big-w-a-family-tradition?utm_source=linkedin&utm_medium=blog.post-promoter&utm_campaign=b9f7c31c-6725-4253-bb37-b10502942676","tags":"catalytic","message":"I first met Adam in college, he seemed like quite a character on the outside, but was always quite smart and often leaned towards realistic solutions to problems rather than over complicating things.  He was part of the SAE Formula car, well known for taking a simple problem and trying to turn it into a real formula one carbon fiber solution.  I remember a period where he was a fan of old world blacksmithing as they would say at the time.  He even got a few very simple and light parts on the car that were easy to make unlike the carbon fiber alternatives.  By the time I was there he was more of a leader and did not do a lot of design on any whole system, but would take out class projects for a component or help with some hard problems.  This company feels like it is a great extension of who he was a that time, with about 15 years of professional experience tacked on.","published":true,"public":true,"date":"2025-09-19T14:03:04.889632","id":837,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Meet Gor on X: \"SQLite added generated columns in 3.31 (around Jan 2020) Postgres added generated columns with virtual and as default in v18 (to be released September 2025) There is still a lot to learn in SQL and adoption is still going on, even in the most used databases\" / X","link":"https://x.com/MeetGor21/status/1967818642768470447","tags":"sqlite, db","message":"I've never tried generated columns, but it is something that I'm interested in.  It is nice to have things computed and in the database if you ever need to query on them.  My brain is now churning with possibilities and quesions, does this work with Alembic? How does this compare to views?\n\n![screenshot-2025-09-16T13-52-48-868Z.png](https://dropper.wayl.one/api/file/2b763b3d-1709-47e6-a13d-bfec7baef47d.png)","published":true,"public":true,"date":"2025-09-16T13:54:52.904569","id":836,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(412) Idea to Product in Seconds #PortalPrints - YouTube","link":"https://www.youtube.com/shorts/47CQMbkzX9o","tags":"3d-printing","message":"3d-printing is so freaking cool.  I love the idea that someone could get a hyperspecific tool to their needs for super cheap.  Whether it works permanently or to try out one that you want to spend thousands of dollars on to have well done from some high end materials this is a great application.","published":true,"public":true,"date":"2025-09-16T01:43:59.346142","id":835,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"a new chapter","link":"https://jesseleite.com/2025/a-new-chapter","tags":"dev","message":"Sub to this man.  I met Jesse long ago as we both spoke at the same remote vim conf.  He is into vim, weird keyboards, and medroid what more could you ask for.  Now react and exlixer.  I only know https://statamic.com/ through Jesse, they have the sickest branding ever.  Now I will need to see what this [savvycal](https://x.com/savvycal) is about.\n\nhttps://jesseleite.com/feed","published":true,"public":true,"date":"2025-09-16T01:30:36.512372","id":834,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"\"Pacman is currently in use, please wait.\"","link":"https://bbs.archlinux.org/viewtopic.php?id=67729","tags":"arch, linux","message":"I ran into this issue today, never have I ever before though. Omarchy looking a bit sus on me.  This was even after a fresh boot, no pacman process running. just realized I forgot to check yay which it has installed for me.   I had to force it in.\n\n``` bash\nsudo rm /var/lib/pacman/db.lck\n```\n","published":true,"public":true,"date":"2025-09-16T01:26:33.039531","id":833,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How To Become The BEST Engineer At Your Company - YouTube","link":"https://www.youtube.com/watch?v=Qc_kEyLsXH0","tags":"catalytic","message":"When you fill all of your time with a bunch of other things, it becomes really hard to become a friendly person.  Prime talked about trying to learn how to drop the hurry in his life, and how to not always be in a frenzy of going from one thing to the next.  It's something that puts us in a state that its hard to remember to be friendly.  Hard to remember that [theres always time for coffee](https://www.youtube.com/watch?v=cPgMeKfQFq8).\n\nI do my best to always leave time for coffee, whether at home with my wife and kids, as well as at work.  I am in a very unique place at work where I have a rare set of skills for the industry I am in.  This comes with a lot of people insterested in how to do things like running data pipelines or managing server infrastructure.  I always take time for these conversations, I find them interesting, and useful.  Sometimes you end up with someone who asks the same questions every 6 months, other times, you have someone flourish from these conversations.  I'm not saying to take on work from every other team in the org, but giving 30 minutes to help mentor others can go a long ways.\n\nI'm still not the best, I still get wrapped up in my own stuff just like prime calls out.  I sometimes get frustrated with others around me when things come up that prevent me from doing my work, or just getting the things out of my head that I had momentum on while the lightning was hot.","published":true,"public":true,"date":"2025-09-10T16:08:36.750792","id":832,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ben Dicken on X: \"I am once again begging you to put your database servers and application servers in the same region. https://t.co/DSSFE0k8ta\" / X","link":"https://x.com/BenjDicken/status/1963998076198105475","tags":"cloud, aws","message":"This is a really great animation of latency across different aws regions based on us-east-1.","published":true,"public":true,"date":"2025-09-05T23:45:00.176064","id":829,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hollow Knight: Silksong is breaking Steam, Nintendo’s eShop - Ars Technica","link":"https://arstechnica.com/gaming/2025/09/hollow-knight-silksong-is-breaking-steam/","tags":"gaming","message":"Only 1 hour into the release of silksong, and it's taken down all of the eshops, and steamdb dows 100K concurrent players.  The Humble store ran out of steam keys for silksong already.\n\nYou guys better not break this thing before I get off work and My son gets home cause we are playing this tonight!!\n\nI just Check [steamDB](https://steamdb.info/app/1030300/charts/), and they have 441K concurrent players right now.  An Indie game!  This shows when you treat your fans right and make something incredible they stand behind you.","published":true,"public":true,"date":"2025-09-04T17:20:03.015267","id":828,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Chris Coyier","link":"https://chriscoyier.net/2025/09/02/12693/","tags":"","message":"Everything is becoming political these days!  I hate it.  I regularly hear a friend say these podcasts need to set the politics to the side, but you know what its fukin hard when the gov is upending every corner  of life and rebranding it with their own new twist.  The billionaire class is winning and it looks like there ain't a thing we can do about it.  Here's another example of someone taking head of an office they have no business being in.  An entire set of working class folks let go for this guy to take over.  And what does he want to do, make govt services as satisfying as apple.  Apple is cutting edge, it is not something that is one bit sustainable.  Their launch sites are generally super heavy, hard to scroll, slow, over animated, but damn they are satisfying the first time you scroll through them, after that just let me through.","published":true,"public":true,"date":"2025-09-04T01:43:39.286007","id":827,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Home","link":"https://lospec.com/","tags":"gamedev","message":"My son introduced me to lospec.com, It has a great set of color palettes and amazing pixel art inspiration.  I particularly liked [royal armoury](https://lospec.com/palette-list/royal-armoury) and  of course I'm a bit partial to [hollow](https://lospec.com/palette-list/hollow).","published":true,"public":true,"date":"2025-09-04T01:36:40.602243","id":826,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"GPT-5 + Codex is so fast that when I… | justin․searls․co","link":"https://justin.searls.co/takes/2025-09-03-14h21m54s/","tags":"","message":"This is hilarious, the llm shames him for not utilizing the `--count` flag, THAT DIDN'T EXIST WHEN HE RAN THE CLI!","published":true,"public":true,"date":"2025-09-03T19:27:01.670096","id":825,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Vibe code is legacy code | Val Town Blog","link":"https://blog.val.town/vibe-code","tags":"dev, ai, llm","message":"Brilliantly said.  Vibe coding is legacy code.  It's code that we forget exists.  Code that no one touches, you replace it.  If you touch it you are more likely to break it.\n\n> The worst possible situation is to have a non-programmer vibe code a large project that they intend to maintain. This would be the equivalent of giving a credit card to a child without first explaining the concept of debt.\n>\n> As you can imagine, the first phase is ecstatic. I can wave this little piece of plastic in stores and take whatever I want! ...\n\nRead more in the full [post](https://blog.val.town/vibe-code)","published":true,"public":true,"date":"2025-09-03T02:14:45.705575","id":824,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Rich Pixels","link":"https://simonwillison.net/2025/Sep/2/rich-pixels/#atom-everything","tags":"","message":"I saw this post from Simon and I had to give it a go and got some pretty good results.  His script is a small cli wrapper around Darren Burns's [Rich Pixels](https://github.com/darrenburns/rich-pixels).  It works well even through tmux, since there is no terminal magic, just unicode blocks.\n\n![screenshot-2025-09-02T13-39-25-710Z.png](https://dropper.wayl.one/api/file/024bf3e0-9c38-4c1e-ad5c-ed0156c9a99b.png)\n\n![screenshot-2025-09-02T13-40-22-890Z.png](https://dropper.wayl.one/api/file/4bf522eb-4207-4a23-b5d0-626cefc8bdca.png)\n\n![screenshot-2025-09-02T13-41-39-775Z.png](https://dropper.wayl.one/api/file/d061e85f-98cf-4b3c-871c-e01611022b44.png)\n\nSome not so good, and needed the terminal font size cranked up.\n\n![screenshot-2025-09-02T13-38-16-641Z.png](https://dropper.wayl.one/api/file/a532f113-185e-44ef-bcf8-30eed7e3f62a.png)\n\n![screenshot-2025-09-02T13-38-46-814Z.png](https://dropper.wayl.one/api/file/a66d4d7a-975d-4909-88a2-3761e2d3348f.png)","published":true,"public":true,"date":"2025-09-02T13:43:58.742300","id":823,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(387) Plastic rollers instead of bearings. Little step forward with every version! #BBlauncher #airsoft - YouTube","link":"https://www.youtube.com/shorts/QTPEwmI5epA","tags":"3d-printing","message":"This is a really uniquely designed print in place bb launcher.  I've never seen bb's on a zip tie like that, they look smooth and molded.  Interesting to hear about the design process.","published":true,"public":true,"date":"2025-08-29T13:31:40.611829","id":822,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Learn to use email with git!","link":"https://git-send-email.io/","tags":"git","message":"This site gives us a glimpse into the development workflow using git over email, without remote centralized servers.  I found it interesting how patches can be sent with an optional cover letter nearly like a pr would be made.","published":true,"public":true,"date":"2025-08-29T13:23:08.505847","id":821,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Repository Mirrors | Forgejo – Beyond coding. We forge.","link":"https://forgejo.org/docs/latest/user/repo-mirror/","tags":"git, self-hosted","message":"Forgejo supports repository mirrors, I think this is how I am going to handle migrating all of my github repos into forgejo.  over time I'll probably go through and delete a bunch of unnecessary one from github, ones that might have a user or two I might keep on github.  I have such small scale projects with almost no users I am not sure that It really matters for me or not.","published":true,"public":true,"date":"2025-08-29T00:50:50.269283","id":820,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Vertical combos are dumb, this makes way more sense. · WaylonWalker/zmk-config-42block@48c30d2","link":"https://github.com/WaylonWalker/zmk-config-42block/commit/48c30d2ee4efcdd08266093b5ce79bba5730e6f0","tags":"keyboard","message":"This commit to my keymap gets rid of vertical combos, those were a bad idea to me.  Maybe I didnt give it a shot, but hitting two keys at once on purpose with the same finger is a skill, one that I don't have.  This change maps those symbols so that they work as a combo or layer switch, so getting the layer key in first does it by layer, but pressing them at the same time gives me the combo, kinda feels genius.  We will see how it goes.","published":true,"public":true,"date":"2025-08-29T00:28:21.729791","id":819,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Let's Make Sure Github Doesn't Become the only Option - Edward Loveall","link":"https://blog.edwardloveall.com/lets-make-sure-github-doesnt-become-the-only-option","tags":"git, dev, later","message":"This post is a masterclass in blogging, cross linking, backing up your ideas with posts from other great sources.  I have a week of reading inside this post, and need to come back later when Im not sick.","published":true,"public":true,"date":"2025-08-28T23:45:53.170859","id":818,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"This Bothers Me - YouTube","link":"https://www.youtube.com/watch?v=3NFwQIoLFgE","tags":"gaming","message":"I'm playing through peak right now with Wyatt and it is a great game, a small wholesome  indiegame that is legit hard, but fun with the simplest concept.  You are a scout who has crashlanded on an island, your goal is to get to the peak with your friends.  You must manage hunger, stamina, weight, health and energy.  You have limited resources and must help everyone to the top, if someone is low on stamina, they are going to need a helping hand or a stonger climber to go up and set pitons and ropes.  Its a fantastic collaborative play game\n\n![PEAK - 2025-08-27 8-49-54 PM.mp4](https://dropper.wayl.one/api/file/192b267c-f577-4282-9393-1bf74c0b629f.mp4)\n\n> a short clip of me playing with wyatt, I did not have anything great to add, but this is just a random clip\n\n## Ripped off\n\nIt was insta-ripped off by roblox with microtransactions pay to win garbage.  It looks one for one the same damn models and interface, they spared nothing at making it look exactly like the original.  They let you buy a golden apple assuming it gives you crazy stamina to climb with ease, and it costs goddam robux.  As Big A says here theres nothing they can really do, the roblox platform just lets this happen, and if they didn't they would loose huge revenue because this is so prevelant.  Legal fees would crush this small team that made it.\n\n![screenshot-2025-08-28T01-44-40-840Z.png](https://dropper.wayl.one/api/file/bb9c2505-7f67-42f5-8ddd-01b0b2d9d046.png)","published":true,"public":true,"date":"2025-08-28T01:55:58.290344","id":817,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Explore - Forgejo","link":"https://git.dbushell.com/explore/repos","tags":"dev, self-hosted","message":"damn david has been busy, this is sick seeing all of the repos, I'm ready to jump in!","published":true,"public":true,"date":"2025-08-27T20:38:36.684078","id":816,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Eric: \"This was pushed out with a rus…\" - Mastodon","link":"https://social.ericwbailey.website/@eric/115100947111974331","tags":"dev","message":"damn, M$ really pushing hard on moving github into the ai org.","published":true,"public":true,"date":"2025-08-27T20:35:30.527392","id":815,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The BIGGEST lie in software development - YouTube","link":"https://www.youtube.com/watch?v=U9eMAiTwMhI","tags":"dev","message":"This man feels sad, he never had a chance to bloom.  He was stuck behind the drudgery of jira tickets.  This is what the consultant driven  agile has got us.  Its ripped out all the thinking and creativity, its left us with moving tickets across the board, not allowed time to run on an idea when we have one.  Not allowed to do extra work or refactoring in a module that we are already in.  pushed to move faster for less.  \n\nI feel like this mans experience has been quite different from my own and I'm grateful to have some leeway to be creative and do some meaningful work outside the jira board.  I'm grateful to be able to provide a good income for my family without taking on all the risk myself.","published":true,"public":true,"date":"2025-08-27T20:24:38.214179","id":814,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Reflection - AI Work and ADHD","link":"https://pype.dev/reflection-ai-work-and-adhd/","tags":"","message":"Crazy that we wrote such similar posts on the same day independantly, I just wrote [[ im-out-on-agents ]] sitting offline in a doctor office.  The two pull out's are very good, \n\n> \"AI is not magic, it's a headache\".  \n\nBy definition AI is magic to the vast majority of people, but funny how true this is.  \n\n> \"When I finish tasks, I'm not fulfilled... if anything I'm relieved.\"\n\nI just wrote something very similar, maybe this feeling can be used for guidance to when to use AI.  When you complete this task will you feel relieved its over?  Is it a chore? or creative work you want to **accomplish**.","published":true,"public":true,"date":"2025-08-27T20:15:48.288487","id":813,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"GitHub - cortesi/modd: A flexible developer tool that runs processes and responds to filesystem changes","link":"https://github.com/cortesi/modd","tags":"dev","message":"Gave modd a try today, and I like it, its something I am going to consider slotting right into my [justfiles](https://github.com/casey/just).  Gave it a try and it seems to work really well out of the box and easy to configure.","published":true,"public":true,"date":"2025-08-25T15:40:39.268236","id":811,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"combos only on default layer · WaylonWalker/zmk-config-42block@2398fc7","link":"https://github.com/WaylonWalker/zmk-config-42block/commit/2398fc73b247b9f491e14b605fef1c6910939298","tags":"","message":"Fighting some parens in hollow knight lead me to subtle little pauses when playing, I'm swapping combos to only work on the default layer, except for grave, I must have it for minecraft.","published":true,"public":true,"date":"2025-08-25T12:58:37.504070","id":810,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Death of the User Interface","link":"https://gist.github.com/0xs34n/a5738db1cc24495e69b6d6c08a451890","tags":"ai, llm","message":"This is an insane level of agentic llm use, the author claims to not even use his filesystem anymore, its too cumbersome to find where downloads and documents are and way too easy to ask an agent to move all pdf's from downloads to documents.\n\nThis scares me on multiple levels, theres the epidemic of ai datacenters and ai companies burning cash, burning through gpu's and api calls to a giant data center just to move files sounds absolutely insane to me.\n\nThen there is the level of accuracy.  There's a level of interpretation that happens with english that does not happen in code, code generally does what it does repeatably.  The examples of \"Move old backups to archive\" is so open for interpretation that its ready to ruin your day, which backup, which archive, how old?  Dude is ready to loose his files.\n\nLast is privacy, there is going to be a privacy epidemic that is going to pwn so many people giving these things full access to email, chat, ALL of YOUR FILES, and computer, your whole network.\n\nLook I get it this is where things are going, but dude is early, like too early.  These things need to become far more accurate, less power hungry, and run locally before I give up my whole filesystem.","published":true,"public":true,"date":"2025-08-25T01:48:19.298700","id":809,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(381) Why everyone is quitting social media - YouTube","link":"https://www.youtube.com/watch?v=zN-rElTzR_4","tags":"webdev","message":"Damn, social media is at an all time low.  I've felt all of these issues and when I got a new phone I started fresh, I didn't install one social media app.  Luckily Youtube has remained solid for me.  Yes shorts are a bit less what I came for and more addicting content they _had_ to do in order to keep up.  There are some legit good commedians, a bit of good knowledge and a bunch of trash that is hard to look away from on shorts.  I still find myself able to find content I enjoy and signed up for on YouTube.  I feel like I get a one way relationship with someone similar to a TV show or news anchor of old media.\n\nSocial Media has morphed from follows likes and similar, to viral posts by creators I don't recognize.  posting and immediately getting like by two **hot** women with accounts created this week.  The rest of the real creators left on there are stuck trying to keep up, echo viral trends, trying to keep up the content treadmill.   A few come through, but most feel somewhat forced.  A lot of it is ai generated, and whats not mostly doesn't feel that human anyways.\n\nThe people on here seem to really tie the internet to social media and are ready to quit the internet.  I think there is more to the internet, we can find each other, but setting up rss feeds, following others, and scrolling their own website lacks that dopamine hit social media has right now.","published":true,"public":true,"date":"2025-08-25T01:36:35.912880","id":808,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Search Needs a Human Solution: A Manifesto","link":"https://simplecto.com/search-needs-a-human-solution-a-manifesto/","tags":"","message":"The hype bro influencer culture is over, we are fucking burnt the fuck out.  I'm done scrolling through ai slop on social media, I like in a few times a week with hopes to see some friends at the top of my feed and jump out.  The Doom and Gloom of politics, everyone has a side that will bring glory and the other side will start an apocalypse did me in, ai generated bs is just driving those platforms further into the ground, I'm tired and done.\n\nI'm starting to lean into RSS, I hope for projects like [Sam](https://simplecto.com/author/sam/) mentions here make this more possible for the average person.  I hope that real people make awesomelists like he mentions.  I hope that the internet becomes more human again.","published":true,"public":true,"date":"2025-08-21T01:23:08.084114","id":807,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"You Should Be Hiring Mullets. (write that down)","link":"https://simplecto.com/you-should-be-hiring-mullets-write-that-down/","tags":"catalytic","message":"We need more mullets (as sam describes them).  Not so serious, but serious when it counts.  Ready to back you up, get some shit shipped, roll up their sleeves and do the work, stand up in front of people and pitch ideas.  We have too many hustle bros pitching shit they cant do, ai doomers who have been here 10 minutes think they can replace everything they don't understand with a word calculator, framework Andys afraid to ship till its [[ perfect ]].  Grow a Mullet.","published":true,"public":true,"date":"2025-08-21T01:14:21.670186","id":806,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"OverType - The Markdown Editor That's a Textarea","link":"https://overtype.dev/?utm_source=waylonwalker.com","tags":"webdev","message":"The most under hyped, under engineered text editor overtype.  Going to be popping this into some places like [[ thoughts ]], and maybe more, looks small and easy to use.  Gives just a bit of nice features over a text editor.","published":true,"public":true,"date":"2025-08-21T00:50:01.539771","id":805,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Internet is Dying: AI, Bots, and The End of Human Content - YouTube","link":"https://www.youtube.com/watch?v=J5ZmLvy_Jfg&t=182s","tags":"ai, llm","message":"Damn this VAnessa is hitting my feed with hard topics, I'm not sure whether to subscribe or to block.  These top websites only feel worse every day, when I post on twitter and I get 4 likes by accounts that were created 5 minutes ago with racy profile pics it feels obvious.  I wonder how larger accounts deal with it.  Now that llms have made making these bots mimic humans easy It really makes you want out.  I've really become a curmudgeon and leaning on rss over the past year, I dont like it, but idk what to do.","published":true,"public":true,"date":"2025-08-18T13:04:56.374559","id":802,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Real Reason Your Power Bill Doubled (It's Not Inflation) - YouTube","link":"https://www.youtube.com/watch?v=hJ2tqs_vksc&t=25s","tags":"ai, llm","message":"This is a crazy theory I did not realize was out there, but damn power just keeps costing more and more.  She does not mention it here, but there are many sources of power for the grid that cost vastly different amounts to produce, generally \"clean energy\" solutions are harder and more expensive to bring online and don't just turn on and off at the flick of a switch.  Anyways, how are the power companies divying this power out to users, do some get preferred rates or supply?  My rates just went up for the summer period \"temporarily\".  Our infrastructure is aging hard to upgrade and needs something done to it.  Who's really going to pay for it, these AI companies are throwing big numbers but do they have any real money?  Do they have any real revenue after building out massive data centers filling them with the most expensive hardware?  These guys are burning cash like crazy.","published":true,"public":true,"date":"2025-08-18T13:01:04.502877","id":801,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Digitized Signatures","link":"https://signature.cnrad.dev/","tags":"webdev","message":"seriously cool dumb app that no one asked for but is really creative and unique.\n\n![screenshot-2025-08-17T15-46-27-287Z.png](https://dropper.wayl.one/api/file/c87fdbe3-26f2-4f14-b4fb-7dc9b231e999.png)","published":true,"public":true,"date":"2025-08-17T15:47:05.080237","id":800,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DHH on X: \"Rewiring your muscle memory for copy/paste when you go from Mac to Omarchy is an important rite of passage. Not friction to be whittled away. We need more rituals in society. More tokens of sacrifice. This is a small one. Make it proudly.\" / X","link":"https://x.com/dhh/status/1956645753255805151","tags":"linux","message":"Today I learned that its spelled \"Rite of Passage\", and is short for ritual.  Mac has so many of these things that are just different, but do not let you reconfigure them and you are stuck with it.  copy / paste I don't get, the 3 times I've touched a mac since I was a kid its frustrated me.  Is it lock in? or is it them actually thinking this is the right way and you all shall do as we say.","published":true,"public":true,"date":"2025-08-17T15:39:42.039160","id":799,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Performance Difference between RWX and RWO volumes · longhorn/longhorn · Discussion #6964 · GitHub","link":"https://github.com/longhorn/longhorn/discussions/6964","tags":"kubernets, longhorn","message":"Interesting longhorn storage performance test, author does highlight right away that this is a simulation and not a REAL test.  I did not fully understand the storage semantics before reading through this.\n\n* **RWO** -  Always presents a filesystem `ext4` or `xfs`\n* **RWX**/**ROX** - Always presents a network share `nfs` to the pod.\n\nThis is an important distinction for applications that use sqlite or a tool on top of sqlite such as diskcache.  With sqlite it is not recomended to run over nfs due to missing required file locking mechanisms.  \n\nLonghorn storage still provides a lot of benefits to these applications as the storage is automatically replicated, if the node that your application is running on goes offline a new pod will start on an existing node.  If you have planned downtime, you can cordon and drain a node.  Since the data is available in another location you will be able to start a new pod on anther node.  barring your PodDisruptionBudget settings, taints, and affinity, this may happen automatically.","published":true,"public":true,"date":"2025-08-15T19:13:56.781237","id":798,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"GitHub Ensloppification – David Bushell – Web Dev (UK)","link":"https://dbushell.com/2025/08/11/github-ensloppification/","tags":"self-hosted, homelab","message":"David's got me looking at Forgejo.  I've seen a lot of GitHub jumpers just this week, and I've been tempted for a long time to self host one anyways, so it might be time.  I don't have hard issues with anything, I just like self hosting my own personal stuff.\n\nOn the flipside, I hope this does not turn yet another thing to shit.  I lived through the download software from sourceforge and hope you get the right download now button and not the one from the virus ad.  I'm not putting my really public/useful projects on a self hosted platform... well not as the **only** source, I see how that comes off edgy.  I like having some trust in the platform.  Currently theres a lot of issues with M$ and GitHub using you for your data, but I don't think injecting virus, malware, bitcoin miners is a worry I have coming from a GitHub release, unless it was put there by the author.\n","published":true,"public":true,"date":"2025-08-12T02:29:16.543619","id":796,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Note-taking & Editors - awesome-selfhosted","link":"https://awesome-selfhosted.net/tags/note-taking--editors.html","tags":"self-hosted","message":"Great list of self hosted markdown editors. Looking for a good one for my wife and family to use that does not look like editing code.","published":true,"public":true,"date":"2025-08-11T14:27:23.998044","id":795,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Slops | justin․searls․co","link":"https://justin.searls.co/slops/","tags":"ai, llm","message":"Justin has such great feeds on his site, I love how the main feeds are so prominant just to the left of the article you are reading.  `slops` in particular feels like a great category.  Saving this chat for later, or found it particularly interesting, but don't really want to make a post about it.","published":true,"public":true,"date":"2025-08-10T17:41:56.543572","id":794,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"noah on X: \"this is about to be my go to on plane flights. u don't need to pay for wifi since it's just a dns request which aren't gated behind a paywall https://t.co/Zapz55lpQq\" / X","link":"https://x.com/noahgsolomon/status/1954035351510716670","tags":"","message":"kinda wild, you can chat with an ai bot over a dns request??","published":true,"public":true,"date":"2025-08-10T17:07:18.765313","id":793,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"blakewatson.com              - blakewatson.com turns 20","link":"https://blakewatson.com/journal/blakewatson-com-turns-twenty/","tags":"web","message":"20 years is a long time to work on something, congrats Blake!  So many great links to small web creators, why, and how to build your own site.\n\nAs algos turn to shit the small web remains a space that cannot be ruined.  There will always be rss feeds from real humans writing for other humans.","published":true,"public":true,"date":"2025-08-09T19:48:58.622027","id":792,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ThePrimeagen on X: \"there is literally no universe that this is true 10k lines and its not bug filled crap? ok Lex Luthor, its time to step away from the keys https://t.co/OMg2Zi9bPs\" / X","link":"https://x.com/ThePrimeagen/status/1953502301173244004","tags":"llm","message":"> there is literally no universe that this is true\n10k lines and its not bug filled crap?  ok Lex Luthor, its time to step away from the keys\n\nIs this 10k real production code?  Dry in the sense that it hasn't re-implemented the same s3 api dozens of time?   What language are we talking something dense like python? something very verbose like html? Maybe a language where you implement everything from scratch like lua.  This matters a lot.  Playing with little POC applications that dont mean anything I can quickly come up with 500-1k likes of code that I may never look at again.  I'm sure I can come up wtih 10k decent lines of code a day.  \n\nBut for the same application without duplicating everything over and over?  For something that moves the needle and really matters?? **every single day**?? Consistently +10k, not 10k changes, not 10k deletes of yesterdays code. nah thats wack.","published":true,"public":true,"date":"2025-08-09T00:09:36.496309","id":791,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Brutalist Report","link":"https://brutalist.report/","tags":"","message":"Discovered the Brutalist Report from [CJ](https://coding.garden/) on [syntax.fm](syntax.fm) on their [rss-is-not-dead](https://syntax.fm/show/926/rss-is-not-dead) episode.  The way he described it, I was like gnaw thats whack, not into it, but I had to check it out.  It's actually great!  Except the political shit, I go to rss to get away from political finger pointing.  The Hacker News list is great, maybe I need to pay more attention to hacker news??","published":true,"public":true,"date":"2025-08-08T02:12:48.363628","id":790,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Omarchy is on the move","link":"https://world.hey.com/dhh/omarchy-is-on-the-move-8f848fa4","tags":"linux","message":"It's facinating how many people are making the jump from mac/windows, not just to linux, not just to archlinux, but to a full on tiling window manager.  DHH has omakub and omarchy.  Omakub is advertised as easy and for beginners, but many are skipping right over that to go straight for the hard stuff.\n\nDHH mentions hyprland here, one thing I think he is missing is that this is the first real mainstream tiling window manager that is a competitor to i3, awesomewm, qtile  that runs Wayland.  I think they were able to pull a bunch of great benefits such as lack of screen tearing and animations from this.","published":true,"public":true,"date":"2025-08-07T14:28:34.178505","id":789,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"YouTube has earned its crown","link":"https://world.hey.com/dhh/youtube-has-earned-its-crown-48f12ccc","tags":"tech","message":"I wonder how much of [killed-by-google](https://killedbygoogle.com/) is due to is [20 percent time](https://thoughts.waylonwalker.com/post/787).  Allowing engineers to follow a passion project turns into a real product that doesn't have full backing and support of the company.\n\nsimilar to DHH as much as I am hurt by reader and all of their privacy BS that comes from ad based revenue I appreciate YouTube and them supporting all of the creators on it.  Giving a platform for small creators the ability to sustain themselves and reach a larch audience without big coorporate rules.","published":true,"public":true,"date":"2025-08-07T14:22:58.033192","id":788,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"20 Percent Time – Ted Merz","link":"https://ted-merz.com/2022/09/14/20-percent-time/?utm_source=chatgpt.com","tags":"tech","message":"Googles 20 percent time is fascinating to me.  It seems like a great way for engineers to fill up their tank with new skills, passion projects, and the need to scratch an itch.  To me these days it feels like something that would incentivize good talent to join.\n\nI can remember back earlier in my career December and January were slow months for big companies.  Riddled with vacation and annual planning cycle.  I would use this time to create tools and libraries that would help me move quicker throughout the year.  \n\nI clearly remember having a conversation with a colleague several salary grades ahead of me come mid February asking what I was up to.  I was furiously pecking away at some of these projects while he let me know that he had been waiting for this years plan for months and had no tasks from the boss.\n\n> That said, I don’t think any major tech company is going to adopt 20% time these days. It’s too chaotic, too hard to manage and impossible to measure.\n\nThis line from Ted feels exactly why 20 percent time generally blows up and likely turns into another [killed-by-google](https://killedbygoogle.com/) product that has a small user base and is furious about it being killed.  With enough of these at least one **cough** _reader_ **cough** has affected us all.","published":true,"public":true,"date":"2025-08-07T14:19:33.023153","id":787,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Blog @ tonsky.me","link":"https://tonsky.me/","tags":"webdev","message":"Niki has one of the coolest yet simple personal sites that I have seen in a long time.  We need more of this on the internet!  hover over his face, try dark mode, submit personal data, there are so many really cool Easter eggs to discover!","published":true,"public":true,"date":"2025-08-06T20:35:25.200897","id":786,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"We shouldn’t have needed lockfiles @ tonsky.me","link":"https://tonsky.me/blog/lockfiles/","tags":"dev","message":"I wholeheartedly agree that packaging is broken, semver is broken, expecting much better from a system of oss that is built on top of volunteers, passion projects, nights and weekends is a fools errand.  With that I disagree that we we dont need lockfiles.  Maybe its Nikki's experience in java and my lack that puts us on this opposite spectrum, but without lockfiles the world changes underneath us as we release.  One small change to your source can introduce a whole set of new features/bugs that you did not plan on without a good locking system.  It can also cause you to need to do dependency resolution at application build time and not ahead of time.","published":true,"public":true,"date":"2025-08-06T20:11:31.777162","id":785,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I Will Fucking Piledrive You If You Mention AI Again — Ludicity","link":"https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/?ref=wheresyoured.at","tags":"ai, llm","message":"Fantastic write up on their experience in ai, opinions on ai being a hoax with a veil of reasonable usefulness.  Arguing that most people do not understand enough to see the difference, and thought leaders see where it is now, see where it was yesterday, it must be going to general intelligence tomorrow and you all will loose your jobs without this.  I appreciate the satirical language here.","published":true,"public":true,"date":"2025-08-06T16:39:28.523806","id":784,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(346) DHH: Future of Programming, AI, Ruby on Rails, Productivity & Parenting | Lex Fridman Podcast #474 - YouTube","link":"https://www.youtube.com/clip/UgkxskUJsmJ6E7KVPyPdn1jy1WZQerR-L1Bm","tags":"","message":"Letting Ai drive code feels like giving up so much control.  It feels like its leaving so many brain cycles open for other things, yet its not quite good enough to do production level things on its own, so we must watch it, we must review it, yet its code can be some of the worst to review left unattended.  I'm feeling this right now as I'm avoiding writing a bit of js that I could probably do myself.  Some day this is likely to flip, and it will get better and we will spend our brain cycles thinking about architecture, security, marketing, big picture ideas about the problem we are trying to solve, but we are not yet there and as long as we still need to review I find it a much more pleasant workflow to have in a separate window than have it change the whole fucking project for a simple change.","published":true,"public":true,"date":"2025-08-06T01:22:39.989861","id":783,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A quote from greyduet on r/teachers","link":"https://simonwillison.net/2025/Aug/5/greyduet-on-rteachers/#atom-everything","tags":"ai","message":"Woof, ai is sucking the soul from everything, being forced onto teachers who don't want or care about it and are simply sharing ai-slop to their kids without giving it much thought.  remember that it is [rude](https://distantprovince.by/posts/its-rude-to-show-ai-output-to-people/) to share ai-slop with others that you have not vetted, It's next level to turn this into teaching material for children who are forced into your classroom and have no choice about the matter, you should be ashamed.","published":true,"public":true,"date":"2025-08-05T16:01:16.074558","id":782,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Colors • Pico CSS","link":"https://picocss.com/docs/colors","tags":"webdev","message":"A great alternative to tailwind colors that has everything defined in one colors file for only 0.3kb.  it feels well worth the weight if you are trying to skip a build step or avoid npm/node.  It has even more colors than tailwind.  I appreciate that there is a grey palette that is fully desaturated.","published":true,"public":true,"date":"2025-08-04T14:58:33.822957","id":780,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"rushter/selectolax: Python binding to Modest and Lexbor engines (fast HTML5 parser with CSS selectors).","link":"https://github.com/rushter/selectolax","tags":"python, webdev","message":"Selectolax you have my attention!  I will be giving this a try for markata which often suffers from slow beautifulsoup.  It appears to have everything I need for my simple use cases.\n\n![screenshot-2025-08-04T13-46-04-068Z.png](https://dropper.wayl.one/api/file/b5d8930f-59e0-4947-9500-717f66ce33dc.png)","published":true,"public":true,"date":"2025-08-04T13:52:15.691742","id":779,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How To Build The Tallest Building In Town","link":"https://garyvaynerchuk.com/build-the-tallest-building-in-town/","tags":"catalytic","message":"Have some positivity!  \"Just Build the Tallest Fucking Building\" is one of my favorite Gary Vee quotes.  Build good community, bring others up, and stop tearing everyone down, listen to the vid.","published":true,"public":true,"date":"2025-08-02T15:04:49.650752","id":776,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Meet Gor | I kind of hate Agentic IDEs for the sake of productivity","link":"https://www.meetgor.com/thoughts/i-kind-of-hate-agentic-ides-for-the-sake-of-productivity/","tags":"llm, agentic","message":"> Yes, I can review the code and make changes, but who in the world loves reviewing code? Do you love reviewing peers' PRs? really?\n\nI'm with MeetGor here 100%. reviewing the nuance, not being as involved with the process of creating the architecture design, not solving the problems that arise in development make it hard to effectively review and not turn into LGTM man.","published":true,"public":true,"date":"2025-08-02T15:00:38.447975","id":775,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Meet Gor | Just Fucking use kubernetes","link":"https://www.meetgor.com/thoughts/just-fucking-use-kubernetes/","tags":"kubernetes","message":"> Sometimes, all you need is a mindset shift, a blocker in your mind that holds you back from doing certain things. And for me, I have consumed enough tutorials and posts about Kubernetes, that I need to put to use and create. I have been stuck in the learning cycle, lets push to prod with kubernetes.\n\nThis hurts.  I know others with this learning style that need to see the full picture before actually doing something with new tech.  The way I first got into kubernetes I was looking for the easy route and somehow k8s came up several times as a suggested route [[ looking-for-a-heroku-replacement ]], So I dove in head first with [k3s](https://k3s.io/) and [kompose](https://kompose.io/).  What I found was that it was not all that hard once you start to see how the pieces fit together, no amount of reading tutorials would have gotten me there.\n\n> Does anyone care if you use simple yet fragile bash scripts or heavy weight Kubernetes cluster for just clicking buttons and creating and updating rows in a database? No!\n> \n> You know what, let's fucking use Kubernetes.\n\nLet's Gooo.  Use what is right for you and stop parroting kubernets is hard, heavy, for big companies, maybe actually try it first.","published":true,"public":true,"date":"2025-08-02T14:53:45.477765","id":774,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Quoting Meet Gor | Kubernetes isn't for you","link":"https://www.meetgor.com/thoughts/kubernetes-isn-t-for-you/","tags":"kuberntes","message":"> If you want to use it for the purpose of learning it, please do use it.\n> \n> Kubernetes as usual is a tool like others, you can't use one tool everywhere. Where bash scripts work, they just work, where they don't they fall apart too, kubernetes works like a charm.\n> \n> Use your grug brains a little and choose wisely! In the end, who the hell cares if you use kubernetes or bash scripts to scale if your users are happy?\n\nWell Said!","published":true,"public":true,"date":"2025-08-02T14:44:18.299912","id":773,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Kubernetes Isn't for You","link":"https://sliplane.io/blog/kubernetes-isnt-for-you","tags":"kubernetes","message":"This post feels like it was written by someone who has never tried kubernetes, someone who reads twitter, listens to t3.gg and thePrimeagen (who cant even container let alone kubernetes).  If you cant run linux, use bash, build your own docker images, run docker comfortably.  If infra is not your thing kubernetes is probably not for you.\n\n> Kubernetes Was Built for Google\n\nJust like how react was built for facebook to solve facebook problems with many teams contributing effectively to the same interactive interfaces.  Turns out that react is actually a pretty good product if you have a highly interactive page, and if this is your bread and butter, you can make overly heavy static sites with too much build very effectively.  It works and runs much of the internet now.\n\n> We are getting serious. We need serious tools.\n> Big companies use Kubernetes. We should too.\n> It feels more professional. It sounds like we know what we are doing.\n\nIf anyone uses these reasons to pitch kubernetes to me they don't belong in a position to make any sort of decision.  The first one could be a heading with maybe something under it.\n\n> But Kubernetes should not be your first infrastructure step. It should be a response to real pain, not an emotional milestone\n\nAs with anything, **it depends**!  Keeping with the react example, if you have a team with these skills its a solid choice, maybe its overkill, but you got this skills to start here then go for it.\n\n---\n\nIf you have never given something a real shot then don't be writing articles shitting on the tech.  Actually if you do not have a deep expertise in it you probably should not be writing articles shitting on other tech.  If you are the CEO of an alternative, you definitely should not be writing articles shitting on your competition.  [ just build the biggest fucking building in town ](https://garyvaynerchuk.com/build-the-tallest-building-in-town/).\n\nIf you are kube curios give kind and kompose a try, you will be surprised at how quickly you can get something up and running in kubernetes.  You might be surprised at how easy it is to remotely manage, add gitops workflows with [argocd](https://argoproj.github.io/cd/).  Give [k9s](https://k9scli.io/) a try and you can see all of your nodes, services, ingress, pvcs, EVERYTHING you have deployed and its status in one easy to use TUI.\n\nI avoided kubernetes for a long time because articles like this told me to and I never gave it a fair try.\n\nCheck out [[ just-fucking-use-kubernetes ]] for a satirical opposite take.","published":true,"public":true,"date":"2025-08-02T14:40:42.579511","id":772,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"csi-driver-smb/deploy/example/smb-provisioner at master · kubernetes-csi/csi-driver-smb","link":"https://github.com/kubernetes-csi/csi-driver-smb/tree/master/deploy/example/smb-provisioner","tags":"self-hosted, homelab","message":"Great guide to setting up a samba server right in kubernetes.  I tried it out after too long of playing with trying to get connected to a samba share on ucore, no idea what was wrong, but this just works, and will live in my homelab no matter what distro I'm on, no playbook required to set it up, just good ol k8s manifest.  TBH I cheated and haven't set up the secrets yet, so its not quite in argocd or in my github repo, but POC is there and it works as advertised without issue.","published":true,"public":true,"date":"2025-08-01T19:50:39.371555","id":771,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DHH on X: \"You have all the time you need, you're just spending it poorly. Don't tell me you don't have time for Linux or kids OR BOTH. You have time for all of it once you stop filling your day with junk activities. https://t.co/UUHqKGKBir\" / X","link":"https://x.com/dhh/status/1950462181331349688","tags":"catalytic","message":"The message so many of us need to hear, stop scrolling and start creating.  I'm not sure that I have a heavy issue with this, I barely scroll the socials anymore, I have my own rss reader curated with people that I enjoy consuming from.  YT is often done as a family activity (with my wife) or listening while doing something like dishes.  But I think I've been on the other side of this for awhile.  There's something that ticks my brain by twiddling with linux nonsensically or `pip install thing-i-heard-about-today` and try it.  I'm not imune  though, I often fill gaps in the day with nonsense short content, but try to avoid the short trap.","published":true,"public":true,"date":"2025-07-31T00:56:40.869641","id":769,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Rewriting alt-tab to save 0.1s - YouTube","link":"https://youtu.be/RG69PCAslA0?si=ZogGDP9TOI6gDcMM","tags":"windows","message":"How many times in one video can Prime say dude just use arch, dude arch would be way easier, dude you know how hard you are making this on yourself.\n\nI do not envy those who desire full size configurability but stuck with the opinions of GatesJobs.  Windows and Mac are so rigid, that it makes it impossible to do any level of customizability that I would want to do for productivity.\n\nUnless you **Must** work on win/mack for some reason of work, you make something for one of them, you use Adobe, or you play competitive online multiplayer with easy anticheat there is a distro for you.  The number of things that you need a win/mack for is greatly shrinking, you don't have to submit yourself to the pain of Gates that this guy has done.","published":true,"public":true,"date":"2025-07-28T12:46:30.962525","id":768,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Copyparty - YouTube","link":"https://youtu.be/15_-hgsX2V0?si=MGiWN8UxFmr36_mX","tags":"later, self-host ","message":"Copyparty looks like a feature full self hosted file server, putting this into my check out later when I get  back to my desk.  Impressive number of features I didn't even know were a thing all from one .py file.","published":true,"public":true,"date":"2025-07-27T17:23:57.798814","id":767,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"What the EDC Community Gets Wrong About Pry Bars - YouTube","link":"https://www.youtube.com/watch?v=hT_pzOURr5c","tags":"edc","message":"Ben sold me on the mini pocket pry here.  It's funny how so many _minimalist_ tools become over the top titanium damascus with wild patterns and designs. they look amazing, but are they worth the insane price for simple things?  I like my edc to be things I don't worry about breaking, loosing, or giving away.  Fancy ass prybars for $200+ gives me all of those negative feelings I don't want on my edc.","published":true,"public":true,"date":"2025-07-26T20:27:28.639656","id":766,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How I Use Computers Now - YouTube","link":"https://www.youtube.com/watch?v=x-sW4sKZocA","tags":"dev, self-hosted","message":"Ben is always good for a banger of a video, this images app is something that i really want in my homelab, he did some great polish here!  The idea of building vibe coded applications for your own personal use with all of your own personal opinions and workflows is something that has been an appealing part of ai,  I've definitely tossed a few apps in my homelab that I use occasionally and they do what I ask of them pretty accurately.\n\nThis feels great to use, but also seems to kill any startup idea I have, as most of them feel like they could be vibe coded out by someone with a bit of skill and they just host their own.  Maybe this is a good thing, maybe we are moving into an era of more people owning their own app they use for themself, maybe i need a security related startup?","published":true,"public":true,"date":"2025-07-26T14:41:22.655876","id":765,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(329) Neovim vs Emacs | Roundtable w/ TJ DeVries, DistroTube, Greg Anders & Joshua Blais - YouTube","link":"https://www.youtube.com/clip/UgkxQevfazaval9KH22a6BjMRkdBs7541Kry","tags":"vscode","message":"I don't think I ever fully heard the full meaning of vsc*** and why it gets bleeped.  I knew that it had to do with M$, but Teej explains it so well here.  Its about the editor not really being open sources, but is marketed to be such.","published":true,"public":true,"date":"2025-07-25T02:13:59.495764","id":763,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Glossary Web Component – David Bushell – Web Dev (UK)","link":"https://dbushell.com/2025/05/07/glossary-web-component/","tags":"blog","message":"I really enjoy David's Glossary, he has absolutely nailed it.  I'm working on one for myself that feels close but not quite.  I want to have a list of words that auto glossary to terms for me, maybe this is too much automation and I should just lean on wikilinks, i.e. [[ sick-wikilink-hover ]], they only take wrapping in brackets.   But like David mentions here its a lot of work to make sure they are right on all the older posts.  I think it needs to be done with js on my setup, I don't have no fancy wroker to modify html on the way out, I'm fully static right now, so i would need to do full rebuilds any time the glossary changes, i'm trying to cut down on the number of features that require full site rebuilds and potential cache issues.","published":true,"public":true,"date":"2025-07-25T02:11:58.596735","id":762,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"An Ode To My 10-Year-Old Thinkpad T440","link":"https://mbrizic.com/blog/thinkpad-t440/","tags":"linux","message":"I like reading about old hardware and how to keep it running, sending shit out to e-waste after barely using it for a year makes my skin crawl.  I find it interesting how most of these resurrections start with a linux build, and the author giving in and going for linux for the first time and enjoying being able to use something they thought was useless for real work.  \n\nThat being said I have weird thoughts similar to this guy about being able to take a machine and write a novel somewhere off in the distance, but any time I try to do real work form any laptop these days the ergonomics become so unappealing that I tend to just not do anything away from my desk.  Theres something that sounds so great about opening vim on old hardware that could last for hours, sip on coffee and write away, but it never works out like that in practice.","published":true,"public":true,"date":"2025-07-25T01:33:47.403637","id":761,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Transparent Textures","link":"https://transparenttextures.com/","tags":"webdev","message":"Fantastic resource of background textures, I will be using this for some projects.","published":true,"public":true,"date":"2025-07-22T01:14:59.319850","id":760,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"uv run for running tests on versions of Python","link":"https://daniel.feldroy.com/posts/2025-07-uv-run-for-testing-python-versions","tags":"python, uv","message":"Such a fantastic use of uv, its so fast and flexible and does everything I need that next time I go to set up some more complex testing like this I'm going to lean towards it more than i would something like tox.  In the post Daniel sets up matrix testing for testing out different versions of python with the same pytest test suite.","published":true,"public":true,"date":"2025-07-21T20:25:40.504699","id":759,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"2025-07-10 Notes","link":"https://pype.dev/2025-07-10-notes/","tags":"linux, bash","message":"big fan of eza and dust, I like these aliases to have some common commands at my fingertips.  I often use the tree command and yes it sometimes goes too deep to actually be useful.\n\n``` bash\n    alias lt='eza -T --level=2'             # Tree view, 2 levels deep\n    alias ltt='eza -T --level=3'            # Tree view, 3 levels deep\n\n    alias du1='dust -d 1'                   # Show only 1 level deep\n    alias du2='dust -d 2'                   # Show 2 levels deep\n```","published":true,"public":true,"date":"2025-07-18T15:26:28.508813","id":756,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Vimothée Chalamet shares his new favorite shell command from a houseboat - YouTube","link":"https://www.youtube.com/watch?v=0-SUk1G9xMg","tags":"linux","message":"Love this dudes casual dry humor style, not afraid to poke fun at things with his dry ass satire.  that being said, fc is new and as a long time fan of up arrow and !! I will be using this often.","published":true,"public":true,"date":"2025-07-18T12:56:59.270415","id":755,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Quickshell","link":"https://quickshell.org/","tags":"linux","message":"This has to be the most incredible looking Desktop experience I've ever seen, riced to the nines, more polished than macos, more features than kde plasma, this looks incredible and I want to try it and feel it.\n\nhttps://quickshell.org/assets/showcase/end4.mp4","published":true,"public":true,"date":"2025-07-16T00:30:48.827023","id":751,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Stop Complaining About Ubuntu...Just Switch To Arch Already! - YouTube","link":"https://www.youtube.com/watch?v=HbBF-bmGe2I","tags":"linux","message":"DT says it so well in this video, I've never really been one to shit on software projects, with maybe a VERY small handful of exceptions.  The shitting on ubuntu always rubbed me wrong, shitting on flatpak and snap I never got, shitting on systemd because of Leonard Pottering I never got, DT puts it in such good words here.  If you don't like it you are probably not the target audience.  \n\nIf Ubuntu is too bloated, don't try to debloat it, this is not windows, we have options, Ubuntu is one option and so much is intertwined together in something like Ubuntu if you think you want to try to _\"debloat\"_ it good luck.  If you have a problem with Snaps, this is probably not for you.  You are probably looking for a distro with more control, probably something that you choose everything for.","published":true,"public":true,"date":"2025-07-15T01:48:46.262137","id":750,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Lab Update | Cloudy with a Chance of Tech","link":"https://blog.thomaswimprine.com/blog/2025-07-07-Lab-Update/","tags":"homelab","message":"Always enjoy a good read through someone elses setup.  I appreciate the desire for pi clusters they are cute, they seem cheap, but feel a bit overrated (at least for those of us with relatively cheap electricity).  I love seeing the refurb \"tiny desktops\" getting a second useful life in a homelab after they have serve their useful life in the corporate world sitting behind the monitor of some reception desk.  These things rock, they are underrated, x86_64, not ARM, so they just work.  Until ARM becomes _more_ normalized in the datacenter this is where its at.","published":true,"public":true,"date":"2025-07-12T02:16:40.561816","id":747,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Notes – 17:00 Wed 9 Jul 2025 – David Bushell – Web Dev (UK)","link":"https://dbushell.com/notes/2025-07-09T17:00Z/","tags":"dev","message":"Enjoying watching David bring together his rss reader day by day. Excited to see where it goes.  Im trying to get better at dropping notes like this without a ton of context, without needing to be right, just a note of whats on my mind and what I'm doing.","published":true,"public":true,"date":"2025-07-09T21:35:23.012743","id":744,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"uv cache prune","link":"https://simonwillison.net/2025/Jul/8/uv-cache-prune/#atom-everything","tags":"uv, python","message":"Good point to check on your uv cache if you are running low on disk space.  I checked mine today, and it wasn't too bad so I left it alone.\n\n``` bash\ndu -sh `uv cache dir`\n```","published":true,"public":true,"date":"2025-07-09T19:41:13.808229","id":743,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"omarchy/install/webapps.sh at master · basecamp/omarchy","link":"https://github.com/basecamp/omarchy/blob/master/install/webapps.sh","tags":"archlinux, hyprland, webdev","message":"I'm digging these web2app's from DHH's omarchy for setting up an opinionated archlinux hyprland.  This gives a way to quickly open a web app as an app either with a hotkey or run launcher in its own dedicated window that you can put on it's own workspace.  I really like a workflow of keeping one window per workspace on one monitor and I can quickly navigate between apps with a single hotkey.  This gives you the power to switch through things like chat, terminal, browser, steam game with blazing speed from the keybaord, no clicking no searching, just going directly to it.","published":true,"public":true,"date":"2025-07-08T18:02:18.296420","id":741,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"GitHub - chase/awrit: A full graphical web browser for Kitty terminal with mouse and keyboard support","link":"https://github.com/chase/awrit","tags":"terminal","message":"awrit is a full graphical browser that runs inside of kitty.  I've moved on some of my machines away from kitty as the maintainer has seemed so hostile and there are other great therminals out there, but I'm going to give this a go.  I have kitty running on my hyprland setup as it is the default anyways.  It is actual chromium rendering to a kitty graphics protocol.","published":true,"public":true,"date":"2025-07-07T17:57:42.354947","id":738,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"tailwind hover ","link":"https://stackoverflow.com/questions/56755439/modifying-hover-in-tailwindcss","tags":"webdev","message":"I need to give this a try for markata glossary","published":true,"public":true,"date":"2025-07-06T02:05:52.690283","id":734,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I was wrong - YouTube","link":"https://www.youtube.com/watch?v=ZH3iKbEiks0","tags":"linux, archlinux","message":"Never did I think I would see the day that theprimeagen decided to run [archlinux](https://archlinux.org/).  Furthermore him to start ricing it, EVEN furthermore, [Pewdiepie runs arch](https://www.youtube.com/watch?v=pVI_smLgTY0) now, and thinks you should too?? and is promoting it on one of the [largest YouTube channels ever](https://socialblade.com/youtube/lists/top/100/subscribers/all/global)??  Even DHH is getting in the mix with [omarchy](https://omarchy.org/) Such a cool transistion to see everyone find their way to linux and diving deep into the freedom and customization.","published":true,"public":true,"date":"2025-07-04T16:53:47.805585","id":733,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"{ TechDufus }","link":"https://techdufus.com/#timeline","tags":"homepage","message":"This has to be top tier dopest home page of all time.  The commands are all so well customized and whimsical on the terminal.\n\n![image](https://dropper.wayl.one/api/file/5387bb34-4a9d-4a51-95d2-ed6242c411f8.webp)","published":true,"public":true,"date":"2025-07-02T13:35:45.037046","id":731,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"{ TechDufus } | Building a Talos Kubernetes Homelab with Terraform on Proxmox","link":"https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html","tags":"","message":"I've ran my homelab on k3s for a year and a half now, and have had talos fomo the whole time.  I'm not sure if this article helps or hurts.  Helps to see that techdufus struggled and wished he went k3s first, but theres so much good to it that I want it.\n\n## Prometheus and Grafana for monitoring (because you can’t manage what you can’t see)\n\nI'm getting there, ok, I have some of it figured out but not firing on all cylinders like I want.\n\n## CloudNativePG\n\n> for PostgreSQL (way better than managing databases manually)\n\nAmen to this, cnpg is kick ass and has me tempted to drop sqlite for my production database default.  I mostly make small shit on the side that is never going to blow up.  sqlite is really good, but the automation that comes along with cnpg to just run it on all nodes and backups once you establish the pattern with the first one is sick.\n\n## 🤣🤣🤣 actually read the docs 🤣🤣🤣\n\n![image](https://dropper.wayl.one/api/file/9c41132e-7808-49af-9aaa-68a5e5870a4b.webp)\n\n## Is This Overkill for a Homelab?\n\n>Absolutely. Could do most of this with k3s or Docker Compose. But where’s the fun in that?\n\nSpeaking my language here!  Again I'm well past the 1 year mark of running k3s and i've had no regrets.  Kubernetes is about establishing and replicating patterns, its a dream to deploy to.  It gets so much hate for being obtuse, hard to use, yaml intense.  You get full control of ever damn thing you need through configuration, and if you keep it simple you can deploy some sick shit out of it without needing to go hard on the yaml, again, think really hard about it a few times, and replicate.\n","published":true,"public":true,"date":"2025-07-02T01:45:11.691214","id":726,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Forming URIs for Autofill | Bitwarden","link":"https://bitwarden.com/help/uri-match-detection/","tags":"dev","message":"For anyone self hosting a bunch of apps under one domain, I just swapped all of mine to Host matching which includes the full subdomain, and it is glorious to not have 9+ items hit on all of your pages and only the one that you actually want.\n\nopen one > edit > gear icon next to url > Host","published":true,"public":true,"date":"2025-06-30T13:21:15.028064","id":725,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The decline of \"i use vim btw\" - YouTube","link":"https://www.youtube.com/watch?v=RmnqdAidVeE","tags":"nvim, arch","message":"vim usage is becoming normie level.  Just like `archinstall` made it too easy to install arch and brought normies into the ecosystem.  It killed ArchBTW^TM^, distros like lazyvim have killed vimBTW^TM^.  It used to be that to run arch, vim, nvim you had to read the docs, and go deep on understanding.  running `archinstall`or lazyvim make it so easy to get started that you miss all of the details, you no longer have to understand ctags, quickfix, what an lsp is, or even how to set your own keybindings.  You just use the damn thing, like you would with VSC****.  No shame to anyone who does this, but you are probably missing out on a bunch of really useful features of a very core tool in your workflow.\n\nJust discovered Sylvan Franklin in this post and he is cracked, sub now.","published":true,"public":true,"date":"2025-06-29T17:46:52.410422","id":724,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"distrobox/docs/posts/run_libvirt_in_distrobox.md at main · 89luca89/distrobox","link":"https://github.com/89luca89/distrobox/blob/main/docs/posts/run_libvirt_in_distrobox.md","tags":"dev","message":"Wish I would have saw this guide and provided assembly file for setting up virt-manager in distrobox.  They call out immutable distros like the knew I was coming.","published":true,"public":true,"date":"2025-06-29T02:11:28.788199","id":723,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Notes – 06:11 Sun 22 Jun 2025 – David Bushell – Web Dev (UK)","link":"https://dbushell.com/notes/2025-06-22T06:11Z/","tags":"dunno","message":"What's even real anymore?  What a shitty age we are in that you have to form an opinion about news outlets and media outlets.","published":true,"public":true,"date":"2025-06-24T13:25:49.568234","id":718,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"neverjust","link":"https://www.neverjust.net/","tags":"catalytic","message":"I just never quite understood why the word *just* can send people over the top.  I get it when you don't know someone, you don't have history with them, and they come in saying you are doing something wrong.\n\nI pulled this out into a full post [[ just ]]\n\n","published":true,"public":true,"date":"2025-06-23T23:55:57.059759","id":717,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Software engineer get laid off in 2025 - YouTube","link":"https://www.youtube.com/shorts/_HcN2zdNoms","tags":"dev","message":"2025 is not the year to get put on the market, its rough out there.  Junior's have little chance, senior+ are even struggling.  We had it easy from 2020-2023, now its over saturated and you have to want to be in this industry to be here and stay here.  It used to be a fine place to get a good job to pay the bills, the bar has been raised and if you don't want to be here you are going to struggle.  Theo covers this in this linked video deeply [[ thoughts-472 ]].","published":true,"public":true,"date":"2025-06-23T13:13:58.990754","id":716,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"If Netflix Made a ‘Day in the Life of a Software Engineer’ - YouTube","link":"https://www.youtube.com/watch?v=bvINaJEQNSQ","tags":"dev","message":"Nailed the netflix documentary style.  Videos like this make me so grateful that I have  a job in this rough market, if you've followed jepi's series you know he's been out of a job for months, and he is not alone in this.  This is the year of \"laid of, i didn't get laid off, I left to focus on my startup\", [[ thoughts-716 ]]","published":true,"public":true,"date":"2025-06-23T12:51:39.120659","id":715,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Notes – 09:32 Thu 19 Jun 2025 – David Bushell – Web Dev (UK)","link":"https://dbushell.com/notes/2025-06-19T09:32Z/","tags":"python, blog, fonts","message":"David's design on his blog is fantastic likely from years of small improvements like this converting ugly quotes to pretty quotes and optimizing fonts.\n\n> It’s common for markdown libraries to convert the first to the second like my build script does.\n\nThis is new to me, I had no idea that markdown libraries did this, I'm now interested if markdown-it does it.\n\n> For subsetting I use the fontTools library but I’ve no idea how to setup Python environments. I got it working once and failed to document the process. \n\nDavid, David, David, I'm sorry python has done you this dirty.  I should do a post on making python environments in the age of [[ uv ]].  You got options to run in docker/podman, a whole ass vm, uv venv, uvx, uv run, uv script, python -m venv, virtualenv, poetry, hatch, and too many more.  The ones that matter are containers or uv.","published":true,"public":true,"date":"2025-06-19T13:18:20.376360","id":708,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Bug: Pypi metadata is wrong (Requires: Python >=3.6) · Issue #1131 · jmcnamara/XlsxWriter","link":"https://github.com/jmcnamara/XlsxWriter/issues/1131","tags":"pypi","message":"pypi yanks suck, they are rare, this one got me today as it was a pinned dependency in my dependency chain.  The latest release broke python 3.6/3.7 (which 3.6 has  been EOL for 3.5 years btw), and it claimed >=3.6.  In order to allow users to still install xlsxwriter without pinning down it needed yanked.  I'm not sure if there was another way around it as pypi releases are immutable, so you cannot fix  \n\n![image](https://dropper.wayl.one/api/file/2ba70753-5723-4b96-8f2b-8090be07d6ad.webp)\n\n> This now has me wondering what the heck is using it with old pythons.\n\nIt appears to have broken builds on Canonical/checkbox for ubuntu 18.04.  Checkbox is a device compatibility testing framework.\n\nhttps://github.com/canonical/checkbox/actions/runs/14644718138/job/41098549191#step:8:125\n\n![image](https://dropper.wayl.one/api/file/6fe3e01b-e180-4d2a-a00c-6b9fab727626.webp)","published":true,"public":true,"date":"2025-06-18T02:04:41.426986","id":704,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Conventional Commits","link":"https://www.conventionalcommits.org/en/v1.0.0/","tags":"dev","message":"I try to use conventional commits on all of my commits, but I often end up only using feat/fix.  I need to keep this page handy and get new verbiage worked into my language \n\n* fix:\n* feat:\n* build:\n* chore:\n* ci:\n* docs:\n* style:\n* refactor:\n* perf:\n* test:\n\nOptionally include a scope `fix(parser):`\n\nA bang indicates a breaking change note. For example ...\n\n``` bash\nchore!: drop support for Node 6\n\nBREAKING CHANGE: use JavaScript features not available in Node 6.\n```","published":true,"public":true,"date":"2025-06-17T16:37:14.437968","id":703,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(274) FROGS ep1 The home - YouTube","link":"https://www.youtube.com/watch?v=bPlPkDEcZBA&list=TLPQMTcwNjIwMjVHHHsm3llljQ&index=3","tags":"gaming, minecraft","message":"Wyatt built out this full world to start making a film series about FROGS.  The entire set it built on a flat world, but yet feels so immersive.","published":true,"public":true,"date":"2025-06-17T13:08:54.924328","id":702,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Visualizing My Blog’s Internal Links - Jim Nielsen’s Blog","link":"https://blog.jim-nielsen.com/2022/visualizing-my-blogs-links/","tags":"blog","message":"I like Jim's visualizations on his site, reminds me a lot of obsidian.  I've tried to do the same on my [[ analytics ]] page in the past, but it didn't come out right.  I'm going to have to give this another go.","published":true,"public":true,"date":"2025-06-16T00:48:19.986170","id":695,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Your Framework is Showing 😳 – David Bushell – Web Dev (UK)","link":"https://dbushell.com/2025/06/13/your-framework-is-showing-nextjs-error/","tags":"webdev","message":"Great breakdown of nextjs.  I was highly unaware of its _performance_ optimizations before reading this.  The smell of vendor lock in from next/vercel has been there from the start, this is the first real claim I've seen.  \n\nI'm out on modern js front ends, complex builds that change every 6 months, design patterns are out of date just as fast.  Its hard to keep up, especially when you don't have the use case for highly interactive apps.  Libraries like htmx or plain ol js gets the job done on the majority of sites and everything I tend to work on.","published":true,"public":true,"date":"2025-06-15T00:02:28.369870","id":694,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I DONT KNOW WHY - YouTube","link":"https://www.youtube.com/shorts/Se6HHCcy8q4","tags":"dev","message":"I'm totally with Prime here, there is something about the read only, mouse clicking part of my brain that causes me to be more critical of the code at a different level.  It doesn't hit the part of my brain thinking about the edit or how to do the edit, it hits a part thats thinking about how I will have to deal with the code moving forward.","published":true,"public":true,"date":"2025-06-14T22:44:34.700613","id":693,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Next.js 15.1+ is unusable outside of Vercel | Omar Abid - Personal Blog","link":"https://omarabid.com/nextjs-vercel","tags":"webdev","message":"Vendor lock in disguised as performance.  Nextjs aparantly now streams all of your metadata on the fly with js.  This would obviously kill all seo right, well not if you're on vercel they automatically detect search crawlers and serve the metadata.  Why the f do they need to do this and not just serve everyone the metadata.  The Web is this beautiful place where anyone can create and build amazing things with a relatively low skill.  Js is meant to be enhancement, not degrade the experience of its users.","published":true,"public":true,"date":"2025-06-14T18:10:58.861760","id":692,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Think less, ship more","link":"https://cassidoo.co/post/think-less/","tags":"dev","message":"I thin a lot of us have this issues, **especially** on side projects.  At work therre are expectations, jira tickets and so on, keeping you shipping.  I think there is something to be said about getting that quick and dirty POC to the right group of people early for feedback before you add redis caching, kubernetes, auto scaling, disruption budget, distributed nodes, high availability, backups, disaster recovery.  At work you kinda  have to have the right person to shoot ideas by that can understand that you probably need some of these complex things for your app and it will take time to get right.","published":true,"public":true,"date":"2025-06-10T13:02:28.299330","id":684,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"robinroy03/videoeditor: Video Editor Application using React, Remotion & TypeScript.","link":"https://github.com/robinroy03/videoeditor","tags":"self-host, video-editor","message":"I would love to have a browser based video editor I could throw on a server and do quick edits from anywhere.  I tried to get this one to work and struggled to get front end to send api requets to backend.  I think the root of it was their redis wants to run on 80, this caused a permission error so I tried to run 8880:80, but redis was still unable to start due to a config permission error.","published":true,"public":true,"date":"2025-06-10T02:31:25.445462","id":683,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Taming file zoos: Data science with DuckDB database files - Alex Monahan","link":"https://www.youtube.com/watch?v=Yq-hxgysWLQ","tags":"python, data","message":"The ability to query s3 buckets so seamless looks like such a pleasure to work with if you have a use case for that.  Kedro catalog takes care of this most of the time for me, but I wonder if there are some cross project searching use cases I might find for this.","published":true,"public":true,"date":"2025-06-09T13:31:30.413130","id":681,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"PocketCal Build Log","link":"https://cassidoo.co/post/pocketcal-build-log/","tags":"webdev","message":"I love this idea of tiny useful apps for yourself.  In fact I'm working on a project to built out [[ tinyapps ]] for myself to replace my common needs.  I absolutely love that all of the state is stored in the url bar, nothing is stored server side.  As much as I love to hate js, I really appreciate that things like this can be built to just live on the web, be accessible from anywhere, and live practically forever as they require such little hosting demand.","published":true,"public":true,"date":"2025-06-08T00:29:14.262803","id":677,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"numtide/treefmt: one CLI to format your repo [maintainers=@zimbatm,@brianmcgee]","link":"https://github.com/numtide/treefmt","tags":"dev","message":"This looks like a very useful formatting tool to keep in the back of my mind.  I do a lot of python and our tool tends to be pre-commit, named after the git hook pre-commit.  It specifies a bunch of tools to run, you can run them in ci, manually, and opt into doing it before commit.  I like the simplicity of this one not needing a whole ecosystem, but rather just leveraging the cli commands from those tools.  This would probably be something that would get in the way of setup for new devs and not something I would throw on one project by itself, its another thing for everyone to figure out how to install and run on every platform, I'm sure its not hard, but being on python teams pre-commit just fits in.","published":true,"public":true,"date":"2025-06-08T00:20:41.166302","id":675,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Keynote Speaker - Cory Doctorow - YouTube","link":"https://www.youtube.com/watch?v=ydVmzg_SJLw","tags":"dev","message":"This is one of the greatest pycon keynotes I've ever seen, bookmarking this to come back and leave better thoughts on later.","published":true,"public":true,"date":"2025-06-07T23:00:50.273529","id":674,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Dopamine Driven Development - YouTube","link":"https://www.youtube.com/watch?v=AWZ9AgjPfwo&t=654s","tags":"","message":"Focus on the joy, not the suck.  Nothing you do in life will be absolute pure joy with no downsides forever, life does not work that way, your brain does not look that way.  Look at anyone who ever got massive billion dollar payouts for something like minecraft and how much their life is not glorious when they have nothing to really look forward to.\n\nPrime talks about it in almost a cliche way, every boring ass task is an opportunity to grow.  This is so real though, if you look at every task ask a shit you gotta do to check that jira ticket off and make bossy lady not scream at you its going to be a hell.  If you rather look at it as opportunities to implement new features in new ways or learn something to better yourself and watch yourself grow you are going to take a big dopamine hit.  I think prime talks about this in the sense of larger projects.  He as talked about his experience being much less of a daily standup, but more of a ok we got three months to figure this out lets go boys.  When you are stuck in that daily jira grind it's harder to see that larger picture of the learning and growing you are doing over the course of 3 or 6 months.\n\nTimestamped to the part of the video that really dives into gratitude and finding the joy in the work that you have to do on purpose, but the whole vid is fire.","published":true,"public":true,"date":"2025-06-07T22:59:04.367383","id":673,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(269) DHH IS RIGHT ABOUT EVERYTHING (Again)? - YouTube","link":"https://www.youtube.com/watch?v=EIBxRMH4bvs","tags":"dev","message":"Should I go to college?  Was my education worth it? Should I keep going.  A question that comes in all too often accross most industries that require some level of education.  DHH has such great takes on it, some I had never fully thought about.  He starts out with should we have people study niche topics (using Russian Poetry as an example).  Yes the world deserves people who can make their life works out of something that brings them and many other so much joy, but no you probably shouldn't go 100k's into debt to do it.  Should I get a software engineering degree, or become a doctor also have similar answers, it needs to be somewhat justified and not outrageous as has become the norm.\n\nWe used to listen in to Dave Ramsey on long car rides and he would have people call in and say, they went half a million dollars into debt to become a dentist, only to discover they did not want to do dentistry.  At this point it's too bad, you gotta suck it up and pay that off with something that makes some serious cash, and the only skill you probably got that can bring in that level of cash is ... dentistry.\n\nThey dive into the college experience, learning to have adult debates with classmates about which direction a project should go or how to complete it.  Great stuff!\n\nSomething I had never put thoughts to is how do you feel when class is cancelled or an assignment is removed.  Are you excited to \"not have to do it\"?  I'd bet that most people do.  That's probably a good sign that you are there for the wrong reasons.  What other industry do you pay a f*** ton of money for a product and be like nah ill just take the receipt, you keep the thing.\n\nThis all just gets your foot in the door.  If you spent none of that time learning it will become apparent really fast and you will not climb the ladder.  Yes climbing the corp ladder is cliche, but at some point you probably want paid more and get opportunity to make more decisions.  And if it turns out you really suck, you're going to find yourself looking for a new job with no skill and a big pile of student debt sitting behind you.\n\nStudent debt is probably one of the biggest issues of our generation that only appears to be getting worse, everything signals your need to go to college, presige is important.  It feels like the other side is filled with glory lots of money and you will have all that debt paid off in no time.  I get it when you're 18 and you see 50k or 100k in student debt, but 80k or 150k salaries on the other side its like damn I make nothing right now I'll have that paid off in no time.  Then you get out and realize everything costs serious money, housing, kids, cars, broken AC units, and you cant pay off 50k in a year and a half making 80k.","published":true,"public":true,"date":"2025-06-07T22:49:47.248838","id":672,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"WebTUI","link":"https://webtui.ironclad.sh/","tags":"","message":"webtui, looks like a pretty sick design aesthetic.  I like the keyboard driven nature of it, the look and feel is on point to a terminal interface, sadly it looks like it is not a 2 way street, you don't automatically get a tui our of your website, just one that looks the part in the browser.","published":true,"public":true,"date":"2025-06-07T22:32:42.669623","id":671,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert Me? - YouTube","link":"https://www.youtube.com/watch?v=bAmJQuX4-ak&t=1684s","tags":"linux","message":"I've never heard of niri, or a scrolling window manager, it looks quite interesting.  I think tiling window manager misses out on named sessions and hotkey straight to tmux sessions, Brodi mentions not using tmux right before this segment.  Niri looks quite interesting, but looks like it suffers specificity.  maybe there are other tools that allow me to jump straight to something like brave, or steam, but I don't see how I could jump to a specific terminal.","published":true,"public":true,"date":"2025-06-07T01:05:25.796848","id":668,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Backups interrupted by full disk usage","link":"https://pype.dev/backups-interrupted-by-full-disk-usage/","tags":"homelab, self-host","message":"I'm way behind on my notification game and need to pick it up. maybe I'll look into hcio as well.  maybe I'll look into something that goes straight to signal or just get things working on ntfy.   An 80GB log file is massive and the kind of thing id like to see notifications more.","published":true,"public":true,"date":"2025-06-06T15:53:41.474272","id":667,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Queso Notes","link":"https://pype.dev/queso-notes/","tags":"blog","message":"Taking this as inspiration to do more non-tech on my blog, I've branched out into [[gaming]], but need take it to the next step.  excited to watch [pype.dev](pype.dev) evolve as well.","published":true,"public":true,"date":"2025-06-06T15:50:43.692925","id":666,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The ethics of README ads – Will McGugan – Will McGugan's essays","link":"https://willmcgugan.github.io/the-ethics-of-readme-ads/","tags":"dev, oss, blog","message":"I've long avoided running ads on my blog for the same reason.  For a few months I ran an ad above the fold.  It was a \"Your Ad Here\" kind of thing, and in the messaging I was looking for content relevant to my content, not google driven ads. This resulted in nothing, no hits, not a one.  I'm kinda with Will on this one beer money is not worth degrading the project for.  I seriously thought some of the big projects with a moderate level of success got a good cut for these sponsorships.  Some of the companies are big companies, like how do they even go through meetings and decide who gets beer money without spending more than that in decision making resources.  Maybe they have a guy with more autonomy than I would expect.","published":true,"public":true,"date":"2025-06-05T14:49:09.446915","id":665,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"minio/minio Tags | Docker Hub","link":"https://hub.docker.com/r/minio/minio/tags?name=RELEASE.2025-04-08","tags":"versioning","message":"Browsing for the minio tag that I have running right now I discovered that you can do `minio --version` and you get the same version that matches the docker tag, this is super convenient and helpful.  I also notice that they use timestamped version numbers.  I kinda dont mind this.  It feels easy to understand how far behind it is. I really appreciate that the version in the container matches the version inside the container.\n\nIt's not as pretty or flexible as semver, it does not communicate trees of majors and minors, but how often do we continue supporting/patching older majors and minors, in my experience only really big teams or teams with sufficient motivation are doing this. \n\nfood for thought.","published":true,"public":true,"date":"2025-06-04T13:58:40.072830","id":664,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The 1-3-1 Writing Technique","link":"https://www.youtube.com/shorts/SIKo2lCzfhE","tags":"writing","message":"I am going to start trying to employ this rhythm to my writing.  I'm not very sure how I feel about it, there is something almost too assertive about it.  It's giving me a (i'm great and you should too) kind of vibe.   I want to become more assertive in my writing.\n\nI'm giving this a shot and see what I learn, you might notice in my tils.","published":true,"public":true,"date":"2025-06-02T20:07:09.203501","id":663,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"From Prisma Founder to LiveStore: Building local-first apps with Johannes Schickling - YouTube","link":"https://www.youtube.com/watch?v=aKTbGIrkrLE&t=3260s","tags":"database, event, recommended","message":"This talk about live store really made me think about database transactions in a new way.  They are talking about live-store, and the complexity of distributed applications like a notes app with the ability to go offline and continue working.  The complexity of resyncing each instance is not simple, conflict resolution accross all the possible installs that may or may not even be online is a really hard problem.  They go deep on discussing an event driven paradigm that is driven off of a log of events and how this changes how we deal with databases.  Using the event log as the source of truth we can do things like forget about database migrations, we can replay all of the events onto a new database.  Its very interesting to rethink in terms of a log system that speaks in terms of understandable events (not table operations) as the source of truth for an application.","published":true,"public":true,"date":"2025-05-31T20:58:05.838183","id":662,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DHH on X: \"You don't need a mentor. There's no secret sauce left inside anyone's head any more. It's all been tapped, bottled, tweeted, and shared a million times. Sample some of that, but also guard your ignorance. You'll lose it soon enough. https://t.co/CheDbovOBF\" / X","link":"https://x.com/dhh/status/1928856582588076171","tags":"dev","message":"I need to find this podcast, was DHH this animated through the whole thing?\n\n> You don't need a mentor. There's no secret sauce left inside anyone's head any more. It's all been tapped, bottled, tweeted, and shared a million times. Sample some of that, but also guard your ignorance. You'll lose it soon enough.\n\nIt takes work, one on one hand holding is a shortcut.  Sometimes one that we need.  Sometimes we need to level up quick, hence why your job might pair you up with someone for the first few months, but it is not something you need, you can figure shit out on your own with hard work.  These days we have things like gippity to bounce ideas off, and you can generally get the sense of the direction the average of the internet it was trained on.  Always add your own experience and make a choice for yourself.","published":true,"public":true,"date":"2025-05-31T19:49:38.226125","id":661,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Self-Host Weekly (30 May 2025)","link":"https://selfh.st/weekly/2025-05-30/","tags":"self-host","message":"> The object storage (S3-compatible) platform MinIO created a bit of a stir this week \n\nI had not heard about this before it came in through selfh.st.  I use minio a lot, and did not know there are so many great alternatives out there for it.  I might be looking into some of these options such as [garage](https://garagehq.deuxfleurs.fr/?ref=selfh.st).  \n\nIts hard to tell from this article what mino dropped, but luckily for me it seems to be all ui related.    I use the UI for debugging/feedback/sometimes learning, but at this point I've got good flows for setting up new access keys, buckets, and everything with the cli.","published":true,"public":true,"date":"2025-05-31T16:29:26.787616","id":660,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DHH on X: \"NIH: Not Invented Here Syndrome might come from a good place, but almost everything that's good in this world came from people who ignored it. Virtually everything is a variation of something else. Everything can be done better. https://t.co/t7PcCgJba0\" / X","link":"https://x.com/dhh/status/1928450457262850053","tags":"dev","message":"I suffer hard from NIH, I'm cheap, I like building things, I hate reading the docs, the perfect recipe for some bad NIH.  I really like DHH's take here.  If no one builds anything new we get stuck with the same old shit.  I think theres a lot of things that as far as my use case is concerned feature complete and needs no more.  I would just build with it or on it, but not re-invent.  It's a slippery slope.","published":true,"public":true,"date":"2025-05-31T15:40:11.358159","id":659,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"feat: add hackernews hits on home page · jimniels/blog@b1a250b","link":"https://github.com/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8","tags":"blog","message":"Jim Nielsen fetches his hacker news ranked articles for his home page.","published":true,"public":true,"date":"2025-05-31T01:56:00.257203","id":658,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hackernews query by url","link":"https://hn.algolia.com/api/v1/search?query=waylonwalker.com&restrictSearchableAttributes=url","tags":"blog","message":"[this post](https://blog.jim-nielsen.com/2022/playing-with-blog-home/) by Jim Nielsen, lead me to [this commit](https://github.com/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8) where I found that he was including posts of his that wound up on hackernews.  I really like this idea and might take it, even though i have very few HN linked posts.","published":true,"public":true,"date":"2025-05-31T01:54:59.096764","id":657,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"External Links - Jim Nielsen’s Blog","link":"https://blog.jim-nielsen.com/about/external-links/","tags":"blog","message":"I really like the idea of Jim's Eternal Links, and really want to take it for myself.  To expand here I want to be able to look for common places for rss feeds, and be able to scrape out rss feeds for sites that I tend to link to often.  Also if they have something like a /blogroll it might be a good place to find new great people to follow.","published":true,"public":true,"date":"2025-05-31T01:51:13.200299","id":656,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Could I Have Some More Friction in My Life, Please? - Jim Nielsen’s Blog","link":"https://blog.jim-nielsen.com/2025/more-friction-please/","tags":"","message":"> Maybe we need a little more friction in the world. More things that merit our time. Less things that don’t.\n\nI can resonate with this post, less friction feels like it leads me to thinking less, having less skin in the game, understanding less, feeling less fulfilled.  Vibe coding is a new trend of 2025, it feels like the future, but it does not quite feel like the present yet.  It's riddled with errors and I only get frustrated when it doesn't work.  I like having some friction that leads me to think and pay attention.  There might be a future where this is not required for some things like coding up crud apps, but that does not feel like today.","published":true,"public":true,"date":"2025-05-31T01:49:35.103254","id":655,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A Gentle Intro to RSS","link":"https://derekkedziora.com/blog/rss-guide","tags":"rss","message":"> Some of the best things from the old internet are still preserved with RSS. Content is shared via simple files, which means the slow-loading, ad-stuffed and tracker-filled clutter of the modern internet are mostly absent.\n>\n> There aren’t any algorithms. RSS readers are wonderfully dumb. There’s no AI sifting through content to find whatever will outrage you the most. You just get new posts and mark them as read. It’s a calmer world.\n>\n> With RSS I follow lots of people writing about normal people things. People blog about getting back into playing the drums, a fun book they just read, a tough problem they’re working through and the other day to day things of life. This type of content tends to get buried on social media — it doesn’t get the clicks and sell ads like fear and outrage do.\n\nI feel like a curmudgeon, but i feel all of these things. I dont think that the new web is completely terrible, what is terrible is that the options of an algorithm ran by companies with differing goals is seemingly the only option.  RSS still works, its fantastic, I personally love it, but theres only a small fraction of the internet that it reaches both ways.  Few people have a reader, even fewer have a feed.","published":true,"public":true,"date":"2025-05-31T01:44:36.777552","id":654,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Command Line | gitignore.io / docs","link":"https://docs.gitignore.io/install/command-line","tags":"linux","message":"This is a very interesting cli, its so simple.  I stumbled accross the `gi` command awhile back and was like pfft, I dont want to install something for that.  Didn't even realize that you **don't** install it, its just http.  Their _install_ instructions lead you to putting a curl funtion in your bashrc.  \n\n``` bash\nfunction gi() { curl -sLw \\\"\\\\\\n\\\" https://www.toptal.com/developers/gitignore/api/\\$@ ;}\n```\n\nThis now has me wondering \"What else can build like this?\"","published":true,"public":true,"date":"2025-05-29T16:22:42.872445","id":653,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"My Keyboard Has Sublayers… and It’s Insane - YouTube","link":"https://www.youtube.com/watch?v=wz5eOowV9iw","tags":"keeb","message":"linkarzu has a way to navigate his entire mac using a hyper key.  Everything looks so tight and polished, also a lot to remember!  Lucky he has a system of mnemonics that make it easy to remember.  His setup is very Mac focused using mac only apps, so this would not work for me, though I'm sure I could get something similar on linux.  He did mention Kanata which is cross platform.\n\n## What I do\n\nI use a far different system that is fast loose and easy.  On every system I run I have 9 workspaces that let me put 9 applications, I can easily move apps to different workspaces and have a side by side if I need.  The core of what I do is terminal, web browser, and chat. Those go on workspaces 4,5,6, whch are home-row keys.  If I'm running obs, that is on 8, steam goes on 1. but I have some freedom to move.  Sometimes 2 will be an image editor or a video editor, sometimes something else all together, but I can quickly go to each app.\n\n## What I like from Linkazru\n\nI do like his layered approach.  I run a 42 key keyboard so things can get a bit cramped quickly. And when thinking in mnemonics you only get 26 letters in the alphabet, but prefixing these with another layer this number goes up exponentially.  Sublayers sound sick to be honest.\n\n","published":true,"public":true,"date":"2025-05-29T13:04:50.574104","id":652,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Forrest Knight on X: \"you're not allowed to write comments in your code anymore, because if you do everyone will just think it's ai generated.\" / X","link":"https://x.com/ForrestPKnight/status/1927398791398719997","tags":"dev","message":"Oh, I feel this.  I go through the effort of removing dum ai comments so the ai looks less ai.\n\n> you're not allowed to write comments in your code anymore, because if you do everyone will just think it's ai generated.","published":true,"public":true,"date":"2025-05-29T01:41:41.969523","id":651,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The adapter pattern in python | Rob Parsons","link":"https://robp.dev/the-adapter-pattern-in-python/","tags":"python","message":"This has me wondering if I need to really learn more patterns, data structures, and algorithms.  This looks particularly useful when trying to combine several objects that you dont have full control over and make them behave similarly.","published":true,"public":true,"date":"2025-05-28T21:19:27.201193","id":650,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Adding a Dynamic Now Page in Jekyll","link":"https://derekkedziora.com/blog/dynamic-now-page","tags":"","message":"wow looking at how this is done kinda draws me towards jekyll a little bit, I did not realize some of the similarities that it has with markata.","published":true,"public":true,"date":"2025-05-28T13:56:38.433220","id":649,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"CSS if() functions & reading-flow (in Chrome 137) - YouTube","link":"https://www.youtube.com/watch?v=Apn8ucs7AL0","tags":"css","message":"css if() just landed, I'm struggling to understand what I an do with this that I can't do with something as old as classes.  I can get it if I don't have control over html creation or js to add classes.  The example that Una shows includes data that could directly be a classname with a set of styles in css rather than this crazy css variable unpacking out of a data attribute and an if statement.","published":true,"public":true,"date":"2025-05-28T03:02:11.096590","id":648,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"wants | maya.land","link":"https://maya.land/wants/","tags":"blog","message":"> Allen Carr1 on quitting smoking:\n> [Carr] recommends working to really notice and internalise that disconnect [between what we want and what we enjoy]. He tells smokers to pay attention to their next cigarette. It’s like mindfulness but for noticing the unpleasantness.\n\nI can appreciate the restraint here, theres something about the mindfulness behind it all.","published":true,"public":true,"date":"2025-05-28T02:00:31.380891","id":647,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Blogroll","link":"https://reader.waylonwalker.com/blogroll/","tags":"rss","message":"I rolled out the blogroll today, nothing pretty, but is one single page of the rss feeds I follow.","published":true,"public":true,"date":"2025-05-27T02:33:08.291040","id":646,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Late Night Linux – Episode 335 - YouTube","link":"https://www.youtube.com/watch?v=warmcBBfZn0","tags":"markata","message":"Markata got a shout out part way through the latest episode of LNL, I will go back, re-listen and take some of the feedback.  His thoughts on Markata were interesting. On one hand it really is a thing for me that works for me, and as a person with too many side projects I don't have the focus to really give it polish.  On the other hand it really confirms why listen to podcasts, news, finger on the pulse, opinions and how often these guys are wrong, they are not the expert they probably look at 6 things like this a week.  He said that it was some sort of javascript thing, that maybe he could fix or customize with javascript if he wanted, kinda shocking, I thought maybe I accidentally added node modules or something dumb, nope, I have a whopping 1.4% js.  So most of the comments were plain wrong.  I get it he probably peeked at it for 30s and realized it wasn't the thing for his problem.  At the same time I should probably do a better job at marketing what it really is, cleaning up the docs and demo.","published":true,"public":true,"date":"2025-05-27T02:31:53.801183","id":645,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Root for Your Friends · Joseph Thacker","link":"https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html","tags":"catalytic","message":"Such a great message right now.  I feel like everywhere I turn is negativity, especially social media.  It feels like so many things are trying to divide and create hate.  \"This\" is what we should be doing with social media.  There are a lot of elements of \"there are two ways to have the biggest building in town, tear down all the bigger buildings, or just build the biggest fucking building\", If you want to be successful in X then surround yourself with others successful in X.  This is a catalytic skill that everyone needs to have in their belt.","published":true,"public":true,"date":"2025-05-27T02:27:24.208063","id":644,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(253) Billy Basso on code architecture of Animal Well! - YouTube","link":"https://www.youtube.com/watch?v=YngwUu4bXR4&t=6039s","tags":"gamedev","message":"Great conversation with Billy Basso the creator of Animal Well on the code architecture of Animal well.  It's all hand crafted C++. He talks about early games he tried to build being heavy in oop, and really got lost in oop.  Animal well is very flat, there is no inheritance, just lists of entities that all implement similar methods in their own way.  Layering and order of entities becomes very important.  Its crazy how much he had to think about hardware and MS build being very helpful with this, but needing to know all of the console apis.","published":true,"public":true,"date":"2025-05-24T19:38:21.014842","id":642,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Just fucking code.","link":"https://www.justfuckingcode.com/","tags":"dev","message":"This is great, beautifully captures a modern backend view of https://motherfuckingwebsite.com/.  I honestly resonate with almost all of this.  I have found myself in more trouble than help when trying to fully vibe out a project.  It never refactors, it leaves it shit everywhere, it mostly does what you say, until you get to something that seems easy, so you try to do it yourself, but you break its brittle piece of shit into pieces any time you try to touch it.  AI coding help is great, mcp seems like it really has some game changing abilities, but hands of vibe coded crap aint there yet for me.","published":true,"public":true,"date":"2025-05-24T19:31:09.342545","id":641,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(252) The Plot of \"Hollow Knight\" in One Minute - YouTube","link":"https://www.youtube.com/shorts/3xWgKFISG5U","tags":"game","message":"I did not realize half of this, and it took me at least 4 watches through this to catch everything.","published":true,"public":true,"date":"2025-05-24T00:01:07.197785","id":640,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"k8s-monitoring-helm/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml at main · grafana/k8s-monitoring-helm · GitHub","link":"https://github.com/grafana/k8s-monitoring-helm/blob/main/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml#L29","tags":"k8s, kubernetes, helm","message":"k8s-monitoring requires setting imageregistry and pullsecrets twice\n\n``` yaml\nglobal:\n  image:\n    registry: my.registry.com\n    pullSecrets:\n      - name: my-registry-creds\n  imageRegistry: my.registry.com\n  imagePullSecrets:\n    - name: my-registry-creds\n```","published":true,"public":true,"date":"2025-05-23T19:58:59.680596","id":639,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"No docs, no bugs","link":"https://simonwillison.net/2025/May/22/no-docs-no-bugs/#atom-everything","tags":"dev","message":"> Bugs exist when your test-enforced implementation fails to match the behavior described in your documentation. Without documentation a bug is just undefined behavior.\n\nThis is quite an interesting thought, so does this mean that, none of my undocumented side projects have bugs?  no I think there is still some implied behavior that naming things covers.  a function `get_bucket_contents` implies doing something wtih s3, getting stuff from your local filesystem or crashing would be considered a bug.  I think the argument here is that if I start mining bitcoin when you call `get_bucket_contents` and I have not documented it that this is a feature not a bug.  If I were to take this a step further, now do I need to document that this does not also start a bitcoin miner?  maybe this is more of an unwanted feature than a bug, I'm convincing myself more and more.","published":true,"public":true,"date":"2025-05-22T19:50:40.782848","id":638,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(249) The Subtle Details That Make Hollow Knight Great - YouTube","link":"https://www.youtube.com/watch?v=Vxt8uud5o_4&t=1s","tags":"gamedev","message":"So many small details go into making hollow knight such a great game, but it starts with such good controls, every thing is so fluid and predictable.  I knew about coyote time, but not some of the other details that Juniper covers, such as hang time, and faster decent than jump.","published":true,"public":true,"date":"2025-05-22T19:00:50.044391","id":637,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(246) Python: The Documentary [OFFICIAL TRAILER] - YouTube","link":"https://www.youtube.com/watch?v=pqBqdNIPrbo","tags":"python","message":"Excited to hear this story, they have so many key players in the trailer this will be fantastic.","published":true,"public":true,"date":"2025-05-18T16:43:12.767878","id":636,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Chris Biscardi's Digital Garden","link":"https://www.christopherbiscardi.com/wtf-is-kubernetes","tags":"k8s","message":"Interesting take on kubernetes from a front end perspective.  All valid arguments to me, and really the answer to any do you **need** to any specific implementation of tech is probably no.  We got along just fine before k8s ever existed and you still can, but its really nice in a lot of cases.  If your skills lean toward backend or infrastructure I encourage you to give it a try.  \n\n\n## k8s _distros_\n\nThere are a lot of beginner friendly k8s distros that you can setup with relative ease, kind and k0s are great for single node, If you want multi-node k3s is what I generally use.  If you want a very lightweight OS that you only interact with through an api, and has a very small attack surface talos is an amazing product.\n\n## When else might you want k8s\n\nInternal, on-prem, self hosted.  If you are trying to avoid the cloud for cost, rules, regulations, red tape, kubernetes is a great option to manage your container workflows yourself without needing to have a cloud budget, get approvals and sign offs on running workflows in a public cloud.","published":true,"public":true,"date":"2025-05-12T13:05:33.241205","id":635,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(238) GrafanaCON 2025 Keynote Livestream - YouTube","link":"https://www.youtube.com/watch?v=JYVf-Z320Y0","tags":"observability","message":"Just listened to this as I am really starting to get into grafana and feel like there isn't a mountain of setup this time around realizing how much of my stack is brand new.  Drill Down and Alloy are both new and key to my setup.  The Ai integrations at the end sound wicked good, I will be interested if you can do similar things with an MCP vs how much proprietary  stuff needs grafana cloud.","published":true,"public":true,"date":"2025-05-11T02:59:15.136795","id":634,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The future of Textualize - Textual","link":"https://textual.textualize.io/blog/2025/05/07/the-future-of-textualize/","tags":"","message":"> Ultimately though a business needs a product. Textual has always been a solution in search of a problem. And while there are plenty of problems to which Textual is a fantastic solution, we weren't able to find a shared problem or pain-point to build a viable business around. \n\nI can totally see this. Finding a marketable business idea is not easy, working in the developer space where everyone wants to do it themselves is no better.  Textual specifically I could see, I really wanted to build things on it as it came out, I had ideas, it was hard to use at the time and changing, so I took a break, got busy with far too many other things, and really I 'm good with rich most of the time.\n\nI daily use k9s, its absolutely amazing at what it does and appreciate that I could build something like it in python, its just hard to justify the time investment for the things I tend to work on.\n\n> Which is why Textualize, the company, will be wrapping up in the next few weeks.\n\nDamn, that hit hard, its been an adventure watching textual get built, things like posting look fantastic!  Glad to see that its still alive with open source and Will is not leaving, but there will be no company.  This likely means significanly less velocity, but it might mean that not being tied to making money other opportunities open up.\n\n\nThanks for giving us amazing terminal products Will.","published":true,"public":true,"date":"2025-05-10T14:27:58.140450","id":633,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"What's next? – Will McGugan – Will McGugan's essays","link":"https://willmcgugan.github.io/whats-next/","tags":"dev","message":"> So it’s back to plan A: taking a year off. I plan on using this time to focus on my health–something I haven’t prioritized while working as a CEO / Founder of a startup.\n\nWish you the best Will, you have given us textual and rich, and from what I can tell left it in some great hands.\n\n> All I can say for certain is that I would like to write more. Writing scratches many of the same itches as software development, and it is a skill I’d like to nurture.\n\nGo get em Will, write to your hearts desire, and resist the urge to make an SSG company this time.","published":true,"public":true,"date":"2025-05-10T14:08:45.665124","id":632,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Too much magic – Will McGugan – Will McGugan's essays","link":"https://willmcgugan.github.io/too-much-magic/","tags":"dev","message":"> Now “too much magic” is not the same thing as “bad magic”, although they are often conflated. Bad magic is when the implementation details leak out from the level below. This can manifest itself as cryptic errors that reference the magic’s implementation. ","published":true,"public":true,"date":"2025-05-10T01:49:34.352203","id":631,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(236) Markdown's biggest hater | Knut Melvær - YouTube","link":"https://www.youtube.com/watch?v=TACa-vtHQ9k&t=2s","tags":"markdown, blogging","message":"Dang Strong takes against markdown here with a strong push for bespoke content models/structures.  This idea is completely foreign and wild to me.  I get it that markdown has its issues with flavors, add ons and what not, but overall its mostly transportable, its a skill that works most content sites and writing tools.  I am so far on the other side that I seek out tools with markdown as an option and lean away from wsiwyg tools with specialized data formats on the backend.\n\nI'll end with, I'm also a dev that creates very simplified content and maybe seeing the backend of a site with lots of custom fields would be very eye opening for me.","published":true,"public":true,"date":"2025-05-10T00:52:59.661163","id":630,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Week Links №2: April 2025 - daverupert.com","link":"https://daverupert.com/2025/05/week-links-2/","tags":"","message":"> Last year I attempted to do some newsletter-style link aggregation… that good intention imploded spectacularly. But I switched to Obsidian this month and now I have a better system for aggregating links (post on that coming later). Inside this issue you’ll find some games, some homelab server hardware, some AI discourse™, some musical instruments, and more.\n\nThis hits so close to home, I even went through the effort of making a weeknotes script, one weeknote post.  I also was inspired by obsidian but it didn't work out for me, so my script uses data from markata.\n\n![image](https://dropper.wayl.one/api/file/b1a5212b-846f-4144-82ab-51cd9ace086d.webp)\n","published":true,"public":true,"date":"2025-05-09T13:49:04.562539","id":629,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"What ChatGPT is NOT - Tech Raven Blog","link":"https://blog.techravenconsulting.com/what-chatgpt-is-not/","tags":"llm","message":"> Do you remember regression models from college: given some data, you find a best fit line that allows you to predict Y given X. At the end of the day, ChatGPT, and LLMs in general, are the same thing as the regression model – it’s just that ChatGPT is the largest and fanciest model we currently have to model language and information.\n\n\nI really am coming to the idea of calling it a \"word calculator\", this seems to be the most succinct description of llms that the lay person can comprehend and relate to.\n\n> ChatGPT does not hallucinate or become unhinged\n\nI think Steve goes much deeper on this in his [intervew on fafo.fm](https://www.fafo.fm/vectorizing-your-databases-with-steve-pousty/).  They describe it more as a pleaser or \"yes man\"  essentially all the companies that are building these models want to give the \"best\" answer, better than their competitors.  With this comes the risk of it being completely wrong, they are designed to always give an answer.\n\nOn that episode they talk about how each word has a statistical probability tied to it and in some visualizations you can see the confidence, in almost every example of \"hallucination\" you will find some set of very poor confidence followed by BS.  Thats not to say that every time there is low confidence there is BS though, that is why this is such a hard problem.\n\n> ChatGPT is not a replacement for search\n\nI've become really bad at this.  This is slowly becoming my starting point for a lot of research, not my only research, but the first wet finger in the air.  Most often done with low effort, low risk tasks.\n\n> In ChatGPT, just like in the shelf full of the Encyclopedia Britannica I had when I was a kid, information on topics has been reduced to good summaries and presented in logical format. In this case we have removed the human authors and replaced them with a very large neural network.\n\nI really like this description and it matches up with my last comment.","published":true,"public":true,"date":"2025-05-09T13:45:18.842072","id":627,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"“I’d rather read the prompt” – Chris Coyier","link":"https://chriscoyier.net/2025/05/08/id-rather-read-the-prompt/","tags":"","message":"I'll triple down on the link-blog chain here, see this one going around all over this week and finally had time to read through when it hit my rss reader via Chris.\n\n>  It should come as no surprise that nearly every vibe-coded app on the Internet struggles with security issues; look no further than the vibe-coded recipe app that leaks its OpenAI keys. Every time one generates code by prompt, they create a new stillborn program; vibe coding is the art of stitching together their corpses into Frankenstein’s monster.\n\nDamn, that is a strong statement, stitching together the corpses, strong statement here.  The OpenAI key thing feels kind of obvious to me, every set of docs, blogs and examples on the internet need to be runnable for people to learn and try out new tech easy, putting secrets in the wrong place is easy, putting them somewhere that you can decode them without sharing them is hard team specific, app specific, and so nuanced to your architecture that its rarely included in public examples.  I imagine there are a lot of good code example out there that follow good practice, but it feels like that might have missed the training data here.\n\n It alrso reminds me of [thought-625-the-rule](https://thoughts.waylonwalker.com/post/625), where prime talks about small apps being happy and easy and at some point every change is hard, and likely  impossible to vibe code.\n\n> The whole point of making creative work is to share one’s own experience - if there’s no experience to share, why bother? If it’s not worth writing, it’s not worth reading.\n\nllms are not capable of being creative, they are word calculators, statistical models that predict the next likely word based on their experience, they are not capable of new discoveries.","published":true,"public":true,"date":"2025-05-09T13:09:30.183629","id":626,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(236) The Rule - YouTube","link":"https://www.youtube.com/shorts/emlDGTXuhts","tags":"llm, dev, vibes","message":"Under 2000 everything is happy, green field.  Any decision you have made is relatively easy to back out of (barring you making a library with downstream users), but as you go, regret kicks in.  Regret we didn't make that pydantic 2 upgrade earlier, as new features become more apealing.  Regret that we chose sqlite for simplicity, speed, agility, and now we might need robust and distributed.  Regret that you chose a front end framework, or to have a front end at all to a backend problem.  Regret that you put 6 layers of abstraction on your db early on and now that you understand the problem you want different abstractions, but all of your endpoints deeply depend on the current one.\n\nVibe coding will not save you, it will only make these wrong decisions for you without the context that you have.  You will hate it's decisions more because you had no input into some of them.","published":true,"public":true,"date":"2025-05-09T13:01:16.074838","id":625,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"THE STANDUP - Coding DIRTY Episode 7","link":"https://www.youtube.com/watch?v=hbEWfC4k-Gw","tags":"dev, testing","message":"> \"Gradually roll out your releases to a small group of people\"\n\n\n~ roughly what prime said (I'm listening live)\n\nThis really hit home with me, tests can be so good at making sure that we dont repeat bugs and that laser focused things work, tests are generally small and focused, but this does not replace some sort of integration testing.  These days very few things are written as a monolith, and hence there are a lot of interactions that really need to play well together accross various systems.\n\nThey call out Crowdstrike here, which took down the world blue screening critical windows systems everywhere in 2024.  It was revealed that a small changed was rushed through and skipped critical rollout paths since it seemed like a small change.  Crowdstrike also runs at a super low kernel level of access and a small memory bug can kill the system.","published":true,"public":true,"date":"2025-05-07T18:00:09.404192","id":624,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Learning monitoring","link":"","tags":"fleeting","message":"I'm trying to level up my sre game.  I'm trying to set up grafana dashboards for everything and it is such a wide surface area.  It's never just one thing you have to have 3 or more things hooked together in order for the data to flow.\n\nI'm really getting not invented here vibes, and thoughts that I can just build this myself.  Not grafana and it's scalability necessarily, but small components of observability.  ","published":true,"public":true,"date":"2025-05-07T15:05:45.601349","id":623,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Kubernetes Monitoring Helm tutorial | Grafana Loki documentation","link":"https://grafana.com/docs/loki/latest/send-data/k8s-monitoring-helm/","tags":"grafana, loki","message":"This is a really  great guide to setting up kubernetes monitoring with helm, it uses loki as a log datasource and alloy as a collector of kubernetes logs, events, and nodes.  The charts are setup really well to start collecting logs from all your kubernetes pods.","published":true,"public":true,"date":"2025-05-07T01:42:38.100353","id":622,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Configure the Tempo data source | Grafana documentation","link":"https://grafana.com/docs/grafana/latest/datasources/tempo/configure-tempo-data-source/","tags":"grafana, tempo","message":"Really helpful article to getting tempo datasource setup in grafana, this enables you to see span and trace data within grafana.  This data helps debug and work through issues that you might come into  with performance and need to see the timing of requests along with logs.","published":true,"public":true,"date":"2025-05-07T01:38:20.513447","id":621,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Vectorizing Your Databases with Steve Pousty","link":"https://www.fafo.fm/vectorizing-your-databases-with-steve-pousty/","tags":"ai, llm, rag, vector","message":"Steve is such a great listen, the neurospicy 🌶️ rambles this episode goes on is so relatable.  I feel like I really missed out on some great takes on intellij vs neovim, but got some really great knowledge about vector db's, embedding, text compression, similarities to vector algegra like infinite craft. \n\n\nJust popped open infinitecraft and I've definitely played this with my kids before, super fun, just could not remember the name of this one.  I do remember an android one as well that is alchemist or something like that, which we have also played a lot.","published":true,"public":true,"date":"2025-05-04T17:54:39.622784","id":620,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Recovering from Disaster with Seth Eliot","link":"https://www.fafo.fm/recovering-from-disaster-with-seth-eliot/","tags":"cloud, dev","message":"This episode really got me thinking about the difference between HA and DR and my approach to each one.  They talk about it from the perspective of a cach cow kind of app rather than a homelab or internal tooling, but think of HA as 9's how many 9s are we willing to pay for, tink of DR as dollars how many dollars will we loose during the period of recovery.  So much more in the episode, a lot of talk around cloud vendors and what they give you vs a purpose build platform with HA and DR in mind.","published":true,"public":true,"date":"2025-05-04T17:48:54.167993","id":618,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(230) Red-Knot: Ruff's new Type Checker - Talk Python Live Stream - YouTube","link":"https://www.youtube.com/watch?v=XVwpL_cAvrw","tags":"python","message":"Astral is doing great things in the python industry.  They are disrupting entire categories of tools with extremely fast, easy to use, and feature rich alternatives that make it really hard to keep using the incumbent.   So far I am seeing no signs of evil, sometimes with such a disrupter there is some sort of downside that make it hard to want to do the switch.  In the interview they even mention things like leaning on lsp so that it works across all editors rather than building out vscode integrations that work for **most** developers.  As a neovim user I greatly apreciate this.","published":true,"public":true,"date":"2025-05-02T01:06:05.344464","id":617,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Playground | Red Knot","link":"https://types.ruff.rs/","tags":"python","message":"ty, has a playground running at types.ruff.rs.  You can edit code in there and see what the type checker results would be in browser.  This looks good, excited to see it running in my lsp.\n\nHere is an example where a Optional may not be defined.\n\n![image](https://dropper.wayl.one/api/file/783e4d9e-8b23-4304-8921-2ae05aebcc8a.webp)\n\nChecking for existance before using it resolves the issue.\n\n![image](https://dropper.wayl.one/api/file/cc28335c-4130-4bf4-829d-0ff39f2aa32d.webp)","published":true,"public":true,"date":"2025-05-02T01:02:31.278498","id":616,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"pypi package ty","link":"https://pypi.org/project/ty/","tags":"python","message":"Astral is working on some great things around python, they have created a high standard for python tooling built on rust that works really well, runs fast and covers everything in the space it resides in. ty appears to be their linter coming soon.","published":true,"public":true,"date":"2025-05-01T20:44:27.078308","id":615,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"3D Printable Power Brick Bracket Designer","link":"https://bracket.engineer/?width=113.5&height=63&depth=98&bracketThickness=3&ribbingCount=9&ribbingThickness=2.5&holeDiameter=5&holeCount=1&earWidth=17&keyHole=on&color=%2344ff00","tags":"3d-printing","message":"This is madness that Wes Bos made this with manifold.js and no openscad!  Yes, I have these stupid brackets everywhere, yes, I hand model my own brackets.  No I don't do it enough.  I don't like that these model generators like openscad cannot make fillets and chamfers, but I appreciate the heck out of the speed and automation you can make iterations of things.\n\nLink to the promo video.\nhttps://bsky.app/profile/wesbos.com/post/3lo4h7unk6s2i","published":true,"public":true,"date":"2025-05-01T14:17:43.937176","id":614,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"661: Working Vacations, Ripping Out JavaScript, and Non-US Cloud Service Options – ShopTalk","link":"https://shoptalkshow.com/661/","tags":"blog","message":"Chris hit me where it feels about 10 minutes in.  He said he has not been writing on his site as much lately and how hard it is to get back in.  He mentions having a baby idea of a post, but then having the thought do you really want to come back from a long break with this!\n\nMomentum is a b**** when you got it you cant stop, and when you don't you can't stop.","published":true,"public":true,"date":"2025-05-01T14:00:47.059705","id":613,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(228) The Worst OS - YouTube","link":"https://www.youtube.com/watch?v=8T5pyGiTPdE","tags":"linux","message":"How is usability and it doing the thing I paid for it to do a selling point??  Any time I've touched a windows machine in the past 7 years has felt awkward, I have no idea where things are now, but they look so much worse.","published":true,"public":true,"date":"2025-05-01T12:54:13.944601","id":612,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(228) The Worst OS - YouTube","link":"https://www.youtube.com/watch?v=8T5pyGiTPdE","tags":"linux","message":"How is usability and it doing the thing I paid for it to do a selling point??  Any time I've touched a windows machine in the past 7 years has felt awkward, I have no idea where things are now, but they look so much worse.","published":true,"public":true,"date":"2025-05-01T12:54:12.304589","id":611,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A quote from Mark Zuckerberg","link":"https://simonwillison.net/2025/May/1/mark-zuckerberg/#atom-everything","tags":"ai, llm","message":"Interesting how confidently he says we can easily go to the top.  really makes you wonder what we the normies are leaving on the table by using these general purpose models and what could be achieved with really tuned in models.  Could I make an automatic blog tagger more accurately, maybe smaller, maybe tuned so well it runs fine on cpu? ","published":true,"public":true,"date":"2025-05-01T12:50:52.564259","id":610,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Chris Coyier","link":"https://chriscoyier.net/2025/04/30/12292/","tags":"webdev","message":"The web is everywhere, its the one true write once and run anywhere platform.  Millions sunk into browser performance and things like the v8 engine allow us to run our shitty websites anywhere and it still runs good.... most of the time","published":true,"public":true,"date":"2025-05-01T12:48:04.273687","id":609,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Helm - Postiz Docs","link":"https://docs.postiz.com/installation/kubernetes-helm","tags":"homelab, self-host","message":"I didn't realize that postiz had a helm chart, I just hand rolled mine based on the compose file they provide.  I went from running the compose stack locally to running in my homelab with kubernetes.  I am using cnpg rather than a postgres container which I really like the workflow of as far as backup and restore.  The one hiccup I ran into was changing the domain from localhost to my homelab domain killed all of my integrations and they needed the redirect url updated.","published":true,"public":true,"date":"2025-04-30T21:44:17.631241","id":608,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(221) Louis Rossmann's Keynote Speech on Right to Repair - YouTube","link":"https://www.youtube.com/watch?v=2ol3rMem_Eg","tags":"dev","message":"Great talk from Lous Rossman!  TLDR you don't own it, and stop pointing the finger calling everyone else an idiot for supporting the other brand, cause your's probably also has different issues.","published":true,"public":true,"date":"2025-04-27T19:35:21.963330","id":598,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"True Non-Planar Slicing is Here - YouTube","link":"https://www.youtube.com/watch?v=M51bMMVWbC8","tags":"3d-printing","message":"This is a wild concept for a slicer, essentially he didn't even make a slicer just a crazy  pre-process and post prossess to cura slicer,  deforming the part until it doesn't have any overhangs, creating a normal planar slice, then undeforming the output from cura.  He also mentions that the rapid moved needed modified as well. I'm assuming this is because they are generally long distances and not short, without breaking these long lines up we would still end up wtih a straight line after deform.","published":true,"public":true,"date":"2025-04-19T15:39:34.505536","id":597,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Marp: Markdown Presentation Ecosystem","link":"https://marp.app/#get-started","tags":"markdown, presentation","message":"Intersting markdown presentation tool, Looks very simple.  I really like split on `---` much better than by h1 or h2.  Their theme looks really nice in the screenshots.","published":true,"public":true,"date":"2025-04-17T13:01:40.316419","id":596,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Build UIs that don't suck - YouTube","link":"https://www.youtube.com/watch?v=-h9rH539x1k","tags":"tailwindcss, webdev, css","message":"How to make an entire clickable without presenting the entire content of the card as the link title.  These videos are great, I've ran into these types of problems so many times, and definitely did not know about things like isolate to keep the z-index scoped to one element.\n\n* isolate - scope z-index inside this element so that it does not leak out.\n* [.relative [.absolute, inset-0, z-10]] - the inset zero is a modern shorthand for zeroing all sides, top-0, right-0, bottom-0, left-0.","published":true,"public":true,"date":"2025-04-15T13:50:53.730548","id":595,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(201) Let's Talk Open Source - Prime Reacts - YouTube","link":"https://www.youtube.com/watch?v=SQ0mBnJmd6I","tags":"open-source, dev","message":"This is an absolute banger of a review by prime and Dylan Beetle.  I love the similar takes with different perspectives, would really like to see them podcast together, but this one way style interview does really well to cover a lot of issues in open source, rug pulls, version pinning, thankless maintainers, what its like to open source from a large company.","published":true,"public":true,"date":"2025-04-15T13:21:53.681418","id":594,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Self-Hosted 29: Perils of Self-Hosting","link":"https://selfhosted.show/29?t=637","tags":"homelab, self-host","message":"Interesting takes on Diun here. I agree that I like to be in control of updates and pinning not to latest.  both seemed like they weren't going to run it because they can look up the latest version.  Maybe I need to be less aggressive on keeping things up to date and its a me problem.  I just got diun setup and hooked into ntfy, and I kinda like the automated checklist of new images that I can review and update.\n\nTo be a bit more clear, having control over changes coming in from others,  even if I dont care to see the changelog, it is nice to roll out an update, have it in your git history, watch it deploy and work like before, if not roll back and read the changelog.  For internal applications I'm down for automated releases like argo image updater give you, this thing has already gone through review, launch the damn thing at least to a dev space.","published":true,"public":true,"date":"2025-04-15T13:18:51.481120","id":593,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Spring 2025: Self-Hosted Update – David Bushell – Web Dev (UK)","link":"https://dbushell.com/2025/04/13/self-hosted-update-spring-2025/","tags":"","message":"Davids blogs always have so many links that send me down new rabbit holes.  Interesting that his experience with smart home is turning away, I've been somewhat interested for awhile, but never fully pulled the trigger on buying things.\n\nI really hope tailscale enshitification does not take off, but really for me, I barely use it even as a homelabber.  Idk why, but every other homelabber praises it so much and I just dont find myself using it.","published":true,"public":true,"date":"2025-04-13T13:59:32.577192","id":592,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Characters - Xe Iaso","link":"https://xeiaso.net/characters/","tags":"blog","message":"xeiaso, has the coolest characters on her blog.  Definitely something I'd like to replicate.  I really appreciate how each one has its own sprite sheet, and they have conversations with each other.\n\n![image](https://dropper.wayl.one/api/file/77dd4cb5-4fdb-4d09-8b9b-d9cdd72b2490.webp)","published":true,"public":true,"date":"2025-04-12T20:02:35.372300","id":591,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(198) Comparing Crazy Suspension Setups on a Bumpy Road! [Trailmakers] - YouTube","link":"https://www.youtube.com/watch?v=zolrLsjs1c4","tags":"trailmakers, game","message":"I want to go build these now, these are suspension setups I had no idea you could do in trailmakers.","published":true,"public":true,"date":"2025-04-12T01:34:34.377284","id":590,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories.","link":"https://github.com/adrianlopezroche/fdupes","tags":"cli","message":"keeping this in my back pocket for now.  I just moved a few TB's of data in the homelab and I am expecting a lot of duplication to show up.","published":true,"public":true,"date":"2025-04-09T12:56:53.785134","id":589,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Diun","link":"https://crazymax.dev/diun/","tags":"docker, containers, k8s","message":"Diun, looks like a very interesting tool to monitor for image updates, it does not make any change, it only makes notifications.  This feels like an easy start to getting image updates started with low effort, keep git ops, but requires manual updates.  I see this as a tool that would be a great start and pair well with automated image updaters to ensure they are working as expected.","published":true,"public":true,"date":"2025-04-07T13:33:20.049666","id":588,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Keel","link":"https://keel.sh/","tags":"k8s","message":"Keel looks interesting, I might give it a try as a simple image updater. I'm unsure if it fits my gitops patterns though.  I like to keep everything defined in git, I don't like drift outside of that so Keel might not be the thing I want.","published":true,"public":true,"date":"2025-04-07T13:30:49.223309","id":587,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"World's easiest Live dashboard with htmx - YouTube","link":"https://www.youtube.com/watch","tags":"webdev, htmx","message":"Damn he makes this easy.  I did not know about `hx-select`.  yes there is waste in requesting the entire thing every 5s, but damn that was easy to get life reload.  I've only done very specific backend endpoints, built pages up from partials, made endpoints for partials.  keeping this one in my back pocket.\n\nI'm just kind of amazed that he could do this all in html without touching the backend or js, typically things like this require one or the other.  Yes js is running, but no other js library I'm aware of lets you do this.","published":true,"public":true,"date":"2025-03-29T15:04:45.325244","id":586,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Resetting a lost admin password — Nextcloud latest Administration Manual latest documentation","link":"https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/reset_admin_password.html","tags":"homelab","message":"This is a handy line to reset your admin password in nextcloud.","published":true,"public":true,"date":"2025-03-24T00:26:45.747374","id":585,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Redis configuration | Docs","link":"https://redis.io/docs/latest/operate/oss_and_stack/management/config/","tags":"dev","message":"redis has all of their default self documented configs hosted here.  You can pull the default redis.conf for any of the major releases.","published":true,"public":true,"date":"2025-03-20T20:14:57.750940","id":584,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"hotel_bookings.csv","link":"https://www.kaggle.com/datasets/ahmedsafwatgb20/hotel-bookingscsv?resource=download","tags":"data","message":"nice dataset to use for example / test projects.  I'm using it to play with duckdb currently.","published":true,"public":true,"date":"2025-03-15T22:32:44.924553","id":583,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The State of Secrets Sprawl 2025","link":"https://blog.gitguardian.com/the-state-of-secrets-sprawl-2025/","tags":"dev","message":"Good report, make notes later","published":true,"public":true,"date":"2025-03-14T18:16:07.606605","id":582,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Mill-Max Hotswap Sockets (0305, 7305, & 3305) – Keebio","link":"https://keeb.io/products/mill-max-hotswap-sockets?variant=32377167511646","tags":"keyboard","message":"looking into trying these Mill-Max pins on a handwired 3d printed build to see if I can get away from specialty hot swap sockets.  Damn they aren't exactly cheap, I really want the nice short ones but they start at $20 per 60ct and you need two per key, that adds up quick.","published":true,"public":true,"date":"2025-03-14T01:02:15.678218","id":581,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"r.jina.ai","link":"https://r.jina.ai/","tags":"llm","message":"jina reader is a pretty sweet tool to convert a site to ai compatible text.  There are other web to markdown types of tools, but the convenience of just adding r.jina.ai to the front of any page makes it so easy to grab for one page of docs.","published":true,"public":true,"date":"2025-03-13T17:12:44.316496","id":580,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Why did Framework build a desktop? - YouTube","link":"https://www.youtube.com/watch?v=zI6ZQls54Ms","tags":"ai, llm","message":"the racked up 4 framework mainboards sound wild.  connected with usb4 and 5gig ethernet.  they said they can run big models quantized down from 600Gb to within the 512GB limit they have.  This seems wild to bring this level of capability to such a low price point.  It will be really cool to start to see demos come out.","published":true,"public":true,"date":"2025-03-12T13:01:44.741276","id":579,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"PyApp","link":"https://ofek.dev/pyapp/latest/","tags":"python","message":"I think I'm getting really close to having a good workflow setup for using pyapp.  Such an amazing project to allow developers to create applications in python without passing on the hassle of python and managing installs to the user.","published":true,"public":true,"date":"2025-03-03T01:52:54.684199","id":578,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(154) CSS Battle - Re-create an Image with CSS in the Fewest Characters | Experts Compete in CSS Code Golf - YouTube","link":"https://www.youtube.com/watch?v=B32NKRKJ_Cc","tags":"webdev","message":"Watching Wes fiddle through this with what a sane person would write in a normal day application and not applying the tricks for this kind of battle is how I feel when trying to do leetcode.","published":true,"public":true,"date":"2025-03-01T16:22:07.478188","id":577,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ergonomic Laptop — Evan and Katelyn","link":"https://www.evanandkatelyn.com/blog/ergotop","tags":"keyboard","message":"This is such a cool idea, I tend to not use laptops at all because they are so uncomfortable I just wait till I'm back at my desk.  This solves two main issues I have with laptops, the posture to use them is shit, the keyboards that come on them is not what I want to use.  I've solved the latter with my own custom keyboard.","published":true,"public":true,"date":"2025-02-28T14:01:14.397319","id":576,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"OpenTools | The open MCP server registry","link":"https://opentools.com/","tags":"llm","message":"OpenTools is an index for mcp servers to work with new agentic workflows like roo code and windsurf.","published":true,"public":true,"date":"2025-02-23T22:31:33.856646","id":575,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(149) I Made My Own JBOD Enclosure For CHEAP - YouTube","link":"https://www.youtube.com/watch?v=QGkqwdM0L6g&t=781s","tags":"homelab","message":"I really like this idea for a homelab jbod. Hardware Haven builds out **J**ust a **B**unch **O**f **D**isks using some pretty affordable hardware and has up to 16 disks added to his homelab with the os having full access to use with zfs.","published":true,"public":true,"date":"2025-02-23T22:30:42.358720","id":574,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"XCMKB: ZMK/Bluetooth Boards","link":"https://xcmkb.com/pages/zmk-bluetooth-boards","tags":"keyboard ","message":"Nice overview to getting started in zmk","published":true,"public":true,"date":"2025-02-21T14:23:18.081772","id":573,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Mantis Clamp by zuberio | Download free STL model | Printables.com","link":"https://www.printables.com/model/48505-mantis-clamp/files","tags":"3d-printing","message":"Zuberios Mantic clamp, would ya look at it.  This thing looks like a handy tool for soldering. Excited to give it a try.\n\n![image](https://dropper.wayl.one/api/file/101b97c0-99c6-40f5-bc2c-9d0bef3babb0.webp)","published":true,"public":true,"date":"2025-02-18T22:24:06.398387","id":572,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(144) The 3D Printed Mantis Clamp! #3dprinting #shorts #diy - YouTube","link":"https://www.youtube.com/shorts/a8uzENYZ72k","tags":"3d-printing","message":"Damn this looks good, I've been casually keeping my eye out for something like this for quite awhile, I think this will come in handy for keeb builds.  Printing one out as I post this, damn I love 3d-printing.\n\n![image](https://dropper.wayl.one/api/file/ddbde7a1-8b8a-4096-92e2-1e602b1603a2.webp)","published":true,"public":true,"date":"2025-02-18T22:22:54.392380","id":571,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"There are many Style Guides but this is Mine—zachleat.com","link":"https://www.zachleat.com/web/style-guide/","tags":"blog","message":"Zach's site looks sick colors are all on point, the fonts are so good.  I really like the idea of a style-guide.  I think I might be renaming my [[ sample ]] post to style-guide now.","published":true,"public":true,"date":"2025-02-18T01:56:24.696281","id":570,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"python-build-standalone/.github/workflows/release.yml at main · astral-sh/python-build-standalone","link":"https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/release.yml","tags":"just","message":"Astral uses just in CI, kinda cool to stumble into this setup in the wild.\n\n``` bash\nrun: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }}\n```\nAnd her is the accompanying justfile.  you can see how it accepts arguments, and starts calling out to other just recipes.\n\n``` justfile\nrelease-run token commit tag:\n  #!/bin/bash\n  set -eo pipefail\n\n  rm -rf dist\n  just release-download-distributions {{token}} {{commit}}\n  datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz  | awk -F- '{print $8}' | awk -F. '{print $1}')\n  just release-upload-distributions {{token}} ${datetime} {{tag}}\n  just release-set-latest-release {{tag}}\n```","published":true,"public":true,"date":"2025-02-17T23:21:05.750568","id":569,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da","link":"https://github.com/WaylonWalker/waylonwalker.com/commit/93ca7da6dd37100d2fb2cd989c2ddb31692c3bf9","tags":"blog","message":"fixing more ahrefs issues on the road to fixing all major issues within my control I found a ton of urls pointed to an url with a double slash, turns out I wasn't properly referencing slug with post.slug.\n\n![image](https://dropper.wayl.one/api/file/d821eb80-aeaa-4f96-becd-7609b798663c.webp)","published":true,"public":true,"date":"2025-02-17T22:32:04.484983","id":568,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"fix json schema · WaylonWalker/waylonwalker.com@deebd40","link":"https://github.com/WaylonWalker/waylonwalker.com/commit/deebd400e638bfaa41db953530597983ae0df82a","tags":"blog","message":"I found that I had _Structured data has schema.org validation error_ on essentially every single page on my blog, turns out I had made some changes and have never tried to validate it.  Damn json and its hatred towards trailing commas.\n\n\n![889378f5-6444-4a38-a7e4-c305fe93e1d7.webp](https://dropper.wayl.one/api/file/889378f5-6444-4a38-a7e4-c305fe93e1d7.webp)\n\n\n![image](https://dropper.wayl.one/api/file/ca373ce6-9a4a-4e5b-8a0e-0b2959915ab5.webp)\n\n","published":true,"public":true,"date":"2025-02-17T22:26:01.987149","id":567,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Weblogging: Part 1 – David Bushell – Web Dev (UK)","link":"https://dbushell.com/2024/12/09/weblogging-1/","tags":"blog","message":"Long live RSS!  Rss is not dead David, you are right there.  I really agree with David that learning a topic well enough to form thoughts and write about it really help learning.  You don't need to be an expert, but forming your own thoughts, putting ideas in words takes a lot more than surface level knowledge.  When you try to write or speak about something you quickly realize where your holes in understanding are.\n\n> Blogging helps me learn. When I commit knowledge to writing it reinforces what I know and shines a spotlight on what I don’t. Most topics require additional research. Even then, I occasionally get things wrong, or miss different ways of thinking, and I welcome corrections. I’ll often update and enrich my posts based on feedback. Without my blog I’d miss other points of view.\n> \n> As they say, the best way to get an answer on the internet is not to pose a question, but to assert the wrong solution! Most feedback I get is constructive. Sometimes it’s blunt but I try not to read into unspoken sentiment. Some people are more direct. If the end result is positive learning, I can take a hit or two.","published":true,"public":true,"date":"2025-02-17T21:01:00.259281","id":566,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b","link":"https://github.com/WaylonWalker/waylonwalker.com/commit/0fd994b0101f7260051ec914ea6987e1c70603bd","tags":"blog","message":"In fixing a bunch of meta tags, I introduced _Open Graph URL not matching canonical_ on every page by having trailing / on canonical and not on the `og:url`.\n\n![image](https://dropper.wayl.one/api/file/1adedfb8-5fbd-4622-adda-2f3984baeb03.webp)\n\nThis commit will fix the error.","published":true,"public":true,"date":"2025-02-17T20:53:22.078750","id":565,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Cotton Coder – David Bushell – Web Dev (UK)","link":"https://dbushell.com/2024/01/24/cotton-coder/","tags":"blog","message":"I like Davids idea for cotton coder here, reminds me a lot of [[ thoughts ]], which turns out to be mroe commonly called a linkblog.  I can relate to David heavily on gathering too many side projects and soem collecting more digital dust than you would really like them to.  I use thoughts for quick publishing, very similar to David's [notes](https://dbushell.com/notes/).  I have tags and titles, but the titles are a reflection of the post I'm taking a note on.  They are short and sweet, I put just enough thought into them without overthinking them.  They live as a separate server hosted website, but the data gets pulled into my blog at build time, so they end up in the same place eventually.","published":true,"public":true,"date":"2025-02-17T03:05:12.904482","id":564,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"valkey-io/valkey: A flexible distributed key-value datastore that is optimized for caching and other realtime workloads.","link":"https://github.com/valkey-io/valkey","tags":"dev","message":"valkey appears to be the largest open source fork of redis that was forked just before their transition to the new source available licenses.\n\nOne notable thing missing from the readme is how to run with docker, which I saw in the valkey-py docs.\n\n``` bash\ndocker run -p 6379:6379 -it valkey/valkey:latest\n```\n\nYou can install the python library with\n\n``` bash\npython -m venv .venv\n. ./.venv/bin/activate\npip install \"valkey[libvalkey]\"\n```\n","published":true,"public":true,"date":"2025-02-17T02:27:34.444922","id":563,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"valkey · PyPI","link":"https://pypi.org/project/valkey/","tags":"python","message":"python bindings for valkey, forked from redis.\n\none notable difference I see from redis is that you can install with libvalkey to autmatically get faster parsing support.\n\n> For faster performance, install valkey with libvalkey support, this provides a compiled response parser, and for most cases requires zero code changes. By default, if libvalkey >= 2.3.2 is available, valkey-py will attempt to use it for response parsing.\n\n``` bash\npip install \"valkey[libvalkey]\"\n```","published":true,"public":true,"date":"2025-02-17T02:22:12.139045","id":562,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Fragmentions - linking to any text","link":"https://www.kevinmarks.com/fragmentions.html#%22eventually%20every%20URL%20ends%20up%20as%20a%20porn%20site%22","tags":"indieweb","message":"I can't believe I've never see this Tim Berners-Lee quote, but I can't unsee it and will be required to reference it from now on.\n\n> eventually every URL ends up as a porn site\n\nI had a friend let his blog domain expire, within a short period it was scooped up and was hosting porn.  I don't know why, but my best guess is that they were holding it ransom with the most embarrassing content to have your personal site replaced with.","published":true,"public":true,"date":"2025-02-15T15:39:33.654398","id":561,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"hype cp | Hypermedia Copy & Paste","link":"https://hypecp.com/","tags":"webdev","message":"This is a super cool reference for htmx snippets.  I really like how he has a couple of errors on the page as examples with examples that fix these common errors.","published":true,"public":true,"date":"2025-02-15T15:31:52.277302","id":560,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Chris Coyier","link":"https://chriscoyier.net/2024/03/03/11148/","tags":"blog","message":"Interesting thoughts here on blog post titles, do we need them?  They are so ingrained into everything.\n\nIt makes me think about markata.dev.  I don't require you to add any meta data to your post, you don't need a title at all, but you do have to name a markdown file, and this does end up being your title if you don't set one.\n\n> Titles are a lot of pressure! I think there is a reason that the big text-based social networking sites (Mastodon, X, Facebook, Threads, LinkedIn, Bluesky, etc.) don’t have titles. Especially for short posts, the title just isn’t necessary. Just say the thing.\n\nInteresting observation what rss readers do without one.\n\n>My own favorite[rss reader], Feedbin, shows the author of the post as the title if it’s missing. Eh, not great not horrible.\n\nHilariously he puts a title on the OG image for the post.  I was interested in seeing what would happen in signal, it appears to be showing the author name as well.\n\n![image](https://dropper.wayl.one/api/file/ea78bda4-d2ea-41bd-9a60-27d9b09d4825.webp)\n\nConfirmed the page has no title \n\n![image](https://dropper.wayl.one/api/file/4a68af50-9880-4e1c-8fca-91313a154630.webp)\n\nor does it?\n\n![image](https://dropper.wayl.one/api/file/66a63ca2-c705-4460-8b8a-d1633fc42f21.webp)\n\nIt makes me wonder where Signal gets this title is it from the title block or the site_name meta data\n\n\n\n","published":true,"public":true,"date":"2025-02-14T19:40:19.062804","id":559,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"AI workloads on Talos Linux - Sidero Labs","link":"https://www.siderolabs.com/blog/ai-workloads-on-talos-linux/","tags":"k8s","message":"cool article for setting up talos linux with an nvidia gpu.  What a wild world it we are living in where these devices that started out being only for hardcore gamers are becoming commonplace in servers and slowly entering the homelab space.","published":true,"public":true,"date":"2025-02-14T19:27:54.667940","id":558,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(141) Proompted Kiddies Learning The Hard Way - YouTube","link":"https://www.youtube.com/watch?v=eNIBie_uYMI","tags":"ai, llm, dev, catalytic","message":"Damn prime makes an interesting point near then end of this video.  He's seen a bunch of people able to just throw down charts and shit at their company and end up being \"the coding guy\" cause they proompted something once.  In a way I can relate, I got into software in a similar way, but at a time that it took a lot more hard work, understanding , and copy past from the right stack overflow.   Based on some of the people around me at the time I can only imagine how some people must feel like they got pushed into it without wanting it, and now are building something they don't know anything about with no care about it or care to build any expertise.  Is the future proompted charts from enterprise chatgpt or do we only continue growing more need for software from here.\n\n\n![image](https://dropper.wayl.one/api/file/d43265cd-7fe1-4cb4-a22e-d82a37a2e368.webp)\n","published":true,"public":true,"date":"2025-02-14T19:15:41.134355","id":557,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Colors - Core concepts - Tailwind CSS","link":"https://tailwindcss.com/docs/colors","tags":"webdev","message":"Tailwind has the best color system, very well done.  Even if you don't use it, it serves as a great color picker.","published":true,"public":true,"date":"2025-02-09T21:32:57.305614","id":556,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Don't Starve Together Forever world","link":"https://wyattbubbylee.com/dst-forever-world/","tags":"gaming","message":"So proud of Wyatt for writing in his own blog!","published":true,"public":true,"date":"2025-02-09T21:31:38.752830","id":555,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(131) Developer Productivity, v2 with ThePrimeagen | Preview - YouTube","link":"https://www.youtube.com/watch?v=03KsS09YS4E","tags":"dev","message":"Big fan of Primes setup.  I was not far off of his setup before he really came on the scene, but I've picked up a ton of nuggets from him and how he operates.  I took his first developer productivity course on Front End Masters as it came out.  \n\nIt is interesting to see him roll back his ansible scripts for bash scripts here.  I converted my setup to ansible after watching his first, but have also since rolled back to bash scripts for quite similar reasons.  Ansible is great for remote tasks that need to be done on a fleet of machines, but like he says here overkill for this purpose and ends up something that you need to read the docs for every change to your dotfiles.\n\nUnlike prime I've really leaned harder on installing everything in a docker image and developing out of a docker image.  I've long built docker images of my dotfiles with the idea that its nice to be able to just use them on other machines, but it rarely happened.  \n\nIn the past year I've moved bazzite, an immutable distro.  It comes with podman and distrobox, so I install very little on it, a few flatpaks from the store for brave and signal, but most of what I really use day to day comes from my devtainer.  It's nice that I really have one install target for all of my scripts so they become quite stable.  I don't need to worry about arch vs ubuntu vs fedora, no matter where I am its the same base image.\n\nI've also really started to lean on kubernetes, it is so useful to just be able to start a pod in k8s using the same exact develop setup as I would have locally.  Nothing needs installed, I can just bring my dev setup to the cluster where the network and data I might need to debug is.\n\n","published":true,"public":true,"date":"2025-02-08T15:29:52.849510","id":554,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Jhey ʕ·ᴥ·　ʔ: \"breakin' down classics CSS background-image + background-blend-mode + custom properties = holo-like effects with parallax ✨\" — Bluesky","link":"https://bsky.app/profile/jhey.dev/post/3lgoev36hps2h","tags":"webdev","message":"Jhey has the coolest webdev demos!","published":true,"public":true,"date":"2025-02-07T01:59:07.772776","id":553,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Fix VERSION_OR_CIPHER_MISMATCH · Cloudflare SSL/TLS docs","link":"https://developers.cloudflare.com/ssl/troubleshooting/version-cipher-mismatch/","tags":"","message":"Today I learned that cloudflare free tier  universal certs do not support multilevel subdomains.\n\n\n> By default, Cloudflare Universal SSL certificates only cover your apex domain and one level of subdomain.\n\n![image](https://dropper.wayl.one/api/file/7d1fe806-a3d0-47e3-8eb1-08c1a0965728.webp)","published":true,"public":true,"date":"2025-02-05T20:43:52.373140","id":552,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Migration guide for config loaders — kedro 0.19.11 documentation","link":"https://docs.kedro.org/en/stable/configuration/config_loader_migration.html","tags":"kedro","message":"Migrating from kedro 0.18.4 to the latest version involves handling the deprecated OmegaConf loader.  Switching over does not look as bad as I originally thought.\n\n\n1. installing kedro 0.18.5+\n2. set the CONFIG_LOADER_CLASS in settings.py\n3. swap out import statements\n4. config must be yaml or json\n5. getting values from config must be done with bracket `__getattr__` style not with `.get`\n6. any Exceptions caught from Templated config loader will need to be swapped to OmegaConfig exceptions, similar to #3\n7. templated values must lead with an `_`\n8. Globals are handled different\n9. OmegaConfig does not support jinja2 sytax, but rather a `${variable}` syntax","published":true,"public":true,"date":"2025-02-05T18:16:44.972540","id":551,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Search: 5 results found for \"box white\" – Kailh switch","link":"https://www.kailh.net/search?q=box+white&_pos=2&_psq=white&_ss=e&_v=1.0","tags":"keyboard","message":"Prime mentioned on stream that Whites were his favorite switch.  I tend to like lighter switches and want to give it a try.  I really like my Durock lupine's at 55g, the box whites are 45g, that feels like it would take quite a bit more control, floating over the keys.","published":true,"public":true,"date":"2025-02-03T15:24:40.586612","id":550,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A Cinematic Aspect Ratio Guide for Every Filmmaker | No Film School","link":"https://nofilmschool.com/cinematic-aspect-ratio","tags":"","message":"A good reference of common screen ratios.  I just realized that 16:9 is also 1.78:1.  I've been putting some images on my blog again, and thinking about using some 2.39:1 ratio on them.","published":true,"public":true,"date":"2025-02-01T20:33:01.866284","id":549,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(124) I Think I Love Deepseek R1 - YouTube","link":"https://www.youtube.com/watch?v=GNHuJE_GARc","tags":"llm","message":"There is a glimmer of hope out there that normal people can scrap together enough gpu to really run the latest models themselves.  The ui really appears to be having huge leaps forward such that doing things like rag is no longer such a research project that it was just a few years ago.  So excited to see Prime go through this homelab exercise.","published":true,"public":true,"date":"2025-02-01T16:29:43.093320","id":548,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(124) RSS is dead - YouTube","link":"https://www.youtube.com/shorts/epQr2kF-1bU","tags":"rss","message":"Oh, this kills me to hear it.  RSS is the OG way to subscribe and share content out to others.  It gives you control of what you subscribe to and reminds you when new content lands on your favorite sites.  It is a huge component of web 1.0 and I feel is the most decentralized social media can ever hope to be.","published":true,"public":true,"date":"2025-02-01T02:57:59.773911","id":547,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Behold, the Steam Brick | Rock Paper Shotgun","link":"https://www.rockpapershotgun.com/behold-the-steam-brick","tags":"steamdeck, pc, gaming","message":"I fully believe in our right to repair, ewaste reduction, and bringing a second life to still good hardware that is not up for it's originally intended purpose.  This is a sick console like experience you can strap to the back of a tv, throw in your back to take on a trip, or leave stuffed in your vehicle to game in the backseat.  Sucks that it cant do 4k, but I've used mine on large screens, and it does quite well for a lot of games, maybe not AAA, but the cartoony multplayer games I play with my kids do quite well.\n\n![image](https://dropper.wayl.one/api/file/f3114f19-21cd-4ee6-84a8-06b83346d052.webp)","published":true,"public":true,"date":"2025-01-31T13:27:21.827590","id":546,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(123) OpenAI Is Actually Terrible - YouTube","link":"https://www.youtube.com/watch?v=2D9ON1ZQhnA&t=359s","tags":"llm","message":"Damn these deepseek memes go hard. Wild to see openai get played by their own game.\n\nIt's crazy that the normie news that I have seen on deepseek shows that the Chinese made what the Americans did at a fraction of the price, without taking notice that they are building on the shoulders of openai.","published":true,"public":true,"date":"2025-01-31T03:46:29.950823","id":545,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(123) AI Is Making You An Illiterate Programmer - YouTube","link":"https://www.youtube.com/watch?v=cQNyYx2fZXw","tags":"llm","message":"👏👏👏 This one is really good. I'm right there with him on most of this.  I am very hesitant on subscription models, and all the ai tools feel like they are getting ready to be the next round of death by a thousand cuts, this time with pretty limited free tier and relatively high prices to run.  I'm sure we will see companies get taken by huge bills soon by building off of someone else's service.\n\nOn the flip side I'm definitely the guy that gets in a rut of just copy paste to the ai, wait for codeium to to inject.  I feel like I have issues of momentum more than anything.  When I'm on one side or the other I tend to stick it out for too long, but less so on going without because that llm drug is calling you when you hit a hard problem.\n\nI'm excited to see him build out a homelab for llm stuff that he mentioned at the top.  I'm interested, but probably not building one out for myself until we start to see some cheaper maybe used hardware to do it.","published":true,"public":true,"date":"2025-01-30T14:23:10.384094","id":544,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(122) Why is Kubernetes everywhere? | Kelsey Hightower - YouTube","link":"https://www.youtube.com/watch?v=MQbkN99eBD8","tags":"kubernetes","message":"Kelsey says several times in this interview, you don't need kubernetes.  If you are running one node you don't need kubernetes.  My question though is, would you use kubernetes?  Ya I get it if you are a web developer, data scientist, backend dev, but if you are looking to bee a whole ass engineer, or infrastructure engineer, you know kubernetes, Should you use kubernetes on single node?","published":true,"public":true,"date":"2025-01-29T16:28:21.149864","id":543,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Models - Pydantic","link":"https://docs.pydantic.dev/latest/concepts/models/#rebuilding-model-schema","tags":"python, pydantic","message":"I came accross from_attributes today it allows creation of pydantic models from objects such as a sqlalchemy  `Base` Model or while nesting pydantic models.  I believe in the past I have ran into some inconsistencies with nesting pydantic models and I'll bet one had from_attributes set and another did not.\n\n> Arbitrary class instances¶\n> _(Formerly known as \"ORM Mode\"/from_orm)._\n> \n> Pydantic models can also be created from arbitrary class instances by reading the instance > attributes corresponding to the model field names. One common application of this functionality is integration with object-relational mappings (ORMs).\n> \n> To do this, set the from_attributes config value to True (see the documentation on Configuration for more details).\n>\n> The example here uses SQLAlchemy, but the same approach should work for any ORM.","published":true,"public":true,"date":"2025-01-28T17:27:20.504329","id":542,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(120) If Mitchell Hashimoto succeeds, Tmux & Zellij will disappear - YouTube","link":"https://www.youtube.com/watch?v=o-qtso47ECk","tags":"","message":"Dang strong stance that tmux and zellij should not exist.  I really do get his point though.  Theres a good number of terminal features I often miss out on because I run tmux.  Its an app that runs apps, and doesn't let all of the signals back to the host.  But its fantastic at what it does, and brings so much to the table that the little bit of downside it brings is well worth it to me.  The other thing missing in this discussion is that I can take my hotkeys and session workflow to any machine just by running tmux.  I do not need to run a certain terminal, or install it headlessly on a server to get special features just for it.","published":true,"public":true,"date":"2025-01-28T13:18:40.359432","id":541,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Top Python libraries of 2024 | Tryolabs","link":"https://tryolabs.com/blog/top-python-libraries-2024","tags":"python","message":" Really good listicle of new modern top python libraries from 2024.  Very well done article with images, links, and an actually quality listicle with many things I've never even heard of.","published":true,"public":true,"date":"2025-01-23T00:31:18.863523","id":540,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Choosing color palettes — seaborn 0.13.2 documentation","link":"https://seaborn.pydata.org/tutorial/color_palettes.html","tags":"python, data-viz, seaborn","message":"Good overview of seaborn color palettes.  They have all sorts of different types, some designed to purposfully give each color the same weight for catecorization.  Some designd to give linear differences in value, some have a parabolic feel with a diverging nature.","published":true,"public":true,"date":"2025-01-22T13:47:54.034254","id":539,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"poolers.postgresql.cnpg.io CRD metadata.annotations Too long · Issue #325 · cloudnative-pg/charts","link":"https://github.com/cloudnative-pg/charts/issues/325","tags":"k8s, argo","message":"I've never seen or needed to use a serversideapply in kubernetes before, but I ran into this same issue in my k3s homelab while installing cloudnative-pg.\n\n\nYou can do it with argo\n\n``` yaml\napiVersion: argoproj.io/v1alpha1\nkind: Application\nspec:\nsyncPolicy:\nsyncOptions:\n- ServerSideApply=true\n```\n\nand you can do it with kubectl\n\n``` bash\nkubectl apply --server-side --force-conflicts -f cnpg-1.25.0.yaml\n```","published":true,"public":true,"date":"2025-01-21T17:06:21.670740","id":538,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher","link":"https://www.nerdfonts.com/cheat-sheet","tags":"icons, font, nerdfont","message":"Nerdfont cheatsheet is a fantastic way to copy paste icons into your shell.  I just used it to juice up my starship prompt with my current `$NVIM_APPNAME` managed by [[ nvim-manager ]]\n\n![image](https://dropper.wayl.one/api/file/3635351b-c006-4cff-8011-85c3b14bfc8f.webp)","published":true,"public":true,"date":"2025-01-21T01:04:01.095197","id":537,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Manufacturer Recertified Drives | Enterprise Grade — ServerPartDeals.com","link":"https://serverpartdeals.com/collections/manufacturer-recertified-drives","tags":"homelab","message":"For my next drive upgrade in my homelab I am gong to be using one of these factory recertified drives from serverpartdeals.com.  Found them on an LTT video awhile back.  They are some lightly used and recertified, fully burnt in drives.\n\n> Shop for drives that are certified once again by the manufacturer to work like new. Factory ReCertified drives are cost-effective alternatives compared to factory-sealed new counter parts. Additionally, unlike in mass production, the re-certification process involves closer attention to the overall operation of the hardware so that the re-certification will not have to happen a 2nd time","published":true,"public":true,"date":"2025-01-19T19:11:47.949706","id":536,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Releases · bootandy/dust","link":"https://github.com/bootandy/dust?tab=readme-ov-file","tags":"linux, cli","message":"dust is one of my favorite rust rewrite tools.  Its so useful for narrowing down file system bloat and cleaning up some disk space on your nearly full disks.  It runs right in your terminal and gives you a nice bar graph on the top directories in use.\n\n\n![image](https://dropper.wayl.one/api/file/31b206fd-d508-451e-ba96-860c5d8110d1.webp)","published":true,"public":true,"date":"2025-01-19T18:58:42.954767","id":535,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Keycloak","link":"https://www.keycloak.org/","tags":"k8s, auth","message":"Keycloak looks like an interesting way to setup sso.  It's part of the cncf so it's got a good backing.  I want something better for argo workflows and this might be it.  I'm curious what else I can tie into it.","published":true,"public":true,"date":"2025-01-19T05:34:32.968498","id":534,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Worst Thing You Can Do For Your Career - YouTube","link":"https://www.youtube.com/watch?v=CVG6f1N0VT8","tags":"ai, llm, dev, catalytic","message":"Don't stop learning!  Stop trying because you have a doomer outlook on ai, llms, industry and think they are taking over.  If you have no hope for the future, if you stop now you are cementing in that you will be no good and the ai will be better.  Many, maybe most of us in this industry go here by hard work, long nights of learning, trying to solve problems that our job had.  If llms  take over then the world is going to be a whole lot different, it will be a world you cannot predict or plan for.  For now put your head down and succeed in the world we have today.\n\nTEEJ has some great thoughts on this whole sentiment, put this on for you morning walk or whatever you do.","published":true,"public":true,"date":"2025-01-17T14:54:14.701883","id":533,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(110) The Future of HTMX - YouTube","link":"https://www.youtube.com/watch?v=0rtpsJSLb44&t=624s","tags":"webdev","message":"I like the charts that Theo brings to to these videos.  Shout out for a positive k8s reference and not shitting on it.\n\n![image](https://dropper.wayl.one/api/file/6b2d4ec0-98f2-4e58-8ab4-936b7356e7f4.webp)\n\nHtmx brings html/css just a bit further down the complexity graph with little to no extra effort, while react allows us to go all the way full complexity at the cost of build and dev complexity to go from zero to 100 as soon as its introduced.\n\n![image](https://dropper.wayl.one/api/file/71ac480a-4e45-4777-87eb-a9d2d8775cca.webp)\n\nhtmx brings us back to the ease of jquery ajax without any complex swapping or json parsing, all of the object parsing and html templating is done in the backend, the front end just tracks where to put it.  HTMX couples the frontend and backend much tigher, since all of the front end html is generated in the backend, done correctly it is not possible for the front end to get out of sync and try to do things that the back end does not know how to handle, vice versa.\n\n![image](https://dropper.wayl.one/api/file/aa09051d-7e36-43a3-b6da-a6257cad1cc9.webp)","published":true,"public":true,"date":"2025-01-13T02:45:27.034768","id":532,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Why I Write","link":"https://brittanyellich.com/why-i-write/","tags":"blog","message":"It's interesting how many people in tech maintain a blog.  I think part of this brings us back to web 1.0 days when so many individual websites owned the web it was a free for all unindexed land and you got to own a small piece of it.\n\nI agree with most of Brittany's points here I write a lot to keep my skills sharp, and to refer back to.  Brittany mentions keeping all her old posts, even the cringy ones.  I'm all with you here, I'm just wodering how you look back at anything you wrote in the past and not get a bit of that feel, maybe its just me, but I see cringe and mistakes gallore, but it all makes me better moving forward.","published":true,"public":true,"date":"2025-01-13T02:28:21.290844","id":531,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Availability","link":"https://brittanyellich.com/note/availability/","tags":"dev","message":"nice overview of availability measurements and what they really mean.  The crazy world we live in today depends on so many things runnig, its also so hard to measure your uptime, The uptime metrics can mean a lot of different things.  The site is up and accepting traffic, but can users make changes or submit orders, there is a lot more to it than just up or down.  I really appreciate Brittany's story from Nike nested in there.","published":true,"public":true,"date":"2025-01-13T02:20:16.148572","id":530,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"SuperMini nRF52840 Wireless Controller Development Board - kriscables","link":"https://kriscables.com/supermini-nrf52840/","tags":"keyboard, microcontroller","message":"The SuperMini nrf52840 is a sick controller for building keyboards, affordable, easy to get, and compact.  Bluetooth and wired setup just works in zmk.  This page has a nice image of the pinout.","published":true,"public":true,"date":"2025-01-13T01:51:24.501037","id":529,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Quick Start - kotaemon Docs","link":"https://cinnamon.github.io/kotaemon/","tags":"llm, ai, rag","message":"interesting UI for RAG based workflows, i.e. chatting with your documents.  It looks like it can run a number of models, feels like ollama with RAG and a nice web ui.","published":true,"public":true,"date":"2025-01-11T16:34:26.937233","id":527,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Bluesky is more like Twitter than X is","link":"https://joelhooks.com/bluesky","tags":"social","message":"Bluesky is almost excatly like twitter was when I joined years ago.  It's gone crazy lately bogged deep in politics, bots, and ads.  I've seen like two scroll pages of ads in a row, its nuts.  What I did not know before Joel pointed out here is that the feed I am looking at is my following feed, its only feed of people I follow in descending order.  On bluesky you get to pick your feed!!!  This feels like tweetdeck did back when we were able to run that.  You could tune in search terms and save them it was glorious.  Bluesky has some really interesting ones that you can use like popular with friends, only posts, my bangers, that have a pre defined algorithms.","published":true,"public":true,"date":"2025-01-11T02:17:50.226657","id":526,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(107) Why You Should Game on Linux (feat. GloriousEggroll of Nobara) - YouTube","link":"https://www.youtube.com/watch?v=QwpTAk_IiyU&t=28s","tags":"linux, gaming","message":"This man is responsible for making gaming on linux what it is today.  Such a heartfelt story to hear that reviving his dad's machine was at the core of what drove him to do what he has done for the wider gaming on linux community.  Update on your schedule, remove all the tracking and bloatware, this is what drove him to start using linux before making it accessible for his Dad.\n\n> But really do update, this is not your 2002 PHP box, things need updated and regular updates help the process.","published":true,"public":true,"date":"2025-01-11T01:38:57.183978","id":524,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"V2 suddenly getting client-not-enrolled today - X API - X Developers","link":"https://devcommunity.x.com/t/v2-suddenly-getting-client-not-enrolled-today/195456","tags":"twitter, x, dev","message":"Just tried using my twitter api key for the first time in quite awhile.  Apps now need to be tied to projects in order to work.  It looks like projects are where pricing comes into play.  Thankfully they still give a free tier for doing small time things for myself.  You can really see the effect that llms have on these things though as it is 5x more expensive to read posts than to make posts currently.  Data is the new gold for these kind of companies.","published":true,"public":true,"date":"2025-01-10T02:56:15.517723","id":523,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"containers/podman-compose: a script to run docker-compose.yml using podman","link":"https://github.com/containers/podman-compose","tags":"","message":"Wild that the podman-compose github readme calls out k3s as an alternative.\n\n![image](https://dropper.wayl.one/api/file/9326cd6f-3f27-4703-85fd-a3b16f7bdc92.webp)\n\ncompose definitely has its place, especially for local development on a developers machine, its so much easier to stand up and get things like hot reload up and running smooth.","published":true,"public":true,"date":"2025-01-09T14:57:06.533920","id":522,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"bic | Static blog generator, in bash","link":"https://bic.sh/","tags":"blog, markdown, bash","message":"Intereresting someone built a blog generator in bash.  it comes with normal markdown to html, static content, robots.txt, sitemap, rss, and tags.  It uses pandoc to take markdown to html and mustache for page templates.","published":true,"public":true,"date":"2025-01-09T14:22:47.767375","id":521,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Animate to height: auto; (and other intrinsic sizing keywords) in CSS  |  CSS and UI  |  Chrome for Developers","link":"https://developer.chrome.com/docs/css-ui/animate-to-height-auto/","tags":"css, webdev","message":"Css is getting so good, new things like interpolate-size are making things that use to require some deep expertise and hacks intuitive and easy.\n\n``` css\n/* Opt-in the whole page to interpolate sizes to/from keywords */\n:root {\n    interpolate-size: allow-keywords; /* 👈 */\n}\n```","published":true,"public":true,"date":"2025-01-09T14:20:25.436400","id":520,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"awesome-cursorrules/rules/py-fast-api/.cursorrules at main · PatrickJS/awesome-cursorrules","link":"https://github.com/PatrickJS/awesome-cursorrules/blob/main/rules/py-fast-api/.cursorrules","tags":"llm, ai, agentic","message":"Looks like a great start to a rules file for fastapi.\n\n> - Place the happy path last in the function for improved readability.\n\nI have never heard anyone say this.  It feels weird to me.  The other early return, find and handle errors early all make sense to me, but happy path last is new to me.\n\n","published":true,"public":true,"date":"2025-01-09T14:03:12.446090","id":519,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Generate Custom .cursorrules for Your Project Based on Community Examples | egghead.io","link":"https://egghead.io/generate-custom-cursorrules-for-your-project-based-on-community-examples~eimq2","tags":"llm, ai, agentic","message":"Really interesting way to generate a rules file for agentic workflows based on your current repo.  John uses gitingest here, looks like a fantastic tool, but probably not useful for most private repos.  I'm sure you can replicate the same thing in a private repo wtih a small amount of effort the few times you need to do it.  gitingest looks like a great way to pull in some extra context for some open source dependencies that you have though.","published":true,"public":true,"date":"2025-01-09T13:53:40.969571","id":518,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"cyclotruc/gitingest: Replace 'hub' with 'ingest' in any github url to get a prompt-friendly extract of a codebase","link":"https://github.com/cyclotruc/gitingest","tags":"ai, llm, python","message":"Gitingest has a python package on pypi that you can run with uvx, and it accepts the same arguments as the web version, right in your terminal\n\n\n``` bash\n⬢ [devtainer] ❯ uvx gitingest --help\nUsage: gitingest [OPTIONS] SOURCE\n\n  Analyze a directory and create a text dump of its contents.\n\nOptions:\n  -o, --output TEXT           Output file path (default: <repo_name>.txt in\n                              current directory)\n  -s, --max-size INTEGER      Maximum file size to process in bytes\n  -e, --exclude-pattern TEXT  Patterns to exclude\n  -i, --include-pattern TEXT  Patterns to include\n  --help                      Show this message and exit.\n```","published":true,"public":true,"date":"2025-01-09T13:46:33.829440","id":517,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Gitingest","link":"https://gitingest.com/","tags":"ai, llm","message":"Replace **hub** with **ingest** in any **github** and get a prompt friendly codebase ready to feed into any llm.  It combines the entire codebase, based on a gitignore style glob that you pass in, into a single TXT file.","published":true,"public":true,"date":"2025-01-09T13:40:41.832259","id":516,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"olimorris/codecompanion.nvim: ✨ AI-powered coding, seamlessly in Neovim","link":"https://github.com/olimorris/codecompanion.nvim","tags":"nvim","message":"Definitely need to give codecompanion.nvim a try, it looks like a competitor to windsurf but in nvim.  It looks so feature complete that its hard to grasp all of what it does.","published":true,"public":true,"date":"2025-01-09T02:18:50.872138","id":515,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(106) Cracking the Code | Open Sauce 2024 - YouTube","link":"https://www.youtube.com/watch?v=9vSiP_ftyuQ","tags":"dev","message":"Great panel of software folks at open sauce.  It was interesting hearing from all these creators from the perspective of an open sauce panel.","published":true,"public":true,"date":"2025-01-08T21:08:08.965065","id":514,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"WaylonWalker/nvim-manager: manage dotfiles with nvim_appname","link":"https://github.com/WaylonWalker/nvim-manager/releases/tag/v0.0.2","tags":"nvim","message":"New release out for nvim-manager that supports installing pre-configured distros.  It's such a breeze to install these now, its been fun to go through each of them.  The currently included distros are.\n\n* LazyVim\n* AstroVim\n* kickstart\n* NvChad\n* LunarVim\n","published":true,"public":true,"date":"2025-01-08T17:11:34.782972","id":513,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Releases · WaylonWalker/nvim-manager","link":"https://github.com/WaylonWalker/nvim-manager/releases","tags":"nvim","message":"First release of `nvim-manager` is out. Your dotfiles change a lot, sometimes it's hard to manage all of the places you have installed them and potentially made hand edits to. nvim-manager allows you to easily make static releases of your dotfiles, and keep your nvim install from breaking by leveraging NVIM_APPNAME and pinned releases of your dotfiles stored in ~/.config. In this directory you might have many nvim configurations installed, nvim-manager automates the process of installing and updating from your dotfiles, while keeping previous pinned versions untouched.","published":true,"public":true,"date":"2025-01-08T03:09:30.461017","id":512,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"URL escape codes","link":"https://docs.microfocus.com/OMi/10.62/Content/OMi/ExtGuide/ExtApps/URL_encoding.htm","tags":"","message":"Nice list of url escape codes.  I did not actually know that to get a literal sequence like %2D you can use $2D.","published":true,"public":true,"date":"2025-01-07T02:03:16.219201","id":511,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"GitHub - ngalaiko/tree-sitter-go-template: Golang template grammar for tree-sitter","link":"https://github.com/ngalaiko/tree-sitter-go-template","tags":"k8s, kubernetes, helm, nvim","message":"This setup fixed my nvim syntax highlighting in helm templates.","published":true,"public":true,"date":"2025-01-06T18:49:13.690114","id":510,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"imagegenius/docker-immich: Monolithic (Single) Docker Container for Immich","link":"https://github.com/imagegenius/docker-immich/","tags":"homelab, self-host","message":"imagegenius has made an immich all in one setup that looks much easier to use than immich.","published":true,"public":true,"date":"2025-01-06T14:44:08.383773","id":509,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Owning It · Matthias Ott","link":"https://matthiasott.com/notes/owning-it","tags":"webdev","message":"I can say I had the same kind of feelings when I first saw something called \"Own Your Web\" being run in Buttondown.  I totally get it.  It takes time and effort to build your own stuff, email sending is hard, not done right ends you in the spam folder.  There is something about the name though that I think needs to set an example and self host as much as it possibly can.  \n\nThe changelog has covered this several times, do they need to go to the crazy lengths they do to run their site, no probably not, but it keeps them in the loop.  They are using the tech they talk about in a very real and production critical way to run the show.\n\nCant wait to see more from ownyourweb.site","published":true,"public":true,"date":"2025-01-06T13:23:23.457888","id":508,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The weirdest controller I've ever used","link":"https://www.youtube.com/watch?v=OrucAJknMys","tags":"game","message":"Gyroscope better than a mouse??  Nerd nest really sells how having two gyros in the way they have done for noise cancelling changes the game on it, and makes it a contender to replace a mouse.\n\nIt really makes me want to try it.  I love how repairable this controller looks.  I've got to imagine that the fact that it comes as a kit, and all the parts are available that this hits S tier repairability.  My current controller of choice is a PS5 and I've had stick issues I wish I could fix.\n\nNo analog triggers, I'm out.  Maybe they will make it an option in the future idk.  I don't play shooters where I need a hair trigger, this won't work on session or driving games.\n\nmicro usb, seriously, that kinda kills it for me too.  \n\n**edit** I looked on their website and they have usb c in the latest version","published":true,"public":true,"date":"2025-01-04T17:07:40.868211","id":507,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Postiz: The All-in-One Social Media Management Tool","link":"https://postiz.com/","tags":"social, marketing","message":"postiz looks like a very polished way to automate and schedule posts to all the social services.","published":true,"public":true,"date":"2025-01-04T15:39:27.962825","id":506,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"gitroomhq/postiz-helmchart: Helm for Postiz","link":"https://github.com/gitroomhq/postiz-helmchart","tags":"homelab","message":"Reminder to myself, look into self hosting postiz with this helm chart later.","published":true,"public":true,"date":"2025-01-04T15:36:10.794008","id":505,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Realign – Chris Coyier","link":"https://chriscoyier.net/2025/01/03/realign/","tags":"webdev, blog","message":"Chris Coyier had a small re-align on his site, some good nuggets in here.\n\n> I like the idea of having a photo of myself prominently on the site, so you know who you’re dealing with here.\n\nI really like this after thinking about it and I think I am going to make sure I get my face back on my posts.  I do have my 8bit style pixel art image of me that I use on social media, but no real picture.\n\n>  I feel like a lot of people redesign their entire website when it’s time to update to the latest list of social networks and I’m no different. Once you touch it you gotta keep going.\n\nI can totally relate to this, once you open the thing, you get the build tools greased up, and your confidence high that re-deploying isn't going to mess something up, I tend to start digging in to other things.\n\n","published":true,"public":true,"date":"2025-01-04T14:25:02.635575","id":503,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"About Me – Harry Roberts – Web Performance Consultant","link":"https://csswizardry.com/about/#section:colophon","tags":"webdev","message":"I've only recently learned what colophon means, and I really like to read through site that use it.  If you don't know its about how the site is built.  I've always liked peeking under the hood of things to understand how they work, it's what turned me towards an engineering degree.\n\nI love how he mentions that he chose the name when he was 17 and he is stuck with it.  I particularly like the name, it has something special to it.  Hats off to you for doing something that has lasted so long for you.  I fully understand though, I have projects that I made a year ago that I think why did I name it that.  At the same time when I try to think of a name I end up with the I don't have anything good and I'd rather build the thing so fuck it, its going to be what it is.","published":true,"public":true,"date":"2025-01-04T04:14:00.115266","id":502,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Using Obsidian as a Gaming Backlog Library","link":"https://bryanhogan.com/blog/obsidian-gaming-backlog","tags":"gaming","message":"Very interesting way to catalog games, I need to make a catalog of mine, I'll probably start adding some blog entries for games I'm in and have completed.  Wonder if there is a way to hook into steam with python to get achievements and progress live.","published":true,"public":true,"date":"2025-01-03T22:59:05.980037","id":501,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Harry Roberts: \"📡 I’ve been writing a lot lately. I’ve also dusted off my RSS reader. Send me your feeds! Mine is at csswizardry.com/feed.xml\" — Bluesky","link":"https://bsky.app/profile/csswizardry.com/post/3lckq4qo6zs22","tags":"rss","message":"Tons of cool people came out with their rss feeds here, again will need to browse more closely later.","published":true,"public":true,"date":"2025-01-03T22:56:44.040800","id":500,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"myRSS/personal-blogs.xml at master · sturobson/myRSS","link":"https://github.com/sturobson/myRSS/blob/master/personal-blogs.xml","tags":"rss","message":"Sturobson has a ton of rss feeds here, I recognize quite a few, will definitely need to poke at some of these later.","published":true,"public":true,"date":"2025-01-03T22:54:32.344288","id":499,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Own Your Web • Buttondown","link":"https://buttondown.com/ownyourweb","tags":"webdev","message":"I'm a sucker for good own your own shit on the web blogs, and Matthias Ott has a top notch one here.  The archive has been a great read so far, I've discovered things like slashpages.net.","published":true,"public":true,"date":"2025-01-03T16:43:26.075990","id":497,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Fork Around And Find Out | Remaining Authentic in Retirement with Kelsey Hightower","link":"https://share.transistor.fm/s/a9e41e15","tags":"catalytic","message":"What a great first guest for FAFO.  Kelsey is always such a great listen.  He talks about killedbygoogle and how engineers get no incentive to work on old projects, google had no incentive, and you got the thing for FREE in the first place.  He talks about end of career and having love you money, having so much in the bank you can say no.  If you are presented with a project that does not align with your values you can say no.M\n\nJustin even mentions how Google has more killedbygoogle projects than Amazon has total projects.\n\n\n> If we knew how hard it would be, we would never build it.\n\nAutumn's Fav quote from ep1 of shipit","published":true,"public":true,"date":"2025-01-03T16:39:51.296426","id":496,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Changelog • Robb Knight","link":"https://rknight.me/log/","tags":"blog","message":"Well done changelog with some really good inspirational nuggets.  Many slash pages I want to check out and an 11ty contribution graph.","published":true,"public":true,"date":"2025-01-02T18:16:10.865173","id":495,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"slash pages","link":"https://slashpages.net/","tags":"blog, webdev","message":"A nice list of slashpages you might want to consider including / aliasing / 301ing. These feel like nice things to setup and keep in the back pocket for obsidian style wiki link to easily.  I get kinda bad at wiki-linking as much as I would like to, mostly because it does require some amount of work to make the page, and keep it up to date over time, then remember that you even have it.\n\nSome are serious, some very common, some quite useful.\n\n![image](https://dropper.wayl.one/api/file/ba4edf27-03d4-49ff-ab4e-712e9ab8acda.webp)","published":true,"public":true,"date":"2025-01-02T16:17:51.050171","id":494,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(102) We need to have a talk... - YouTube","link":"https://www.youtube.com/watch?v=_VQl_HTk9PM&t=2607s","tags":"webdev","message":"Theo does a fantastic history of serverless here.\n\n## Kubernetes shit\n\nTheo can't have an infra video without shitting on k8s.  Specifically people who have never touched k8s pushing fear of k8s to large audiences of people who have never touched k8s.  If you are a webdev who solely lives in webdev space and never touches as much as a dockerfile listen to him.  If you touch infra at all try it before you take his opinion at face value.\n\n![image](https://dropper.wayl.one/api/file/a84ec689-e84f-458a-b1d6-fec85b310023.webp)\n\n## Serverless shines in high variance\n\nIf you plan on having traffic spikes 10x your regular traffic for something like black friday, serverless might be right for your use case.\n\n## stateless programming\n\nHe argues that targeting a stateless deployment of serverless leads to better code.  I'd like to see more examples here.  Maybe most of the code bases I work on already do this.  I've never targeted a serverless deployment, but I've targeted horizontally scaled deployments many times and they feel like they have the same targets.  For instance if I spin up 8 pods for my application or uvicorn with 3 workers I have to target statelessness, all of the state must live in the database and cannot live in memory.  Even if I target 1 instance in a containerized environment I have to be ready for restarts at any point in time.\n\nI might be missing something here, but I don't see how this point applies to serverless.\n\n## Scale to Zero Services\n\n![image](https://dropper.wayl.one/api/file/a06523f8-35e1-46cf-83b8-fd6be0831d93.webp)\n\nhttps://www.youtube.com/watch?v=_VQl_HTk9PM&t=2607s\n\nCompanies that can run on scale to zero can allow your shitty side projects that have no users run for free indefinitely because it costs them nothing.  He compares planetscale running mysql vs Turso running SQLite stored in s3.\n\n## Everything he covers is really cloud to cloud\n\nHe compares early deployments of LAMP and MEAN stack running on one server then jumps to serverless.  It feels like he is missing the angle of owning your own hardware.  This might just be the experience difference between theo and DHH.  DHH works on one focused company, Theo is jumping around between startups.\n\n## Ok I get some of it\n\nAt the end he covers a dumb side project that has branch deploys.  It had a 100s of deploy still running, some very old, some never even touched, vercel can do this because it costs them nothing if its not running.  What I didn't think about right away is that there is probably a backend component to this.  \n\nIn my python backends I often have deploy environments, but since they don't scale to zero they have at least some cost even if its small, with this I cannot just keep hundreds of them running because that cost would add up.\n\nI would argue that this is hardly useful, because you can checkout any old version and run it locally, and you rarely are going to need to poke through these old branch deploys.  But in that case that you need to quickly do this serverless is definitely superior.","published":true,"public":true,"date":"2025-01-02T03:04:14.928269","id":493,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"linkding | linkding","link":"https://linkding.link/","tags":"homelab","message":"linkding looks like an interesting alternative to thoughts.  Thoughts is focused on the note being a value add tweet length blog post that you share to the public.  This seems more focused on fire and forget with some note taking and search ability.  I should definitely level up the search and tag discovery in thoughts.","published":true,"public":true,"date":"2025-01-02T02:51:03.747176","id":492,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Wrapping your favorite CLI in neovim - YouTube","link":"https://www.youtube.com/watch?v=rerTvidyz-0&t=160s","tags":"nvim","message":"cool video on expanding vim with cli.\n\n\n## piping commands into vim\n\n![piping commands into vim](https://dropper.wayl.one/api/file/4283e98a-9b12-4f8a-9799-a097d5f3184d.webp)\n\n## write a healthcheck\n\n![write a healthcheck](https://dropper.wayl.one/api/file/d90a8c88-4748-4dfe-8569-b51c023c825b.webp)\n","published":true,"public":true,"date":"2024-12-31T21:02:44.705690","id":489,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Why Your Backend Shouldn't Serve Files - YouTube","link":"https://www.youtube.com/watch?v=aybSXT9ZJ8w","tags":"webdev","message":"Lane from boot.dev madde this fantastic video about serving files on the internet.  It has me wondering if I need to rethink a few of my things that I have built.  I have a few things I am serving media from, but I have very aggressive cloudflare cache rules on them, so each file should only be uploaded about once per year.\n\nMy problem going straight out of minio right now is how do i set headers for cache control on it.  If I can't set the cache control and everything is coming out of minio this does not solve my problems.\n\n---\n\nI went back and played with presigned urls and you can in fact control and set response headers, this is definitely the way and I have been wrong.","published":true,"public":true,"date":"2024-12-31T16:24:28.840889","id":488,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"curl with partial files | daniel.haxx.se","link":"https://daniel.haxx.se/blog/2024/12/30/curl-with-partial-files/","tags":"linux","message":"This is a cool new feature coming to bash, I can't think of a use case I have out of the gate, but it looks cool.  I'm thinking this might be good to keep in the back pocket for something like CI where I don't have a hightly tuned bashrc file, and I want a dynamic curl request based on some state that exists as a fille.","published":true,"public":true,"date":"2024-12-30T21:29:52.029248","id":487,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The beautiful sentence that is the web","link":"https://cassidoo.co/post/web-dev-sentence/","tags":"webdev","message":"Nicely worded Cassidy!  Javascript can be too much, it can bog down low powered devices, we can ship so much that its untenable on poor connections.  It can be argued that its a bad language and putting it on the server is a mistake, but it brings sites to life.  It makes it possible to extend the static nature of html/css with just a little special spice only your site needs.\n\nI'd add to the argument that a lot of js should go away over time.  Over time libraries such as jquery have fallen out of use, not because they are bad, or have been replaced by new libraries, but because the browser has adopted most of the functionality that jquery brought.\n\nAs a primarily python dev I'd really like to see htmx die a very similar graceful death.  There have been several iterations on this idea, and the crux of it is very similar, give the ability to use HTTP verbs right inside html with some instruction of when to apply them and what to apply them to.\n\nNo js should not go away, it never will, we will always find new patterns that the browser should take, sites will always need a small bit of spice to bring them to life.","published":true,"public":true,"date":"2024-12-30T21:25:08.286615","id":486,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Teleport to coop partner | Hypixel Forums","link":"https://hypixel.net/threads/teleport-to-coop-partner.2250505/","tags":"minecraft","message":"/p warp will warp your party to your current server in hypixel skyblock\n\n![image](https://dropper.wayl.one/api/file/a4f5be07-5f79-450c-a40d-1f48ac086e05.webp)","published":true,"public":true,"date":"2024-12-30T17:19:10.859855","id":485,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to configure base url for all requests using HTMX? - Stack Overflow","link":"https://stackoverflow.com/questions/69456875/how-to-configure-base-url-for-all-requests-using-htmx","tags":"webdev, htmx","message":"Today I learned how to configure the baseurl for htmx using the <base> tag.  This is pretty handy to be able to configure different baseurls.\n\n``` html\n  <base href=\"<scheme>://<netloc>/api/v1/\">\n  <button hx-post=\"clicked\"\n       hx-trigger=\"click\"\n       hx-target=\"#parent-div\"\n       hx-swap=\"outerHTML\">\n    Click Me!\n  </button>\n```","published":true,"public":true,"date":"2024-12-30T16:25:49.700982","id":484,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Addy Osmani: \"Tip: Chrome DevTools can override the content of Fetch/XHR requests! Useful for mocking APIs without waiting on backend changes.\" — Bluesky","link":"https://bsky.app/profile/addyosmani.bsky.social/post/3lei5jhkgdk2k","tags":"webdev","message":"WTF, you can just change a server response from devtools and update a vuejs app?  Just tried with htmx, and my GET requests are not showing up in the sources tab.  I'll keep this in my back pocket for next time I'm supporting a vuejs app though.","published":true,"public":true,"date":"2024-12-30T02:48:43.010283","id":482,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Gary Vaynerchuk: \"2025 : the year of action … who’s finally ready ? PS: text me for any follow up questions at 📱 1-212-931-5731 #2025 #todo #todolist #motivation #garyvee\" — Bluesky","link":"https://bsky.app/profile/garyvee.com/post/3leidcd6xjk2y","tags":"startup","message":"Gary Vee, is the goat.  leaving this image as a reminder for myself\n\n![image](https://dropper.wayl.one/api/file/074edddb-8b46-4d94-9b55-d70a7bb74366.webp)","published":true,"public":true,"date":"2024-12-30T02:45:02.475926","id":481,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ellie Huxtable: \"Atuin v18.4 is out now! Including `atuin wrapped`, your year in shell history 🐢 thanks @daveeddy.com for the suggestion!\" — Bluesky","link":"https://bsky.app/profile/ellie.wtf/post/3lecj36r5ps2x","tags":"cli","message":"Atuin v18.4 is out with an atuin wrapped command.\n\n\nHere's Ellie's Wrapped.\n\n![image](https://dropper.wayl.one/api/file/246f2dc6-4e46-410c-9d25-fa6ccc85f8f2.webp)\n\nThis is a pretty sick command, I've only been using Atuin about as long as I've been on bazzite, so maybe 4 months, but here is my wrapped.\n\n![image](https://dropper.wayl.one/api/file/434e1290-cf81-4ae5-abaf-34927006f3b6.webp)\n\nComparing to Ellie, I'm surprised that I even have 126 package related commands, being on an immutable distro most of my packages come from the container, I don't need to run packaging commands.  My cd is also super low, I use tmux sessions to take me where I need to be most of the time, which is a project's root directory, It's pretty rare to see me outside of a project root directory.\n\nI'd venture to guess that nvim would be higher if it didn't auto start on every tmux session as well.","published":true,"public":true,"date":"2024-12-28T06:29:12.945179","id":475,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(100) Hybrid Cloud Show – Episode 20 - YouTube","link":"https://www.youtube.com/watch?v=IXUtIXYjFDM","tags":"linux","message":"Red Hat has donated the whole open alternative to docker to the CNCF, the hosts weigh in with thier opinions all being pretty positive as they seem to be a legitimate donation and not dumping crap on open source.\n\n* podman\n* podman-desktop\n* buildah\n* compose-fs\n* podman\n* bootc\n* scopio\n\nPersonally I've been running podman exclusively at home since switching to Bazzite in August.  I'd like to use buildah in ci. I gave it a try, but was unable to swap out my use of kaniko for buildah, I will get there, but it was not quite as drop in as I wanted.","published":true,"public":true,"date":"2024-12-28T04:58:50.492318","id":474,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"are we cooked w/ o3? - YouTube","link":"https://www.youtube.com/watch?v=kjOxkPl3RGo","tags":"ai","message":"Holy shit these AGI models are incredibly expensive to run, require lots of wild hardware that there is not enough to go around, and requires shit tons of power to run.\n\nNow more than ever is time to distinguish yourself with deep expertise, jack of all trades is being eaten by ai.  People with deep expertise are getting a jack of all trades bump from ai, not o3, just the regular stuff.","published":true,"public":true,"date":"2024-12-27T16:09:32.343629","id":473,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Getting a Dev Job in 2025 - YouTube","link":"https://www.youtube.com/watch?v=2PiM2e4RtTg","tags":"catalytic","message":"Theo weighing in on the 2025 job market.  It's no 2018 out there right now, the ratio of jobs to engineers in the market has flipped big time.  Theo as usual really focuses on community, being in a community, and being a good citizen.  At the end of the video Theo weighs in on his experience hiring, and generally it starts with we need someone to do x does anyone know someone, then goes to a more formal internal post, then more formally asking internally does anyone know someone, then maybe to his community, and if he really still needs the person it _might_ become an external post.  These days there are so many good engineers on the market that very few good jobs actually get a posting for in his opinion.","published":true,"public":true,"date":"2024-12-27T02:53:55.842278","id":472,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"kitze 🚀 on X: \"holy fk I thought package.json was bad but TIL python stores dependencies in a .txt file 💀 https://t.co/0cczQkz2qt\" / X","link":"https://x.com/thekitze/status/1872267874842063223?t=zxq6-kA9atVuXJeWntxfWg&s=09","tags":"python","message":"kitze hating on  python packaging in new ways.  Python packaging has a lot of quirks that can make it infuriating.  Not once have I thought \"you know what this needs, quotes and braces\"\n\n![image](https://dropper.wayl.one/api/file/566ff44b-cace-474d-b1bc-62aaf42f419f.webp)","published":true,"public":true,"date":"2024-12-27T02:51:27.432751","id":471,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(98) Custom Gridfinity Bins For ANYTHING! - YouTube","link":"https://www.youtube.com/watch?v=_TtkaIe0ZKU&t=409s","tags":"3d-printing, stl","message":"This tip of using tinkercad to do boolean operations on an stl of a solid gridfinity bin and an outline is absolute fire 🔥🔥🔥.  This feels like a relatively simple operation, but to do it to a generated stl proves hard to do in most modeling software, at least harder than it needs to be.  Somehow tinkercad got it right and made it a very basic operation to do.\n\n![image](https://dropper.wayl.one/api/file/36826ac6-9e38-4955-b622-4de86900c8b7.webp)\n\nIt took me a minute to find the Merge button that Uncle Jessy mentioned, they call it a group in TinkerCAD.\n\n![image](https://dropper.wayl.one/api/file/a22fc486-d627-4e37-8d58-e963919bb8a0.webp)","published":true,"public":true,"date":"2024-12-26T19:02:29.840509","id":470,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(98) Ubuntu Summit 2024 | UMU - A unified tool for easily running your games outside of Steam - YouTube","link":"https://www.youtube.com/watch?v=iuBzGked-JU&t=559s","tags":"linux, gaming","message":"Damn Glorious Eggrolls is still making gaming on linux better.  Of course its containerization that drives everything on linux these days.  This is a pretty badass talk.  Umu is already running in steam and bazzite.  Bazzite gamemode uses this to get a gamescope session running.","published":true,"public":true,"date":"2024-12-26T16:47:13.258219","id":469,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(98) 4 Tips for Building a Production-Ready FastAPI Backend - YouTube","link":"https://www.youtube.com/watch?v=XlnmN4BfCxw","tags":"python, fastapi, webdev","message":"Great list of 4 tips for running fastapi applications.  \n\n## Keep routes small\n\nFat routers with all of the logic built in makes them hard to test, hard to refactor, causes lots of duplication, and makes it hard to reuse the business logic code later in something like a cli application.\n\n## Deploy Early\n\nI really like this advice!  He reccommends deploying as early as you can get a healthcheck live in your application.  I've found too many times developers build something that is really hard, or impossible to deploy, when if they had tried to deploy early they would have spotted some easy to fix issues.  This is less important if you are building out of a template that your team commonly deploys from, but very important with new patterns.\n\nhttps://youtu.be/XlnmN4BfCxw?si=ks1wvmgDyoQLgrv2&t=1093\n","published":true,"public":true,"date":"2024-12-26T02:42:17.152556","id":468,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Building Python tools with a one-shot prompt using uv run and Claude Projects","link":"https://simonwillison.net/2024/Dec/19/one-shot-python-tools/","tags":"python, uv","message":"This is really interesting, the lazy uv scripts are really becoming quite appealing, especially for something like this to just pop out of an llm ready to run.  The article features several examples of these one-shot prompt ideas that I suggest you give a try, and a prompt for creating them.","published":true,"public":true,"date":"2024-12-25T02:26:31.945203","id":467,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Status | Depot","link":"https://status.depot.dev/","tags":"containers, status","message":"Depot's uptime seems to be great.  I definitely hit some issues with it this afternoon 12/24/24 that were not reported.  I wonder if my issues were with the fly integration.  Maybe fly ran out of credits to depot or something.","published":true,"public":true,"date":"2024-12-25T02:22:53.307030","id":466,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Deploy to Fly using a Depot builder","link":"https://depot.dev/blog/how-to-build-with-depot-on-fly","tags":"containers, fly","message":"Here the integration to depot appears to be opt in using the `--depot` flag on `fly deploy`.  This must have changed over time though because today it was giving me issues and I had to opt out using `fly deploy --depot='false'`.  Looks like a great service and I just learned about them on their bad day.","published":true,"public":true,"date":"2024-12-25T02:20:08.374670","id":465,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Depot","link":"https://depot.dev/","tags":"containers","message":"Just learned about depot today ironically because it seems to be down and fly is using them under the hood to do the container builds, seems like a really great service for fast builds accross your team.","published":true,"public":true,"date":"2024-12-25T02:17:47.907921","id":464,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(91) Cursor + Windsurf Settings to 5x AI's Output Quality (Works with VS Code too) - YouTube","link":"https://www.youtube.com/watch?v=aG-utUqVrb0","tags":"dev, ai","message":"This was an eye opening video into agentic editing workflows.\n\n\n## setting rules\n\nDfferent ai tools use different rules files, windsurf uses .windsurfrules.\n\n![image](https://dropper.wayl.one/api/file/f75bf439-919f-4c19-8695-176ca8a7d52d.webp)\n\n## testing out rules\n\nTest out your rules file by having it say something at the beginning of the output to verify that the rules are being applied correctly.\n\n![image](https://dropper.wayl.one/api/file/ebeed79c-435b-4aab-b3dc-c744b144c438.webp)\n\n## First line\n\nHe suggests to use this key rule for debugging purposes, otherwise you are guessing to what rules if any it is following.\n\n``` txt\nEvery time you choose to apply a rule(s), explicitly state the rule(s) in the output.  You can abbreviate the rule description to a single word or phrase.\n```","published":true,"public":true,"date":"2024-12-24T21:28:08.516214","id":463,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Dedicated Servers | Intel Servers | AMD Servers - Dedicated Hosting","link":"https://www.reliablesite.net/dedicated-servers/","tags":"linux, server","message":"Dax talked about this in a recent How about tomorrow podcast https://thoughts.waylonwalker.com/post/461.  He is using it as his dev machine, he just ssh's in and devs on it.  Feels like quite an interesting workflow, their prices seem competitive, but as a cheap ass homelabber I see their prices and think I could grab a used optiplex for the cost of a month or two of these and probably wouldn't know the difference.  DAX mentions longer compile times so maybe he does notice.","published":true,"public":true,"date":"2024-12-24T20:29:13.145617","id":462,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(98) Talking with Typecraft - YouTube","link":"https://www.youtube.com/watch?v=qEykeKfAnJQ&t=1068s","tags":"dev, linux","message":"This is a pretty great episode talking shop with typecraft.  They talk setups, cameras, content creation. I found them talking about their linux setups particularly interesting.  Dax talked about his flow from building his own machines to using reliablesite.com.\n\n## tmux default leader\n\nDax hates on c-a, both typecraft and dax use c-s, which normally freezes a terminal, we can all agree that is useless.  I use the default c-b, it seems fine for me.\n\n\n## type crafts setup\n\n* Ubuntu \n* Ghosty\n* Tmux\n* Nvim\n* Ruby\n\n## Selling coffee without a web front end\n\nDax talks about terminal.shop and how they originally planned to have a web front end, but after they had so much success they stuck with it.  now they are leaning harder into it and are building out integrations with a bunch of languages and an api, but no front end.","published":true,"public":true,"date":"2024-12-24T20:24:42.877750","id":461,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"PEP 723 – Inline script metadata | peps.python.org","link":"https://peps.python.org/pep-0723/","tags":"python","message":"PEP 723 is what is inspiring all of these lazy self installing python scripts, Authored by the author of hatch and pyapp.  This is a really cool thing that uv has picked up and made python packaging just a bit easier.. maybe... dependency resolution still sucks.","published":true,"public":true,"date":"2024-12-24T15:53:29.878854","id":460,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Switching from virtualenvwrapper to direnv, Starship, and uv","link":"https://treyhunner.com/2024/10/switching-from-virtualenvwrapper-to-direnv-starship-and-uv/","tags":"python, uv","message":"I've kinda fallen out of using direnv now that a lot of my projects use hatch, I generally just hatch shell into them.  I just need to make sure I go through all of them and make my installer uv.  Now I've been thinking about making uv my only needed dependency to run a python project and leaning more to something like `uv run --with . uvicorn myapp --reload`","published":true,"public":true,"date":"2024-12-24T03:30:57.263143","id":459,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Lazy self-installing Python scripts with uv","link":"https://treyhunner.com/2024/12/lazy-self-installing-python-scripts-with-uv/","tags":"python, uv","message":"I really like Trey's steps to making an executable python script with uv\n\nhis old process seems to be the same with a new shebang\n\n> 1. Add an appropriate shebang line above the first line in the file (e.g. #!/usr/bin/env python3)\n> 2. Aet an executable bit on the file (chmod a+x my_script.py)\n> 3. Place the script in a directory that’s in my shell’s PATH variable (e.g. cp my_script.py ~/bin/my_script)\n\n\nAnd here is the new format the the shebang followed by the metadata comment block defined in PEP 723.\n\n``` bash\n#!/usr/bin/env -S uv run --script\n# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n#     \"ffmpeg-normalize\",\n# ]\n# ///\n```\n","published":true,"public":true,"date":"2024-12-24T03:20:33.576072","id":458,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"My approach to running a link blog","link":"https://simonwillison.net/2024/Dec/22/link-blog/#atom-everything","tags":"blog","message":"I still cannot believe I thought I had such a unique idea with thoughts only to find out shortly thereafter that Simon beat me to the punch by about 20 years! \n\nSimon put a lot of work into this [post](https://simonwillison.net/2024/Dec/22/link-blog/#thoughts.waylonwalker.com) please check it out.  Its not only filled with tons of little nuggets about blogging, it has just a ton of links to other posts I'm itching to read now.\n\nhttps://simonwillison.net/2024/Dec/22/link-blog/#thoughts.waylonwalker.com\n\n## a linkblog proves that you read\n\nSimon mentions it in the post as well, but one thing about having a link blog does is that it proves that you actually read articles that you share.  This is really more about proving to myself, and reminding myself that anyone else, it's a good feeling.\n\n## Trying to add soemthing extra\n\n* include names of people, and add tags for common people\n* something extra - the whole point is to bring something to the post without stealing thunder, but rather linkbuilding for the author that put the hard work in.\n* copious amounts of quotes\n* It should bring the author up not put them down\n\n## A post a day\n\n_well .98 posts per day_\n\nSimon mentions starting in Nov 2003, which puts that at 7722 days since then.  That is so close to a post a day for 21 years, even though they are often as short as one sentence that is impressive to keep up over time.\n\n> So far I’ve published 7,607 link blog posts and counting.\n\n## What's my rate\n\nI just check and I am at 513 days in with 413 posts (0.8 posts/day).  Not quite up to Simon, but close enough to be proud of.  My only grief is that I didn't start sooner.\n\n## My stack\n\nI have a full post explaining more about how I do mine and the stack behind it here.\n\nhttps://waylonwalker.com/thoughts/\n\n## See Images **are** hard!\n\nThis is one of the main reasons that I built [dropper](https://dropper.wayl.one) for myself, and plan to include it in [fokais](https://fokais.com) as a product to help others with their blog.  This is definite evidence that I am not the only one with this issue!\n\n## I've made images easy form myself\n\nI've tried half a dozen or so easy techniques from obsidian to various github repos and none have really hit me with inspiration to really add screenshots like I do with [dropper](https://dropper.wayl.one).  I write all of my thoughts posts in a chrome extension drop down local first style and when i hit paste it uploads and gives me a markdown image link, it cannot be easier for me. \n\nWhen I store them I compress them and convert them to webp.  I serve them by streaming them out of an s3 bucket with fastapi and some very generous cloudflare cache headers, so I should only get a request for that image about once a year.\n\n> Warning, I built dropper for me, no guarantees that it works forever, foakis will be for more users.\n\n![image](https://dropper.wayl.one/api/file/2d54112d-b6c0-4f42-bbbb-eeb5fea133bd.webp)\n\n## Bluesky does not penalize for links\n\nI am loving bluesky more and more, learning this just gave it another level up.\n\n\n---\n\n## Series\n\nI just noticed that Simon has Series on his blog in a very elegant way.  One I need to get back to blogging more, I did not do so good in 2024, and two this is awesome and I want it.\n\n![image](https://dropper.wayl.one/api/file/ec59349e-cca7-4fa9-a57e-50cc442305db.webp)test\n","published":true,"public":true,"date":"2024-12-23T01:47:47.813275","id":457,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How I use Obsidian Templater","link":"https://thoughts.waylonwalker.com/post/455","tags":"meta, thoughts, shots","message":"Ok, second post on this one.  I am sending only head requests, so I want to see the first request for the image, which happens in the chrome extension after pressing submit.  It will not yet come from cloudflare so I am interested in what it looks like just streaming out of object sorage.  This time I have the inspector open on the tab.\n\n---\n\nAs expected I got a cloudflare cache miss on first hit.\n\n![image](https://dropper.wayl.one/api/file/a9fdbb56-ce1b-42cd-9598-81c36eb758e2.webp)\n\nBut the overall performance of 351ms to get the image was not bad considering it takes several seconds to get the image fresh.\n\n![image](https://dropper.wayl.one/api/file/fa623194-aa14-4fdb-a5ac-2a39beafbf1e.webp)\n\n---\n\nNow closing the chrome extension popup, and hitting the main thoughts page again gives me a cache hit from Cloudflare's CDN.\n\n![image](https://dropper.wayl.one/api/file/861880a5-4f2d-47e7-b19f-f4e8eaa34139.webp)\n\nAnd the total request time goes from 351ms to 21ms with the Cloudflare CDN, quite impressive!\n\n![image](https://dropper.wayl.one/api/file/f8927bab-a63b-453f-aaad-d6af68f5e6c0.webp)\n\n---\n\nSorry with how meta these last two posts were, I needed a second post to get that fresh request graph from.","published":true,"public":true,"date":"2024-12-22T17:12:50.031771","id":456,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How I use Obsidian Templater","link":"https://thoughts.waylonwalker.com/post/454","tags":"meta, thoughts, shots","message":"This is a test post.  I just updated the chrome extension for thoughts to take a the thumbnail image on open of the chrome extension so that it is ready when i publish it. let's see what happens.","published":true,"public":true,"date":"2024-12-22T17:08:32.418412","id":455,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How I use Obsidian Templater","link":"https://cassidoo.co/post/obsidian-templater/","tags":"meta, blog","message":"I really like this idea of keeping a set up contacts in a markdown repo, and being able to wikilink them to different tickets / meetings and what not.  I'm imagining the graph you can build, it feels quite interesting.  Even more relevant as we see things like teams rolling out retention limits to messages.\n\n\nHere is Cassidy's format, I like it but I'm probably not going to track the birthday of most people I work with, thats just not the relationship I tend to have with work friends.  It might be a midwest or non tech thing, but I am not even aware if any of my co-workers have social media, and I assume that if they did it would not include anything work related but more football and other sports.\n\n![image](https://dropper.wayl.one/api/file/32859bd6-1b9f-4d40-a87c-0b96a5a42084.webp)","published":true,"public":true,"date":"2024-12-22T16:53:28.275980","id":454,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"docker context (and an issue to question your sanity) | Pype.dev","link":"https://pype.dev/docker-context-and-an-issue-to-question-your-sanity","tags":"docker, containers","message":"Dang context can really cause you to pull your hair out.  Context seems so freaking convenient, but I've avoided it and just ssh in for these reasons.  Maybe I'll come around eventually but for now ssh is my friend.","published":true,"public":true,"date":"2024-12-19T17:56:46.895720","id":453,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(88) Styling better custom inputs with Dave Rupert - YouTube","link":"https://www.youtube.com/watch?v=azUEOy8_GHo","tags":"webdev, css","message":"Reminder to tune in later, can't watch now, but saw a link on Dave's blog.\n\n![image](https://dropper.wayl.one/api/file/ea6d4a9f-9abe-4853-9b5b-97335130d221.webp)","published":true,"public":true,"date":"2024-12-18T02:15:14.763886","id":451,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I got the ADHD, too - daverupert.com","link":"https://daverupert.com/2024/12/adhd/","tags":"adhd","message":"Cheers to the Unique brains dave.  I can say I am 100% with Dave on all of these, except the clean environment thing, lucky Dave.  If I have enough room to see what I am doing and walk around a mess, I probably wont even notice it.  I'm so hyper focused on what is right in front of me that mess could be a huge pile of cash and i'd never see it.","published":true,"public":true,"date":"2024-12-18T02:12:45.788802","id":450,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Damn, I love dropper already","link":"https://thoughts.waylonwalker.com/post/448","tags":"blog, meta","message":"Damn I'm loving using dropper already, I am able to copy paste images right into posts on thoughts.  This is my first post that really utilizes them heavily to show how different styled rss feeds look in the post.  These were super quick to screenshot and paste in, this is a DREAM workflow for me. \n\n![image](https://dropper.wayl.one/api/file/6b452d8c-030f-4075-93eb-a9714fa63aa5.webp)\n\nWhen I paste an image into my thoughts chrome extension it automatically uploads it to dropper, and places a markdown image tag in its place.  Ya, I know the alt text could be better, but it feels _fine_ for quick and dirty posts like this.\n\n![image](https://dropper.wayl.one/api/file/1d2da59e-5212-4a56-82f8-81b9e5356159.webp)\n\ncheck out https://thoughts.waylonwalker.com/post/448  for some sweet styled rss","published":true,"public":true,"date":"2024-12-18T00:42:07.983424","id":449,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to make your RSS feed pretty","link":"https://cassidoo.co/post/prettify-rss/","tags":"blog, rss, feed","message":"I love me some styled rss, it's how the OG internet was made to be.  You choose what you want to read and when.  There is no middleman aggregator inflating the reach of things they want you to see or suffocating things against them.  It's just you and your internet friends.\n\n\n## [Cassidy's Styled rss](https://cassidoo.co/rss.xml)\n\nCassidy has a quite lovely and easy to read rss feed, with an open source style sheet, that is part of her open source blog template for astro [blahg](https://github.com/cassidoo/blahg), love that name by the way!\n\n![image](https://dropper.wayl.one/api/file/f8a6c448-2a95-47e1-b128-2bd7c3865253.webp)\n\n## [Dave Rupert's Feed](https://daverupert.com/atom.xml)\n\nI first learned of styled rss feeds from shoptalkshow.com, specifically from [Dave Rupert](daverupert.com).\n\n![image](https://dropper.wayl.one/api/file/1be6c1e1-1645-4387-9e6d-134e001c04cb.webp)\n\nDave uses a pretty bog standard styled rss feed with [pretty-feed-v3](https://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl).  This repo is probably the best place to start if you are looking to style your rss feed.\n\nhttps://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl\n\n## [My RSS Feed](https://waylonwalker.com/archive/rss.xml)\n\nMy feed comes from my static site generator [markata](markata.dev), a plugins all the way down static site generator written in python, made for customizing, lacking just about any and all docs so you are on your own.\n\n![image](https://dropper.wayl.one/api/file/214bd66f-88e1-4907-8e47-51d22b376678.webp)","published":true,"public":true,"date":"2024-12-18T00:38:24.328602","id":448,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Dropper","link":"https://dropper.wayl.one/","tags":"blog, meta","message":"Dropper is a place for me to drop files for quick posts like this.\n\n![image](https://dropper.wayl.one/api/file/c3a4c39d-c9ab-4e0a-b4c1-b74362877342.webp)","published":true,"public":true,"date":"2024-12-16T22:26:59.160986","id":447,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Add a healthcheck to your FastAPI app | Pype.dev","link":"https://pype.dev/add-a-healthcheck-to-your-fastapi-app","tags":"python, fastapi, docker","message":"Nice example of adding a healthcheck to fastapi, and integrating it with docker.  Don't forget to include curl in the install, nice touch.","published":true,"public":true,"date":"2024-12-16T19:05:50.308800","id":446,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"casey/just: 🤖 Just a command runner","link":"https://github.com/casey/just?tab=readme-ov-file#constants","tags":"bash, linux, just","message":"new versions of just now come with color variables already set.\n\n``` bash\n[group('manage')]\nversion:\n    #!/usr/bin/env bash\n    version=$(cat version)\n    echo current version {{BOLD}}{{GREEN}}$version{{NORMAL}}\n```","published":true,"public":true,"date":"2024-12-14T17:04:06.002794","id":445,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"pipedream/justfile at main · thechangelog/pipedream","link":"https://github.com/thechangelog/pipedream/blob/main/justfile","tags":"bash, linux, just","message":"I found this nugget in thechangelogs justfile, it lets you add color to your justfile with variables quite easily.\n\n``` bash\n# https://linux.101hacks.com/ps1-examples/prompt-color-using-tput/\n\n_BOLD := \"$(tput bold)\"\n_RESET := \"$(tput sgr0)\"\n_BLACK := \"$(tput bold)$(tput setaf 0)\"\n_RED := \"$(tput bold)$(tput setaf 1)\"\n_GREEN := \"$(tput bold)$(tput setaf 2)\"\n_YELLOW := \"$(tput bold)$(tput setaf 3)\"\n_BLUE := \"$(tput bold)$(tput setaf 4)\"\n_MAGENTA := \"$(tput bold)$(tput setaf 5)\"\n_CYAN := \"$(tput bold)$(tput setaf 6)\"\n_WHITE := \"$(tput bold)$(tput setaf 7)\"\n_BLACKB := \"$(tput bold)$(tput setab 0)\"\n_REDB := \"$(tput setab 1)$(tput setaf 0)\"\n_GREENB := \"$(tput setab 2)$(tput setaf 0)\"\n_YELLOWB := \"$(tput setab 3)$(tput setaf 0)\"\n_BLUEB := \"$(tput setab 4)$(tput setaf 0)\"\n_MAGENTAB := \"$(tput setab 5)$(tput setaf 0)\"\n_CYANB := \"$(tput setab 6)$(tput setaf 0)\"\n_WHITEB := \"$(tput setab 7)$(tput setaf 0)\"\n``` \n\nUsage\n``` bash\necho:\n    echo {{_BOLD}}{{_GREEN}}hello there{{_RESET}}\n```","published":true,"public":true,"date":"2024-12-14T16:54:34.770849","id":444,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hurl - Run and Test HTTP Requests","link":"https://hurl.dev/","tags":"webdev, testing","message":"Hurl was mentioned by [@gerhard](https://gerhard.io/) on the latest [changelog and Friends](https://www.youtube.com/watch?v=mvC7497CJJs&t=3001s).  Looks  like a feature rich easy to use testing tool that is tested via what looks like a config file.\n\n> Hurl is a command line tool that runs HTTP requests defined in a simple plain text format.\n> It can chain requests, capture values and evaluate queries on headers and body response. Hurl is very versatile: it can be used for both fetching data and testing HTTP sessions.\n> Hurl makes it easy to work with HTML content, REST / SOAP / GraphQL APIs, or any other XML / JSON based APIs.","published":true,"public":true,"date":"2024-12-14T16:41:38.416177","id":443,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"watchfiles","link":"https://watchfiles.helpmanual.io/","tags":"python","message":"Simple, modern and high performance file watching and code reload in python.","published":true,"public":true,"date":"2024-12-13T02:08:24.139998","id":442,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"hostnamectl to easily change hostname | Pype.dev","link":"https://pype.dev/hostnamectl-to-easily-change-hostname","tags":"bash, linux","message":"For some reason the ublue ecosystem does not prompt you to set your hostname on install and you get a hostname like bazzite showing up.  Looks like this is the fix.\n\n> hostnamectl --static hostname babyblue-aurora","published":true,"public":true,"date":"2024-12-06T14:30:41.223612","id":441,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ansible Galaxy - amazon.aws","link":"https://galaxy.ansible.com/ui/repo/published/amazon/aws/content/module/s3_bucket/#examples","tags":"ansible","message":"Great examples for working with s3 buckets with ansible.","published":true,"public":true,"date":"2024-12-05T00:06:23.551623","id":440,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Using OPNsense with Tailscale · Tailscale Docs","link":"https://tailscale.com/kb/1097/install-opnsense","tags":"opnsense, tailscale","message":"On reboot of my opnsense router it did not tailscale up.  I'm not sure if a key expired or what happened.  The fix was to first enable ssh, then ssh in and run tailscale up.\n\n## enable ssh\n\nIn opnsense System > Settings > Administration > Secure Shell > Enable Secure Shell\n\n## tailscale up\n\n``` bash\nssh <opnsense ip>\n8 # to select shell\ntailscale up\n```\n\nFollow the link to log in.\n\n## disable ssh\n\nnow uncheck secure shell to lock down the opnsense machine.\n\n\nIn opnsense System > Settings > Administration > Secure Shell > Enable Secure Shell\n","published":true,"public":true,"date":"2024-12-03T17:37:52.192136","id":439,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Fitting two hard drives and an SSD in a Dell OptiPlex 7010 SFF","link":"https://willj.net/posts/fitting-two-hard-drives-and-an-ssd-in-a-dell-optiplex-7010-usff/","tags":"homelab","message":"This guy fit 2 3.5\" drives and an sdd in a dell 7050 SFF.  It looks tight, and there it probably not much airflow running in it, but its an impressive project.","published":true,"public":true,"date":"2024-11-27T16:53:53.574580","id":438,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How To Fix An Office Chair Popping Noise? With Root Causes - ToErgonomics","link":"https://toergonomics.com/office-chair-popping-noise/","tags":"office","message":"I tried this fix on my secretlabs chair, but unfortunately it did nothing for me.  Mine ended up being an issue in the tilt mechanism and not the hydraulic piston.  I greased the crap out of it, it can only help the longevity.  I did notice that the two washers on either side of my bearing were quite worn in.","published":true,"public":true,"date":"2024-11-25T22:30:19.632517","id":437,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"If anyone else is having sound clicking with chair : here is the document admitting it’s manufacturer defect. : r/secretlab","link":"https://www.reddit.com/r/secretlab/comments/s6ayop/if_anyone_else_is_having_sound_clicking_with/","tags":"office","message":"This is definitely happening to my secretlabs chair.  I did the fix this morning, its still not perfect, but it's better now than it has been in a long time.  Mine use to be so bad that it would pop and creak every time I sat down or moved the smallest bit.  It's now quiet through the mid range of its motion with the occasional pop when I sit down.","published":true,"public":true,"date":"2024-11-25T22:28:46.241247","id":436,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Changelog on X: \"🗣️@dhh on Kubernetes' migration pitch: “Oh, we’re on Amazon? Flip the switch, George! Let’s move over to GCP.” Vs reality: \"Flip the switch, George! We’ll start having the meetings about the meetings about how we can move out four years from now.\" https://t.co/rs5IwT93zt\" / X","link":"https://x.com/changelog/status/1860697708463378497","tags":"cloud, k8s","message":"switching cloud providers, theres no easy way.  K8s was supposed to get us there, haha, the deep integrations with each vendor just keep locking us in","published":true,"public":true,"date":"2024-11-25T02:30:44.138836","id":435,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to make a good first impression in business #dewalt #tools #smallbusiness - YouTube","link":"https://www.youtube.com/shorts/dq0p_APdNME","tags":"3d-printing","message":"Dang, love this guys branding.  Hooks to get stuff offDaBench, what a freaking cool name.","published":true,"public":true,"date":"2024-11-24T20:39:24.411407","id":434,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Inside Argo: Automating the Future - YouTube","link":"https://www.youtube.com/watch?v=ox3Gx3eCTCs","tags":"k8s, argo","message":"This is a really amazing documentary of argocd.  I got into k8s pretty late in the game.  Which is pretty typical for me.  As I went to use k8s for the first time i was using workflows, then cd.  both of these tools had a level of polish that made them seem like they had been there forever and not quite as young as they actually are.\n\nI thought it was interesting how they focused on how the name must be two syllables or less, start with a or b, logo needs to be cutesy funny and recognizable seemed interesting, but puts them at the top of lists and makes them look like they've been there forever.","published":true,"public":true,"date":"2024-11-22T02:29:00.460674","id":433,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Introduction - bootc","link":"https://containers.github.io/bootc/","tags":"docker, containers","message":"bootc is the underlying technology that enables OS's like bazzite, and Aurora from the uBlue ecosystem.","published":true,"public":true,"date":"2024-11-21T01:45:34.309282","id":432,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Saghen/blink.cmp: Performant, batteries-included completion plugin for Neovim","link":"https://github.com/Saghen/blink.cmp","tags":"nvim","message":"A new completion plugin that I might give a try.  Readme makes it sound like its built on some fast teck that allows them to handle a lot of items and run more frequently.  The videos look like they don't have some of the same issues cmp does for me.  Maybe its my configuration, but I'm pretty sure it does not update when you backspace and things like that.","published":true,"public":true,"date":"2024-11-19T14:45:06.242529","id":431,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Wes Bos on X: \"CSS Anchors: flip a tooltip to the bottom when it goes offscreen https://t.co/UYrQIIpmn9\" / X","link":"https://x.com/wesbos/status/1856724739336859713","tags":"html, css","message":"These css anchors are crazy that you can do this with html and not a bunch of js, probably requiring a library or framework.\n\n![](https://x.com/i/status/1856724739336859713)","published":true,"public":true,"date":"2024-11-19T14:39:36.921863","id":430,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"statically makes OG images **easy** (2048×1170)","link":"https://cdn.statically.io/og/statically%20makes%20OG%20images%20**easy**","tags":"blog","message":"Staically makes creating OG images so easy, you can just pop this in your <head> section with some og tags.\n\n``` html\n    <meta name=\"og:image\" name=\"og:image\"\n        content=\"https://cdn.statically.io/og/{{post.title}}\" />\n    <meta name=\"twitter:image\" name=\"twitter:image\"\n        content=\"https://cdn.statically.io/og/{{post.title}}\" />\n    <meta name=\"og:image:height\" content=\"640\" />\n    <meta name=\"og:image:width\" content=\"1280\" />\n```\n","published":true,"public":true,"date":"2024-11-17T21:48:04.624403","id":429,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"E576: Error while reading ShaDa file: there is an item at position 270498 that must not be there: Missing itemsare for internal uses only · Issue #6875 · neovim/neovim","link":"https://github.com/neovim/neovim/issues/6875","tags":"nvim","message":"I hit an interesting error after updating my nvim plugins today.  I'm sti not even quite sure what a ShaDa file is, but I found min in my nvim state directory, unlike this issue that mentions it being in share.\n\nThe Error.\n\n> Error while reading ShaDa file:\n\nThe Fix\n\n``` bash\nmv ~/.local/state/nvim/shada/main.shada ~/.local/state/nvim/shada/main.shada.bak\n```","published":true,"public":true,"date":"2024-11-16T16:04:27.787985","id":428,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Production-ready Python Docker Containers with uv","link":"https://hynek.me/articles/docker-uv/","tags":"python, docker","message":"Hynek has a sick dockerfile setup for using uv in python projects.","published":true,"public":true,"date":"2024-11-15T14:34:10.497243","id":427,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Proper handling of None in WHERE condition · Issue #109 · fastapi/sqlmodel · GitHub","link":"https://github.com/fastapi/sqlmodel/issues/109#issuecomment-1046223225","tags":"python, sqlmodel","message":"SQLModel models ship with an `is_`, and `is_not` that you can use to compare to None without pesky linters complaining.\n\nThis comment summed it up quite well.\n\n> I believe this is concerned entirely with SQLAlchemy, not with SQLModel, and has to do with the required semantics to construct a BinaryExpression object.\n> Hero.age == None evaluates to a BinaryExpression object which is eventually used to construct the SQL query that the SQLAlchemy engine issues to your DBMS.\n> Hero.age is None evaluates to False immediately, and not a BinaryExpression, which short-circuits the query no matter the value of age in a row.\n> From a cursory search, it does not seem that the is operator can be overridden in Python. This could help explain why the only possibility is by using the == operator, which can be overridden.\n\n\nso rather than using `Team.heros == None` we can use `Team.seros.is_(None)` which checks for itentity not equality.","published":true,"public":true,"date":"2024-11-08T13:36:30.660986","id":426,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Rugged Storage Box, Parametric and Customizable by bulbasaur0 | Download free STL model | Printables.com","link":"https://www.printables.com/model/637028-rugged-storage-box-parametric-and-customizable","tags":"gridfinity, 3d printing","message":"Non Gridfinity Rugged boxes","published":true,"public":true,"date":"2024-11-06T20:58:54.724810","id":424,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Gridfinity Rugged Storage Box, Parametric and Customizable by bulbasaur0 | Download free STL model | Printables.com","link":"https://www.printables.com/model/757297-gridfinity-rugged-storage-box-parametric-and-custo/files","tags":"3d printing","message":"gridfinity rugged box openscad\n","published":true,"public":true,"date":"2024-11-06T20:33:58.036856","id":423,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Cluster API book","link":"https://cluster-api.sigs.k8s.io/reference/providers","tags":"k8s","message":"Cluster API book","published":true,"public":true,"date":"2024-11-05T04:17:37.553037","id":422,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Gridfinity Generator","link":"https://gridfinity.perplexinglabs.com/pr/gridfinity-extended/0/0","tags":"gridfinity, 3d printing","message":"Gridfinity generator uses open scad, so you can make rugged boxes, bins and base plates with form input.  not fully custom fit to things, but you can custom size square bins, hole cut out sides and all.  From what I can tell, no bento box either. so as long as what you are looking for is square this generator has you pretty well covered.  I'm definitely using this for simple bins and rugged boxes.","published":true,"public":true,"date":"2024-11-04T16:29:57.794172","id":421,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Framework Portable handheld Case (Beth Deck) by Beth Le | Download free STL model | Printables.com","link":"https://www.printables.com/model/1051411-framework-portable-handheld-case-beth-deck","tags":"steamdeck, pc, gaming","message":"The BethDeck is a sick looking DIY steam deck _competitor_ built on top of the framework 13\" mainboard.  No soldering needed, lt with all off the shelf parts.  Controllers appear to be an off the shelf controller with the shell removed and plugged into a usb hub.\n\n![](https://media.printables.com/media/prints/1051411/images/7965723_09c13004-58b9-4868-b078-e3a66073d740_3b514c55-bb6b-4448-a216-842d7de48955/thumbs/inside/1600x1200/jpg/pxl_20240910_005549812.webp)","published":true,"public":true,"date":"2024-11-01T15:44:26.895980","id":420,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"My Favorite Fingerboard Obstacles & WHY - YouTube","link":"https://www.youtube.com/watch?v=fDCmiL3qaL0","tags":"fingerboard","message":"        I really like how Spencer walked through how to make quite a few unique setups with only a few simple obstacles.  It does not take anything fancy to have a cool setup.","published":true,"public":true,"date":"2024-10-31T01:27:56.560736","id":419,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Document how to provide a negative number as an argument · fastapi/typer · Discussion #798 · GitHub","link":"https://github.com/fastapi/typer/discussions/798","tags":"python, cli, typer","message":"Today I learned that you cannot pass negative integers as values to typer.  in this case `context_settings={\"ignore_unknown_options\": True}` is required so that the `-` does not look like a flag.\n\n``` python\n# script name: main.py\n\nimport typer\n\napp = typer.Typer()\n\n\n@app.command()\ndef failing(value: float):\n    print(f\"{value=}\")\n    \n\n@app.command(\n    context_settings={\"ignore_unknown_options\": True}\n)\ndef working_good(value: float):\n    print(f\"{value=}\")\n    \n    \nif __name__ == \"__main__\":\n    app()\n```","published":true,"public":true,"date":"2024-10-30T01:28:56.852253","id":418,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Aaron Francis on X: \"📣 We're excited to announce Mastering Postgres, a video course coming October 15th. @steve_tenuto and I started this business with dreams to improve the quality of database education. With the help of @xata, this course is our next step in that direction. https://t.co/gydP6CcmQX\" / X","link":"https://x.com/aarondfrancis/status/1833533150674268469","tags":"database, postgres","message":"Aaron Francis is a database master, pumped for thsi dude and all that he is able to accomplish. ","published":true,"public":true,"date":"2024-10-27T02:52:38.348218","id":417,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Will McGugan on X: \"New Version of #Textual released! 😎🤓🦾 The demo has been updated. It's not quite finished, expect an update next release, but it is a lot of fun. Press C at any point to see the code powering that page (makes a great learning tool). Video 👇 https://t.co/p2ScsuL7GZ https://t.co/r1bVHsYw4w\" / X","link":"https://x.com/willmcgugan/status/1849831271289012463","tags":"python, tui, textual","message":"This new demo of textual is wildly awesome, so many widgets and features being added into the main library.  The themes and animations are on point and far surpass my expectations of a tui.","published":true,"public":true,"date":"2024-10-27T02:51:07.521033","id":416,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ticklemykeys on X: \"Porta john got some pink caps https://t.co/I2OUfoCmFK\" / X","link":"https://x.com/XTicklemykeys/status/1850361138791195069","tags":"keyboard, ticklemykeys, 3dprinting","message":"Loving this 6 pink with blueforward multicolor combo the porta john has going right now.  Also my son printed me a cute black pumpkin.","published":true,"public":true,"date":"2024-10-27T02:20:51.885607","id":415,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Not a split keyboard, but perhaps a companion to one: the Ploopy Trackpad. An open-source trackpad powered by QMK. All design files available for free. Complete assembly instructions. See comments for details. : r/ErgoMechKeyboards","link":"https://www.reddit.com/r/ErgoMechKeyboards/comments/1g5phts/not_a_split_keyboard_but_perhaps_a_companion_to/","tags":"qmk, keyboard, trackpad","message":"ploopy just dropped a trackpad that runs qmk.  This sounds so cool.  I'm excited to see some videos on it.  It would be sick to get this incorporated into a porta john running zmk, one bluetooth device to run all the peripherals.","published":true,"public":true,"date":"2024-10-20T00:02:57.688472","id":414,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Install a Zulip server — Zulip 9.2 documentation","link":"https://zulip.readthedocs.io/en/stable/production/install.html","tags":"zulip, chat, self-hosted","message":"Zulip was just featured on a changelog clip as a self-hosted chat offering.  I'm interested to give this a go and see how it compares to matrix.  glancing at it, it looks a lot like slack.","published":true,"public":true,"date":"2024-10-16T15:12:47.451475","id":413,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Pin versions of dependencies · Issue #2200 · Kozea/WeasyPrint","link":"https://github.com/Kozea/WeasyPrint/issues/2200","tags":"python","message":"weazyprint was throwing me some errors, turns out that it's currently not compatible with the latest pydyf package.\n\nmy error\n\n``` python\nTypeError: __init__() takes 1 positional argument but 3 were give\n```\n\nI fixed it by locking in pydyf at 0.8.0\n\n``` txt\npydyf==0.8.0\n```\n","published":true,"public":true,"date":"2024-10-11T13:36:19.303564","id":412,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"These are SICK, gonna be using this a lot. (Thanks @evantravers 🥰.) · jesseleite/dotfiles@4979400","link":"https://github.com/jesseleite/dotfiles/commit/49794006cbc9dc0e743925ec1a7122514d7148be","tags":"nvim","message":"helix inspired treesitter select outwards and select inwards.","published":true,"public":true,"date":"2024-10-11T01:09:17.179864","id":411,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"add helix · WaylonWalker/devtainer@71b9b29","link":"https://github.com/WaylonWalker/devtainer/commit/71b9b29baf14f3714601d022ca12c3417437395b","tags":"helix","message":"Helix officially made it in my devtainer.   I am installing the binary right out of the github release with wget and tar.  I can't use installer because their release format does not match what installer is looking for.  \n\n!!! note: \n   I also move the runtime over to /usr/local/share/helix/runtime.\n\n!!! note: \n   I use /usr/local/bin rather than my home directory as it works better with distrobox.","published":true,"public":true,"date":"2024-10-11T01:05:03.263318","id":410,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"helix-vim/config.toml at master · LGUG2Z/helix-vim","link":"https://github.com/LGUG2Z/helix-vim/blob/master/config.toml","tags":"helix","message":"Here are some really great keybinds to make helix vim-like.  It feels very antithetical to use this whole sale and forego the helix motion-verb language, but there are some nuggets like G in here that I find useful.","published":true,"public":true,"date":"2024-10-09T15:37:18.736213","id":409,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Support regex substitution command · Issue #2232 · helix-editor/helix","link":"https://github.com/helix-editor/helix/issues/2232#issuecomment-1250371051","tags":"helix","message":"helix multicursor has the ability to do what vims `:s/hello/world/gc` does by using `)` to cycle through cursors, and `n` to discard unwanted cursors.","published":true,"public":true,"date":"2024-10-08T13:39:41.265501","id":408,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Support regex substitution command · Issue #2232 · helix-editor/helix","link":"https://github.com/helix-editor/helix/issues/2232#issuecomment-1228632218","tags":"vim, regex, refactoring","message":"Here is a really good vim substitute with regex capture groups, saving this one for a rainy day.\n\n\n``` md\n* Reading 1: This is a title to a link\n* Reading 2: This is another title\n```\n\n`:%s/\\v(: )(.+)$/\\1\\[\\2\\]\\(`\n\n``` md\n* Reading 1: [This is a title to a link](\n* Reading 2: [This is another title](\n```","published":true,"public":true,"date":"2024-10-08T13:36:25.386596","id":407,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Support regex substitution command · Issue #2232 · helix-editor/helix","link":"https://github.com/helix-editor/helix/issues/2232#issuecomment-1107644740","tags":"helix, refactoring","message":"Interesting take on refactoring the whole codebase from your editor.  In this thread the-mikedavis suggests multicursor as a replacement for substitute, and later in the thread takes the side that larger workspace wide edits are outside the scope of helix and he would reach for a refactoring tool like [fastmod](https://github.com/facebookincubator/fastmod?tab=readme-ov-file) to do the job.","published":true,"public":true,"date":"2024-10-08T13:33:44.487569","id":406,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Support regex substitution command · Issue #2232 · helix-editor/helix","link":"https://github.com/helix-editor/helix/issues/2232","tags":"helix","message":"I am a heavy user off substitutions in vim, helix does not substitutions built in, rather it leans on multicursor support.\n\nto replace every instance of hello with world in vim\n\n``` text\n:%s/hello/world/g<CR>\n```\n\nand in helix you would\n\n``` text\n%shello<CR>cworld<ESC>,\n```","published":true,"public":true,"date":"2024-10-08T13:12:24.936789","id":405,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Background Image | Wallpaper · Issue #3059 · helix-editor/helix","link":"https://github.com/helix-editor/helix/issues/3059","tags":"helix","message":"How to make helix themes transparent.  You can make any built-in theme transparent in helix with one line, a few extras and you can make all the pop ups, help menus and status line trransparant as well.\n\n``` bash\nmkdir -p ~/.config/helix/themes\nhx\n```\n\n`:o ~/.config/helix/themes/dracula_transparant.toml`\n\n``` toml\n# ~/.config/helix/themes/dracula_transparant.toml\ninherits = \"dracula\"\n\"ui.background\" = { fg = \"foreground\" }\n\"ui.menu\" = { fg = \"white\" }\n\"ui.popup\" = { fg = \"white\" }\n\"ui.window\" = { fg = \"white\" }\n\"ui.help\" = { fg = \"light-gray\" }\n\n\"ui.statusline\" = { fg = \"gray\" }\n\"ui.statusline.inactive\" = { fg = \"black\" }\n```\n\n`:config-edit`\n\n``` toml\n# ~/.config/helix/config.toml\ntheme=\"dracula_transparant\"\n```","published":true,"public":true,"date":"2024-10-08T13:02:53.772905","id":404,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"help on setting up ruff formatter + ruff + pyright please : r/HelixEditor","link":"https://www.reddit.com/r/HelixEditor/comments/17gglgm/help_on_setting_up_ruff_formatter_ruff_pyright/","tags":"helix","message":"This post shows how to set up multiple LSP's in helix, the example uses pyright and ruff-lsp for python.\n\nAdd this to your `~/.config/helix/languages.toml`\na\n``` toml\n[[language]]\nname = \"python\"\nauto-format = true\nlanguage-servers = [\n    {name = \"pyright\"},\n    {name = \"ruff-lsp\"},\n]\n\n[language-server.pyright]\ncommand = \"pyright-langserver\"\nargs = [\"--stdio\"]\nconfig = {}\n\n[language-server.ruff-lsp]\ncommand = \"ruff-lsp\"\nargs = []\nconfig = {}\n```","published":true,"public":true,"date":"2024-10-08T02:25:37.991277","id":403,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"configuring pylsp · helix-editor/helix · Discussion #6623","link":"https://github.com/helix-editor/helix/discussions/6623","tags":"helix","message":"How to set your python formatter to black with helix.  The following snippet lays out how to set the helix editor to auto-format on save with the black formatter.\n\n``` toml\n[[language]]\nname = \"python\"\nlanguage-servers = [\"pylsp\"]\n\n[language-server.pylsp.config.pylsp]\nplugins.pyls_mypy.enabled = true\nplugins.pyls_mypy.live_mode = true\nplugins.flake8.maxLineLength = 88\nplugins.pycodestyle.maxLineLength = 88\n\n[language.formatter]\ncommand = \"black\"\nargs = [\"--line-length\", \"88\", \"--quiet\", \"-\"]\n```","published":true,"public":true,"date":"2024-10-08T02:23:03.694016","id":402,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Database Remote-Copy Tool For SQLite (draft)","link":"https://simonwillison.net/2024/Oct/4/sqlite-rsync/","tags":"sqlite","message":"Simon shared a really cool new utility tool for sqlite ispired by rsync.  It checks hashes of each sqlite page and syncs pages.  So if nothing in the database has changed it will only require 0.5% the bandwidth as a copy would.","published":true,"public":true,"date":"2024-10-05T20:56:49.663207","id":401,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ticklemykeys on X: \"working on a new model. * seams less visible * hotswap * more room for build https://t.co/dZSO2cXmoZ\" / X","link":"https://x.com/XTicklemykeys/status/1840104423508312273","tags":"keyboard","message":"porta-john design update, working on moving the seams to line up with an edge to eliminate long noticable seams.  These seams are required because I don't have a printer big enough to print this in one shot.\n\nhotswaps are going in.  I'm getting really excited for hotswaps as they will make keebs more repairable, and users can self change out the switches if they want.  I can also pre-build them ready to go, and drop in switches at the time of order.  I did learn today that these are hyper specific to gateron, damn all these switch manufacturers and their special pinouts.\n\nLast thing I gotta make more room for wiring the microcontroller and running wires out to the rows and columns, my first prototype build took waay to long to build.","published":true,"public":true,"date":"2024-10-04T01:49:28.023990","id":400,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Elwin Ransom 👽 on X: \"Help, I'm being Helix pilled by my own friends! https://t.co/IICLcaTfQa\" / X","link":"https://x.com/jesseleite85/status/1841547565575086448","tags":"editor","message":"Is Jesse going to get sniped by the helix community?","published":true,"public":true,"date":"2024-10-04T01:42:50.036989","id":399,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ticklemykeys on X: \"New cap of my own design https://t.co/j63q98jT8O\" / X","link":"https://x.com/XTicklemykeys/status/1841646323939864871","tags":"keyboard","message":"This low profile design almost made it to 9.  I think blending together the custom brim to make them all one piece really made the final difference here.  The custom brim is two layers thick, only touching on the top layer making it very easy to peel off, but gives better adhesion to the bed, and does not loose one like this print did.","published":true,"public":true,"date":"2024-10-04T01:42:01.350036","id":398,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ticklemykeys on X: \"Full size MX caps, printing flawlessly with minimal cleanup required. https://t.co/QtUKZZBLHv\" / X","link":"https://x.com/XTicklemykeys/status/1841860763960377732","tags":"keyboard","message":"really excited for how these caps of my own design are working out.  Having the extra control is the first time I've been able to print more than one at a time without some hacky gcode.  I've got a set of nine here that I have printed 4 times without a single failure.","published":true,"public":true,"date":"2024-10-04T01:39:38.424402","id":397,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Cherry 8 mm keycap mount","link":"https://telcontar.net/KBK/Cherry/images/MX/Cherry_8_mm_mount.svgz","tags":"keyboard","message":"MX keycap stem dimensions.  I used these to create my new caps and all these dimensions worked great.  The one dimension I had issues with was the outer diameter off the cap stem, not shown here.  5.3mm ended up being a good outer diameter for me.  I print them at an angle and the bottom of the stem can get a bit of sag, pressing out on the outer wall of the switch and can actually stick the key.","published":true,"public":true,"date":"2024-10-02T12:58:55.223163","id":396,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"distrobox/docs/usage/distrobox-assemble.md at main · 89luca89/distrobox","link":"https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md","tags":"docker, podman, distrobox","message":"This page is gold.  It lays out all of the distrobox assemble api with some good examples  of how to get access to things like podman and kind from inside of containers.\n\nEspecially this example.\n\n``` ini\n[tumbleweed_distrobox]\nimage=registry.opensuse.org/opensuse/distrobox\npull=true\nadditional_packages=\"acpi bash-completion findutils iproute iputils sensors inotify-tools unzip\"\nadditional_packages=\"net-tools nmap openssl procps psmisc rsync man tig tmux tree vim htop xclip yt-dlp\"\nadditional_packages=\"git git-credential-libsecret\"\nadditional_packages=\"patterns-devel-base-devel_basis\"\nadditional_packages=\"ShellCheck ansible-lint clang clang-tools codespell ctags desktop-file-utils gcc golang jq python3\"\nadditional_packages=\"python3-bashate python3-flake8 python3-mypy python3-pipx python3-pycodestyle python3-pyflakes python3-pylint python3-python-lsp-server python3-rstcheck python3-yapf python3-yamllint rustup shfmt\"\nadditional_packages=\"kubernetes-client helm\"\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest;\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install github.com/onsi/ginkgo/v2/ginkgo@latest;\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install golang.org/x/tools/cmd/goimports@latest;\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install golang.org/x/tools/gopls@latest;\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install sigs.k8s.io/kind@latest;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/conmon;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/crun;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker-compose;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/flatpak;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/xdg-open;\nexported_apps=\"htop\"\nexported_bins=\"/usr/bin/htop /usr/bin/git\"\nexported_bins_path=\"~/.local/bin\"\n````","published":true,"public":true,"date":"2024-09-30T15:49:25.864185","id":394,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"urob/zmk-config: Personal ZMK firmware configuration for various boards (34-keys, Corneish Zen, Planck)","link":"https://github.com/urob/zmk-config?tab=readme-ov-file","tags":"keyboard, zmk","message":"This is a very well thought out zmk config featuring many macros, numword, and timeless homerow mods. The build system to build locally looks on point, I really need to give that a try!","published":true,"public":true,"date":"2024-09-29T16:50:30.474947","id":393,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da","link":"https://github.com/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938#diff-38878343c551520f8af2a3986e5f6085b03df197a56a92abc42a44b200f0264aR19","tags":"docker, podman, distrobox","message":"Today I learned that you can use init_hooks to access host machine commands from inside a distrobox container.  This is super handy for things that you cannot get to from inside the container and need ran outside (docker, podman, flatpak, xdg-open).\n\n``` bash\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman;\n```","published":true,"public":true,"date":"2024-09-28T01:34:08.303537","id":392,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Taildrop · Tailscale Docs","link":"https://tailscale.com/kb/1106/taildrop?tab=linux","tags":"tailscale","message":"Tailscale comes with a feature called taildrop that lets you _easily_ share files between machines on your tailnet.  If you have tailscale on ios/android it shows up as a share target when you try to share something, and you can pick the machine to share with.\n\nWhat was not obvious to me was how to receive the file on linux.  The linux tailscale service does not automatically receive the file, which can be kinda nice that you can put it where you want, but was not obvious to me at first.  Use this command to receive files.\n\n``` bash\nsudo tailscale file get .\n```","published":true,"public":true,"date":"2024-09-24T13:19:09.718087","id":391,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"triliu/Heawood42: Files for the Heawood42 ortholinear split keyboard","link":"https://github.com/triliu/Heawood42","tags":"keyboard","message":"The Heawood42 is an interesting diodeless keyboard that is not direct wired. According to the repo this is the only keyboard to be diodeless and not direct wired.  It does this through the use of a graph.","published":true,"public":true,"date":"2024-09-18T22:57:30.368991","id":390,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Leveret v2 & lever keycaps","link":"https://kbd.news/Leveret-v2-lever-keycaps-2380.html","tags":"keyboard","message":"This is a wild key cap that uses a lever to convert horizontal key presses to vertically press the switch down.  The leveret v2 uses two of these on thumbs, one to press outward, and what appears to be one straight forward which feels like it would have to be a wrist motion, but who am I to judge without having it in person.","published":true,"public":true,"date":"2024-09-16T23:53:23.863148","id":389,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Alternatives to Using Pure Black (#000000) for Text and Backgrounds | by Dmitry Sergushkin | Aug, 2024 | UX Planet","link":"https://uxplanet.org/alternatives-to-using-pure-black-000000-for-text-and-backgrounds-54ef0e733cdb","tags":"webdev","message":"A nice set of blacks to use in web design. Subtle variants off of black or white like this can really make your design look nice and modern.","published":true,"public":true,"date":"2024-09-13T15:47:25.063786","id":388,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Wes Bos on X: \"Are you using position: absolute; to overlap elements? It's almost always better to Use CSS Grid instead! https://t.co/hmpbExR88Q\" / X","link":"https://x.com/wesbos/status/1834242925401694490","tags":"webdev, css","message":"This is a pretty incredible use of css grid to overlay items overtop of each other without needing to resort to `position: absolute` and the side effects that it brings.\n\n\n``` css\n.wrap {\n  display: grid;\n  & > * {\n    grid-row: 1;\n    grid-column: 1;\n  }\n}\n```","published":true,"public":true,"date":"2024-09-13T15:43:03.454048","id":387,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Buttery icons","link":"https://www.buttery.so/icons","tags":"Webdev","message":"Some sick looking icons no attribution needed.","published":true,"public":true,"date":"2024-09-07T21:04:18.220178","id":386,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"NOT - LTT Screwdriver - Fancy by Erer2001 | Download free STL model | Printables.com","link":"https://www.printables.com/model/580045/files","tags":"3d-printing","message":"Someone has created a knock off of the ltt screwdriver and made it printable, and it works really well.  I have one printed with 6 different bitholders.  I popped some labels on them in bambu studio as I printed to mark them for metric/inch and so on.\n\n![screenshot-2025-08-02T01-43-02-980Z.png](https://dropper.wayl.one/api/file/a10f10c7-973a-4dde-bd92-ef37b596fb85.png)\n\nI've had mine for about a year now, and I use it quite often.  I used to be a dedicated screwdriver kind of guy, but as life has changed I'm not working out of a shop with tools at reach as much, I'm grabbing a couple of items and heading to a job in the house or a neighbors house.  It's not 30s to grab just the right dedicated screwdriver anymore.  Also having some setup with hex and torx is a game changer.  It's also super handy that you can just pop the bits right into a drill or impact.\n\n![screenshot-2025-08-02T01-43-17-610Z.png](https://dropper.wayl.one/api/file/778afc97-eaff-4524-97b1-a54c76af2e8d.png)\n\nHighly recommended print.  Sorry for not buying the real deal Linux, I got kids to feed here.  I owe you a t-shirt order or something.\n\n![screenshot-2025-08-02T01-43-36-796Z.png](https://dropper.wayl.one/api/file/c09f9f15-e9af-405c-b1bc-41c9759156ce.png)","published":true,"public":true,"date":"2024-08-27T02:13:03.883263","id":385,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Installing Python - uv","link":"https://docs.astral.sh/uv/guides/install-python/","tags":"python, uv","message":"`uv` now can install python for you.  `uv` is inspired by rust's cargo, an all in one fast package and installation manager. `uv` is so fast and becoming feature complete, it's really changing the python packaging ecosystem.\n\n\n``` bash\nuv python install\nuv python install 3.12\nuv python list\n```\n","published":true,"public":true,"date":"2024-08-23T14:55:10.176107","id":384,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Switching Configs in Neovim • Michael Uloth","link":"https://michaeluloth.com/neovim-switch-configs/","tags":"nvim","message":"Switching between nvim configs can be really easy to do since they implemented the `NVIM_APPNAME` Environment Variable.\n\n``` bash\nNVIM_APPNAME=nvim-lazyvim nvim\n```\n\nNow config will be loaded from `~/.config/nvim-lazyvim`\n\nMichael lays out some aliases in the full article.\n\n``` bash\nalias v='nvim' # default Neovim config\nalias vz='NVIM_APPNAME=nvim-lazyvim nvim' # LazyVim\nalias vc='NVIM_APPNAME=nvim-nvchad nvim' # NvChad\nalias vk='NVIM_APPNAME=nvim-kickstart nvim' # Kickstart\nalias va='NVIM_APPNAME=nvim-astrovim nvim' # AstroVim\nalias vl='NVIM_APPNAME=nvim-lunarvim nvim' # LunarVim\n````\n","published":true,"public":true,"date":"2024-08-21T12:57:56.280298","id":383,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Keyboard Build Log | Halfwit’s Dev Blog","link":"https://halfwit.github.io/2017/05/08/keyboardblog.html","tags":"keyboard","message":"This is the coolest scrappy build, no printer or modeling required, no fancy tools, just straight chisel and claw hammer in soft pine.  Im here for it, create the thing that you want to create.","published":true,"public":true,"date":"2024-08-05T13:39:15.513125","id":382,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hotkey to open link under at the text cursor position while typing in edit mode - Help - Obsidian Forum","link":"https://forum.obsidian.md/t/hotkey-to-open-link-under-at-the-text-cursor-position-while-typing-in-edit-mode/8144","tags":"obsidian","message":"Obsidian has a go to definition like feature, the keybind is alt+enter, I would have never guessed this one.","published":true,"public":true,"date":"2024-08-05T01:46:22.973767","id":381,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Make your own luck (do this to stand out in a crowded industry, filmed at ‪@RenderATL‬) - YouTube","link":"https://www.youtube.com/watch?v=YKeVeG6h4AA","tags":"career","message":"Very inspiring video Jason, these people faced adversity and crushed it.  The market is so hard right now, its not easy to get a job, move around, and recover from a layoff.  Everyone in this video just showed that you can make it in this industry right now, you just have to be willing to work harder than the rest.  The bar is raising, a lot of great people are already putting in hard work to make it.\n\nCommunity is Key,  Theo mentioned that a lot of the companies he works with don't even post openings, they go to their community first and are often filling spots through lower risk community hires.","published":true,"public":true,"date":"2024-08-02T13:08:44.137570","id":379,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(8) I Invented Airless Cornhole Bags - YouTube","link":"https://www.youtube.com/shorts/lLNfJb3OG9Y","tags":"3d-printing","message":"This is such a cool 3d printed cornhole game.","published":true,"public":true,"date":"2024-08-01T12:34:12.159080","id":378,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Tank - YouTube","link":"https://www.youtube.com/shorts/6Wo4brRqkz0","tags":"","message":"Thor always comes in hard with fire takes in his shorts.   Especially if you are early in our career take this in.  If you dont yet have kids, but plan to, double take this in.","published":true,"public":true,"date":"2024-08-01T12:31:52.231724","id":377,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How Fly.io uses Docker (without Docker) - YouTube","link":"https://www.youtube.com/watch?v=7iypMRKniPU&t=3s","tags":"docker, vm","message":"Docker no Docker, what!!!\n\n\nSo fly.io uses Dockerfiles to deploy your app, but no docker.  They use containerd to download your docker images into firecracker microvms to run your app.  Firecracker is the same tech that runs aws lambda functions.\n\nFascinating short post on the beans under the hood at fly.io and how they scale your app globally.","published":true,"public":true,"date":"2024-07-27T01:14:21.915373","id":374,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ultimate Modular Macro Keyboard \"Kibly\" : r/MechanicalKeyboards","link":"https://www.reddit.com/r/MechanicalKeyboards/comments/1dyf0d8/ultimate_modular_macro_keyboard_kibly/","tags":"keyboard","message":"This is a pretty sick design, touch screen macropad, trackball, ring, and knobs for days.  I just want to play with it and see what I can make it do.\n\nAs I'm typing I think I just realized that its modular, each rectangle is it's own section!","published":true,"public":true,"date":"2024-07-26T22:32:43.414611","id":373,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"This is Goodbye? - YouTube","link":"https://www.youtube.com/watch?v=YfwlM-fw-aw","tags":"skate","message":"Damn Johnny is always such a positive vibe, just getting steamrolled by this braille shit.  WTF are these brand sleeping on.  Happy to hear that Andy and Brian are supporting him well.\n\nAlso kinds shows what shoes are good when he goes to buy shoes cause no one will send him any and he goes with Etnies.\n\nJohnny keep it going!","published":true,"public":true,"date":"2024-07-26T19:03:00.124729","id":372,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"he's back again","link":"https://thoughts.waylonwalker.com/post/368","tags":"blog, zettelkasten","message":"Wyatt is again inspired to leave his thoughts on the world while watching me take notes on the zettelkasten method.","published":true,"public":true,"date":"2024-07-25T23:09:50.724141","id":369,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Note-taking with Zettelkasten - An Introduction - YouTube","link":"https://www.youtube.com/watch?v=o1NJYnZCfmY","tags":"blog, zettelkasten","message":"Niklas Luhmann created the Zettelkasten method of notetaking, He was the Da Vinci of writing, holding a high standard that we can take inspiration from even today in this digital era.\n\nAs many times as I have seem the Zettelkasten covered, I never knew that it roughly translated to little cards in a box.\n\n\n## Four Principles\n\nMischa lays out four principles of Zettelkasten.\n\n* Atomic - _each card conains one idea_\n* Link - _cards are linked together_\n* Structure - _comes from the links_\n* Own Words - _You write the note in your own words_\n\nMy blog, tils, and thoughts make up my own zettelkasten.  I am not going to say that mine is a perfect representation of his method, but the components are here.  rather than building books, my thoughts and tils build up to blog posts.   The rate of blog posts I write definitely changes with the seasons of life, as seasons change it becomes a bigger or smaller part of the season.\n\nI really like Mischa's most important note to Write in your own words, this is what really promotes learning, and proves to yourself that you can form a thought around the topic.  Up until recently I've wrote everything, but lately I've taken to copy pasting some quotes into my thoughts posts, but I think this is fine, because generally its used to build on the narrative and give me a place to talk about the linked post.","published":true,"public":true,"date":"2024-07-25T23:06:28.764929","id":361,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"add quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-config-42block@cb2cda4","link":"https://github.com/WaylonWalker/zmk-config-42block/commit/cb2cda4cf7b3776995dbc2e8608b60670a2cf8b2","tags":"keyboard, zmk","message":"Even after switching to my hm and ht behaviors I am running into some issues where sometimes I am still accidentally hitting mods(&hm) and layers(&ht) while typing and it's been getting frustrating.  My main issue has been on &ht, they are configured the same so I suspect that my pinkies just move a bit slower over the keys than my pointer/middle finger.\n\nI just added `quick-tap-ms` and `require-prior-idle-ms` to my &hm and &ht behaviors, and a few intentionally sloppy passes through monkeytype seem to show that its working well.  A few days of trying this will tell whether it was a good fix or if I have maybe gone too far the other way.\n\nThe end goal here is to be able to roll over keys faster without worrying about hitting other layers or mods.","published":true,"public":true,"date":"2024-07-25T13:40:14.454468","id":360,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Tickle My Keys","link":"https://ticklemykeys.com/","tags":"keyboard","message":"I've been working on something, I'm gong to combine my mechanical engineering skills with my love of great keyboards and start a custom keyboard shop for building custom keyboards for exactly what people need with an emphasis on portability.","published":true,"public":true,"date":"2024-07-24T18:02:41.181141","id":359,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Git Fork vs Git Clone (Animated) - YouTube","link":"https://www.youtube.com/watch?v=rxh6MhK6Tbs","tags":"git","message":"Damn Prime covers this so well from all angles.  Can't overstate the importance of that last step.  Look at the issues, and raise an issue if there is not one before putting in a bunch of hard work.  Make sure that the maintainers are open for your changes and no one else is already working on it.","published":true,"public":true,"date":"2024-07-24T17:59:00.696266","id":358,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Sqlite-jiff","link":"https://simonwillison.net/2024/Jul/23/sqlite-jiff/","tags":"sqlite, sql","message":"Sqlite is getting rust extensions now, and datetimes make it totally worth if if they work well and and fast, two things that don't always go together in datetime libraries","published":true,"public":true,"date":"2024-07-24T03:12:14.262110","id":357,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"There’s a TUI for that with Nick Janetakis (Changelog & Friends #53)","link":"https://changelog.com/friends/53","tags":"tui, cli, product, seo","message":"50 minutes into this episode they start a discussion on seo, and naming posts.  They give Jerod the task of googling for tmux and see how high up the ranking they find Nick, expecting a number one post, and he cant even get to Nick.\n\nThe problem?  Jerod is such a beginner he doesn't even know what to search, he starts with a long query about getting started with tmux, but all of Nick's videos are why you should use advanced features of tmux, but Jerod has yet to discover that these exist.\n\nAs experts we often come up wtih a post title for the exact thing that we are trying to teach someone how to do, but yet, they haven't discussed that they need that feature yet, they just want the getting started guide, or tell me why I should start using tmux.  Not why sessions are better than windows, and tabs suck all together.\n\nDefinitely an eye opening conversation listening to two experts sit in shock as the beginner just gets dropped big tech articles, and Nick Jani-freakin-takis doesn't even hit the query page after page.\n\nAlso hats off to Nick for keeping a 2014 machine alive, I got you beat by a few years on my 2011 free give away machine, but I stopped daily driving that two years ago, and its purely a homelab now.","published":true,"public":true,"date":"2024-07-24T02:47:39.860826","id":356,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The Verge on X: \"Stress testing a snack-proof keyboard https://t.co/AsRdv6O0e8\" / X","link":"https://x.com/verge/status/984764889754456065","tags":"keyboard","message":"This is a wild keyboard test.  This is exactly what I want to see from ticklemykeys.com.  I want to make ergomechanical boards that you can use and abuse.  I want you to not be afraid to take them with you or to eat a nutrigrain bar in the same room (cough 2015 mac).  And If something does go out, I want users to be able to repair it themsleves, key caps, switches, batteries, and microcontrollers should be replacible parts they can get at a good cost from the shop if they have paid for a board.","published":true,"public":true,"date":"2024-07-23T14:24:08.488576","id":355,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"all lt keys to hl · WaylonWalker/zmk-config-42block@ce25356","link":"https://github.com/WaylonWalker/zmk-config-42block/commit/ce25356e88eb2439182201700314133de719457e","tags":"keyboard, zmk","message":"Today I swapped out all of my keys that are used dual purpose for letters and layers to homerow layers.  This prevents goofy things happening when rolling, and prefers-tap makes it so that keys that are rolled over get hit as letters instead of as layers.  This was one of my biggest hurdles jumping into zmk,  lt as a homerow key just does not behave the same as the ht/hm behaviors with tap-preferred set.\n\n\n!!! seealso\n  See previous commit where I added the hl https://github.com/WaylonWalker/zmk-config-42block/commit/9522c859cdf024a2c2b73931c130ddc907c09ffc\n\n``` c\n        hl: homerow_layer {\n            compatible = \"zmk,behavior-hold-tap\";\n            label = \"HOMEROW_LAYER\";\n            bindings = <&mo>, <&kp>;\n\n            #binding-cells = <2>;\n            tapping-term-ms = <150>;\n            flavor = \"tap-preferred\";\n        };\n```","published":true,"public":true,"date":"2024-07-22T13:42:46.461340","id":354,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"/Tips-for-Being-Happier--Healthier--More-Productive","link":"https://podcasters.spotify.com/pod/show/garyvee/episodes/Tips-for-Being-Happier--Healthier--More-Productive-e2m4184","tags":"catalytic ","message":"Deep breath, the deepest you can take in\n\nSmile, a real fukin smile not some pansy bullshit\n\nSay I'm not going to give a shit about this when I'm 90\n\n","published":true,"public":true,"date":"2024-07-20T18:02:22.103371","id":353,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Can't use System update - invalid signature when validating ASN.1 encoded signature · Issue #1316 · ublue-os/bazzite · GitHub","link":"https://github.com/ublue-os/bazzite/issues/1316","tags":"bazzite","message":"This fixed my bazzite update issues after the signing key was rotated recently.  This team is killing it with such a great user experience.\n\n``` bash\ncurl -sL https://fix.universal-blue.org/ | sudo bash \n```","published":true,"public":true,"date":"2024-07-18T02:00:01.676440","id":352,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Update Kconfig.shield rec by bravekarma · WaylonWalker/zmk-config-ninepad@8b76b76","link":"https://github.com/WaylonWalker/zmk-config-ninepad/commit/8b76b76e2f094453aaf7ffe51bb405ce3a25a611","tags":"keyboard","message":"This one space killed my whole config and held me back from learning zmk.","published":true,"public":true,"date":"2024-07-17T00:08:56.204923","id":351,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DragonFruit","link":"https://kbd.news/DragonFruit-2178.html","tags":"keyboard","message":"The trackball spinner looks sick here.  I can imagine using that spinner like a scroll wheel.","published":true,"public":true,"date":"2024-07-15T17:14:20.014632","id":350,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"NEC M-System","link":"https://kbd.news/NEC-M-System-1729.html","tags":"keyboards","message":"They had split ergo boards back in 1983??? WTF who the heck keeps these row stagger boards going.  This board looks like endgame material, If this thing was more normal, it'd kill a whole section of the ergo mechanical keyboard industry for good reason.","published":true,"public":true,"date":"2024-07-15T17:11:38.379134","id":349,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Red Herring - Solenoid Edition sound test - YouTube","link":"https://www.youtube.com/watch?v=n52y4MOQAjw&t=40s","tags":"keyboard","message":"This keyboard layout looks weird af the mix of column staggar and row stagger is wild.  Not sure if its genius or an abomination.\n\nThat solenoid though is absolutely wild though,  I kinda want one TBH.\n\nand the clear plate with the diodes laid out on it in a herringbone pattern is a very nice touch.","published":true,"public":true,"date":"2024-07-15T17:09:18.979965","id":348,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Text cursor bug in my Chrome browser that causes the blinking cursor to appear everywhere I click - Stack Overflow","link":"https://stackoverflow.com/questions/75886276/text-cursor-bug-in-my-chrome-browser-that-causes-the-blinking-cursor-to-appear-e","tags":"webdev, chrome","message":"today I learned that there is an accessibility feature in chrome that allows you to place a text cursor anywhere on the page.  I had accidentally done this and it drove me mad that it was there.","published":true,"public":true,"date":"2024-07-12T14:16:32.257793","id":347,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"python is simultaneously at the top and the bottom of the tier list","link":"https://www.youtube.com/watch?t=326&v=2fopl7-2wT0","tags":"python","message":"Hard to argue this take, happy to see that its at the top.  With it being such an old language its amazing that it still holds this position, and not surprising that it has warts, and thing that have turn users off from wanting anything to do with it.\n\ntimestamped in the link","published":true,"public":true,"date":"2024-07-11T13:41:04.212931","id":346,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Command Line Interface Guidelines","link":"https://clig.dev/","tags":"cli, dev","message":"This is a pretty sick set of guidelines to help you write better cli programs, I'm definitely coming back to reading this one more in depth later.","published":true,"public":true,"date":"2024-07-11T12:57:45.859703","id":345,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Render-blocking on purpose","link":"https://fullystacked.net/render-blocking-on-purpose/","tags":"html, webdev","message":"You can explicitly make a script render blocking, nothing will be rendered until this js is ready.\n\n\n``` html\n<script blocking=\"render\" \n        src=\"important.js\" \n        defer></script>\n```","published":true,"public":true,"date":"2024-07-11T12:55:28.827574","id":344,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Remove Background Web - a Hugging Face Space by Xenova","link":"https://huggingface.co/spaces/Xenova/remove-background-web","tags":"","message":"I've long been a user of remove.bg, and I just discovered that you can run this transformer right within your browser with no api limits.","published":true,"public":true,"date":"2024-07-11T12:50:22.899193","id":343,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"FastHX","link":"https://volfpeter.github.io/fasthx/","tags":"webdev, fastapi, htmx","message":"Very interesting approach to htmx and fast api.  It uses separate decorators for returning template partials and json that can be stacked to include both options on a single route.  The templates are explicitly set in the decorator.  Separate decorators are used for full page and partial pages.  I don't see an example of full and partial pages being combined.  I think the demo app must be behaving in a spa like fashion where it does not get all of the data when it calls index and index will ask for user-list.\n\nDefinitely going to keep my eye on this project and ponder on it.\n\n\n``` python\nfrom fastapi import FastAPI\nfrom fastapi.templating import Jinja2Templates\nfrom fasthx import Jinja\nfrom pydantic import BaseModel\n\n# Pydantic model of the data the example API is using.\nclass User(BaseModel):\n    first_name: str\n    last_name: str\n\n# Create the app.\napp = FastAPI()\n\n# Create a FastAPI Jinja2Templates instance and use it to create a\n# FastHX Jinja instance that will serve as your decorator.\njinja = Jinja(Jinja2Templates(\"templates\"))\n\n@app.get(\"/\")\n@jinja.page(\"index.html\")\ndef index() -> None:\n    ...\n\n@app.get(\"/user-list\")\n@jinja.hx(\"user-list.html\")\nasync def htmx_or_data() -> list[User]:\n    return [\n        User(first_name=\"John\", last_name=\"Lennon\"),\n        User(first_name=\"Paul\", last_name=\"McCartney\"),\n        User(first_name=\"George\", last_name=\"Harrison\"),\n        User(first_name=\"Ringo\", last_name=\"Starr\"),\n    ]\n\n@app.get(\"/admin-list\")\n@jinja.hx(\"user-list.html\", no_data=True)\ndef htmx_only() -> list[User]:\n    return [User(first_name=\"Billy\", last_name=\"Shears\")]\n\n```","published":true,"public":true,"date":"2024-07-10T12:53:15.955055","id":342,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"FastHX","link":"https://volfpeter.github.io/fasthx/","tags":"webdev, fastapi, htmx","message":"Very interesting approach to htmx and fast api.  It uses separate decorators for returning template partials and json that can be stacked to include both options on a single route.  The templates are explicitly set in the decorator.  Separate decorators are used for full page and partial pages.  I don't see an example of full and partial pages being combined.  I think the demo app must be behaving in a spa like fashion where it does not get all of the data when it calls index and index will ask for user-list.\n\nDefinitely going to keep my eye on this project and ponder on it.\n\n\n``` python\nfrom fastapi import FastAPI\nfrom fastapi.templating import Jinja2Templates\nfrom fasthx import Jinja\nfrom pydantic import BaseModel\n\n# Pydantic model of the data the example API is using.\nclass User(BaseModel):\n    first_name: str\n    last_name: str\n\n# Create the app.\napp = FastAPI()\n\n# Create a FastAPI Jinja2Templates instance and use it to create a\n# FastHX Jinja instance that will serve as your decorator.\njinja = Jinja(Jinja2Templates(\"templates\"))\n\n@app.get(\"/\")\n@jinja.page(\"index.html\")\ndef index() -> None:\n    ...\n\n@app.get(\"/user-list\")\n@jinja.hx(\"user-list.html\")\nasync def htmx_or_data() -> list[User]:\n    return [\n        User(first_name=\"John\", last_name=\"Lennon\"),\n        User(first_name=\"Paul\", last_name=\"McCartney\"),\n        User(first_name=\"George\", last_name=\"Harrison\"),\n        User(first_name=\"Ringo\", last_name=\"Starr\"),\n    ]\n\n@app.get(\"/admin-list\")\n@jinja.hx(\"user-list.html\", no_data=True)\ndef htmx_only() -> list[User]:\n    return [User(first_name=\"Billy\", last_name=\"Shears\")]\n\n```","published":true,"public":true,"date":"2024-07-10T12:53:15.914544","id":341,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Pinout and Schematic - nice!nano","link":"https://nicekeyboards.com/docs/nice-nano/pinout-schematic/","tags":"keyboard","message":"Pinout for nice!nano boards.   Note that P0.15 means gpio port 0 pin 15, they can be referenced in zmk when setting column and row pins.\n\n\n``` c\n#include <dt-bindings/zmk/matrix_transform.h>\n\n/ {\n    chosen {\n        zmk,kscan = &default_kscan;\n        zmk,matrix_transform = &default_transform;\n        /delete-property/ zephyr,console;\n        /delete-property/ zephyr,shell-uart;\n    };\n\n    default_kscan: kscan {\n        compatible = \"zmk,kscan-gpio-matrix\";\n        label = \"default_kscan\";\n        diode-direction = \"col2row\";\n\n        col-gpios\n            = <&gpio0 31 GPIO_ACTIVE_HIGH>\n            , <&gpio0 29 GPIO_ACTIVE_HIGH>\n            , <&gpio0 2 GPIO_ACTIVE_HIGH>\n            ;\n\n        row-gpios\n            = <&gpio1 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>\n            , <&gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>\n            , <&gpio1 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>\n            ;\n    };\n\n    default_transform: matrix_transform {\n        compatible = \"zmk,matrix-transform\";\n        columns = <3>;\n        rows = <3>;\n        map = <\n            RC(0,0) RC(0,1) RC(0,2)\n            RC(1,0) RC(1,1) RC(1,2)\n            RC(2,0) RC(2,1) RC(2,2)\n        >;\n    };\n};\n\n\n```","published":true,"public":true,"date":"2024-07-10T12:40:26.699318","id":340,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"linux - What is stored in /dev/pts files and can we open them? - Unix & Linux Stack Exchange","link":"https://unix.stackexchange.com/questions/93531/what-is-stored-in-dev-pts-files-and-can-we-open-them","tags":"linux","message":"today I learned that /dev/pts is a pseudo-tty.  It amazes me how much linux is still built around things like hardware terminals.","published":true,"public":true,"date":"2024-07-07T01:08:38.733971","id":339,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"svenstaro/miniserve: 🌟 For when you really just want to serve some files over HTTP right now!","link":"https://github.com/svenstaro/miniserve","tags":"http","message":"miniserve is a sweet http server, replacement for `python -m http.server`.  It's fast, runs off a small binary, but why would I want to use it over something that already exists on most machines, because it includes a bunch of features like qr codes, pretty themes, and uploads.  I've used `python -m http.server` many times to transfer files from one machine to another in a pinch, like at a family members house.  But what if they have an android, windows, or something not easy to get a python repl running on, you can run miniserve and upload from their device rather than hosting from their device.","published":true,"public":true,"date":"2024-07-06T21:55:59.107799","id":338,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"pacman/Tips and tricks - ArchWiki","link":"https://wiki.archlinux.org/title/pacman/Tips_and_tricks","tags":"linux, arch","message":"The arch wiki is always full of good content, and pacman tips and tricks does not disappoint.  Today I discovered this command to remove orphaned dependencies on my system.\n\n``` bash\npacman -Qdtq | pacman -Rns -\n```","published":true,"public":true,"date":"2024-07-06T16:52:09.944862","id":337,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Inside 22,734 Steam games | daniel.haxx.se","link":"https://daniel.haxx.se/blog/2024/06/20/inside-22734-steam-games/","tags":"linux","message":"Interesting to see that curl is used in so many places.  I often think of things like games being so windows centric and curl being so linux centric I don't even think of these things crossing paths as much as they do.","published":true,"public":true,"date":"2024-07-06T16:48:21.767406","id":336,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"wcurl is here | daniel.haxx.se","link":"https://daniel.haxx.se/blog/2024/07/03/wcurl-is-here/","tags":"linux","message":"interesting, seems like such a simple way to completely remove the need of a whole other cli.  No offense to anyone working on wget, but generally I use it out of lazyness or something wierd is happening and I am looking for a second opinion.  Cool to know that wcurl exists and will start shipping with curl.","published":true,"public":true,"date":"2024-07-06T16:46:19.647509","id":335,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Email Address Obfuscation · Cloudflare Web Application Firewall (WAF) docs","link":"https://developers.cloudflare.com/waf/tools/scrape-shield/email-address-obfuscation/","tags":"blogging","message":"I recently started seeing email-decode.min.js show up on my blog posts, and I wondered what the heck ?  I didn't put it there.  Turns out that cloudflare put it there from pages to safely serve email addresses for me.\n\ninspecting the page without js running we can see that the mailto email is swapped out for _email protected_.  Neat feature.\n\n``` bash\n❯ curl --silent https://waylonwalker.com/diskcache-as-debounce/ | grep email\n<a class=\"decoration-pink-500 hover:decoration-pink-300 hover:text-pink-100\" href=\"/cdn-cgi/l/email-protection#a4ccc1c8c8cbe4d3c5ddc8cbcad3c5c8cfc1d68ac7cbc9\" rel=\"me\"><span class=\"__cf_email__\" data-cfemail=\"630b060f0f0c2314021a0f0c0d14020f0806114d000c0e\">[email&#160;protected]</span></a>\n<script data-cfasync=\"false\" src=\"/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js\"></script></body>\n```\n\nLooking deeper into this article it looks like this feature comes from Scrape Shield and enabling Email Address Obfuscation.","published":true,"public":true,"date":"2024-07-04T15:18:11.164778","id":334,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Background Tasks - FastAPI","link":"https://fastapi.tiangolo.com/tutorial/background-tasks/","tags":"fastapi, webdev","message":"fastapi comes with a concept of background tasks which are functions that can be ran in the background after a function has been ran.  This is handy for longer running functions that may take some time and you want to have fast response times.\n\nHere is an example from the docs\n\n``` python\nfrom fastapi import BackgroundTasks, FastAPI\n\napp = FastAPI()\n\n\ndef write_notification(email: str, message=\"\"):\n    with open(\"log.txt\", mode=\"w\") as email_file:\n        content = f\"notification for {email}: {message}\"\n        email_file.write(content)\n\n\n@app.post(\"/send-notification/{email}\")\nasync def send_notification(email: str, background_tasks: BackgroundTasks):\n    background_tasks.add_task(write_notification, email, message=\"some notification\")\n    return {\"message\": \"Notification sent in the background\"}\n```","published":true,"public":true,"date":"2024-07-03T16:17:45.911767","id":333,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"markdown-it-pyrs · PyPI","link":"https://pypi.org/project/markdown-it-pyrs/","tags":"python","message":"markdown it py running in rust claims to be 20x faster.  I'll definitely look into this if markdown it py is ever a bottleneck in my performance.  At first glance it appears that plugins are written in rust not python, and there is no admonition plugin, so I'll keep my eye on it for now, but I can't use it.","published":true,"public":true,"date":"2024-07-03T13:56:30.911967","id":332,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DiskCache API Reference — DiskCache 5.6.1 documentation","link":"https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.peekitem","tags":"python","message":"diskcache has a peekitem method that allows you to lookup the expire_time of a cached item without changing it.  I recently used this to implement debounce for fastapi background tasks with multiple workers running.  since all the workers I care about are on the same machine, but running in different processes diskcache was a great option.  All workers have access to the same disk, but not the same variables in memory.","published":true,"public":true,"date":"2024-07-03T13:35:12.675362","id":331,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(416) Kustomize: The Best Way to Manage Your Kubernetes Configs - YouTube","link":"https://www.youtube.com/watch?v=spCdNeNCuFU&t=247s","tags":"k8s, kubernetes","message":"Great intro into kustomize.  This helped me get started with kustomize.","published":true,"public":true,"date":"2024-07-03T13:31:47.540169","id":330,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Alternatives · joric/nrfmicro Wiki","link":"https://github.com/joric/nrfmicro/wiki/Alternatives","tags":"keeb","message":"Huge list of micro controllers tried and used in keeb builds.","published":true,"public":true,"date":"2024-07-01T14:48:16.488197","id":329,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Waylon Walker - handwired macropads on X: \"First bit of hand written gcode in 12 years let's go! https://t.co/BeTXnHE3uJ\" / X","link":"https://x.com/_WaylonWalker/status/1807594004453667134","tags":"3d, printing, gcode","message":"Not gonna lie, kinda pumped about this one.  I manually did one, jotted down the coordinates, opened the gcode in vim, added markers between setup/teardown and print. then added the wipe, the copy pasted the print+wipe section a bunch of times.\n\nMy printer tends to run a bit better on single prints than printing a dozen at once as it has less issues with retract start and stop.","published":true,"public":true,"date":"2024-07-01T02:02:31.367541","id":328,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Find And Replace one eyed kirby","link":"https://www.youtube.com/shorts/v2a6Nv7RSd0","tags":"vim, regex","message":"another great use and demo of the one eyed fighting kirby","published":true,"public":true,"date":"2024-06-30T17:30:38.916054","id":327,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"PolyFill Vulnerability is WILD - YouTube","link":"https://www.youtube.com/watch?si=6NK4iCu1b1rCDo7a&t=555&v=mmlHQyMOK7Y&feature=youtu.be","tags":"infra, dev, open source","message":"Damn, supply chain vector attacks are wild. Random guy in Primes stream was getting $40k offers to buy their open source project while in university and they have never made anything from it.  What a social engineering attack this is.  It would be so easy to make it look like a good deal and that the package was going to a good new owner who has real resources to maintain it.","published":true,"public":true,"date":"2024-06-28T19:48:03.214634","id":326,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Found: OverlayKey X – Thomas Baart's Microblog","link":"https://micro.thomasbaart.nl/2024/06/12/overlaykey-x/","tags":"keeb","message":"This is almost exactly what I have been thinking about building for quite awhile.  I am going to give it a good try with a few $$ in filiment some cheap switches a microcontroller and go pretty bare bones, maybe open wiring on the bottom.\n","published":true,"public":true,"date":"2024-06-28T18:35:52.288643","id":325,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Queueing – An interactive study of queueing strategies – Encore Blog","link":"https://encore.dev/blog/queueing","tags":"infra","message":"Absolutely sick post.   This is top tier animated blog posts.  This posts demos how different queuing systems work with fantastic interactive demos.","published":true,"public":true,"date":"2024-06-28T16:19:37.480135","id":324,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(409) One Script Tag Just Pwn'd Over 100,000 Websites - YouTube","link":"https://www.youtube.com/watch?v=ILvNG1STUZU&t=286s","tags":"webdev","message":"Supply chain attacks are so big these days engineers definitely need to take these into consideration.  It's wild that such a simple attack vector hit some really big applications.  This particular vector is so easy to avoid. You are already hosting web content, just curl the file and self host the script, then you own it.  That eliminates this attack vector all together, but doesn't completely remove supply chain attacks, the js file can still hit external apis internally.\n\n> What I see has happened in this case is that the owner of the domain polyfill.io changed. so anyone who directly linked to them got a malware injected script used.  \n\nI can only imagine the number of applicatons that are not even being maintained anymore getting hit by this.  TLDR, if you are taking something to production, where you are goind to deploy it and let it run, host the js yourself.  these cdns are great for prototyping, but tread with caution.","published":true,"public":true,"date":"2024-06-28T16:08:20.719211","id":323,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(409) Don't Cheat Yourself - YouTube","link":"https://www.youtube.com/shorts/NMQuGlQ0XHQ","tags":"","message":"Well spoken prime. Co-pilot is a fantastic tool for templating, boilerplate, or just getting something done that is just outside your knowledge or care to know.  Bit if you really want to learn something, you need to use your hands.  Reading the solution only gives you the happy path.  This does not give you that path that most people would take, and completely misses debugging.  If you are very new and learning it's unlikely that you can write large blocks of code without running a test or a script to try it.  Taking these shortcuts will hinder your ability to do it yourself.\n\nIf I were to devils advocate here, copilot is still not the greatest at the big picture, you still have to drive, and tell it I want to use python, fastapi, I want to load settings from .env.  taking these shortcuts can help you move quick and get the big picture.  This is especially helpful for someone who might know one language or framework and is trying a different one, but at some point you need to do the work and learn if you are going to be effective.","published":true,"public":true,"date":"2024-06-28T16:01:00.721671","id":322,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"PyAnnotate: Auto-generate PEP-484 annotations ","link":"https://github.com/dropbox/pyannotate","tags":"python","message":"pyannotate is a tool that uses runtime types to suggest type annotations to use.  Test runners such as pytest can be used to generate the types.","published":true,"public":true,"date":"2024-06-26T21:37:14.566801","id":321,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"qmk_firmware/docs/features/programmable_button.md at master · qmk/qmk_firmware","link":"https://github.com/qmk/qmk_firmware/blob/master/docs/features/programmable_button.md","tags":"qmk, keeb","message":"Interesting, linux supports 32 programmable buttons, special buttons that do nothing that hotkey programs like xbindkeys can pick up and run things, seems like it would be very intersting to use on a macro pad.  You could easily do dynamic and complex tasks without clashing that keybinding with something else.\n\nI'm going to look into this for my next obs setup.  No matter what I try to do with the hyper key it always tends to do odd things depending on the application I am in.  typically its tmux, and it starts trying to do something I don't want it to.","published":true,"public":true,"date":"2024-06-26T01:19:41.775508","id":320,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"tusharsadhwani/yen: Create virtual environments for any Python version, without needing Python installed.","link":"https://github.com/tusharsadhwani/yen","tags":"python","message":"> Create virtual environments for any Python version, without needing Python installed.","published":true,"public":true,"date":"2024-06-26T01:13:09.365230","id":319,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Where DOESN’T curl run with curl BDFL Daniel Stenberg (Changelog & Friends #49)","link":"https://changelog.com/friends/49","tags":"pod","message":"Love how Daniel just brushed off the number of netflix tv installs as small beans for curl installs.  overall great episode on open source, owning a major component to technology with such a small team.","published":true,"public":true,"date":"2024-06-25T23:39:38.980449","id":318,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Keyboard Mounting Styles — Keyboard University","link":"https://www.keyboard.university/200-courses/keyboard-mounting-styles-4lpp7","tags":"keyboards","message":"Great keyboard design guide for all the different mounting options that are normal for keyboards with pros and cons of each.","published":true,"public":true,"date":"2024-06-24T17:19:17.865050","id":317,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Welcome to RSS Club - daverupert.com","link":"https://daverupert.com/2018/01/welcome-to-rss-club/","tags":"blogging","message":"Super cool idea, kinda breaking the rules by talking about it here, but Its a cool idea to throw out posts to the core audience.  Apparently its been around for quite while Dave started in 2018.","published":true,"public":true,"date":"2024-06-24T17:12:16.655245","id":316,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Releases · stackrox/kube-linter","link":"https://github.com/stackrox/kube-linter","tags":"k8s, kubernetes","message":"A linter for linting kubernetes manifests and help charts.","published":true,"public":true,"date":"2024-06-24T17:09:37.098583","id":315,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Keycodes Overview | QMK Firmware","link":"https://docs.qmk.fm/keycodes","tags":"keyboard","message":"Full reference to all of the qmk keycode list. Handy reference to refer to all of the keycodes that qmk has.","published":true,"public":true,"date":"2024-06-24T17:06:23.174974","id":314,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(405) How to Build a Handwired Keyboard - YouTube","link":"https://www.youtube.com/watch?v=hjml-K-pV4E","tags":"keyboard","message":"Fantastic guide to building handwried keyboards.  I used this guide to build my first hand-wired macro pad.","published":true,"public":true,"date":"2024-06-24T17:03:52.367328","id":313,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Adam Wathan, Creator of TailwindCSS - YouTube","link":"https://www.youtube.com/watch?v=FhJfm-kzopc&t=2578s","tags":"webdev","message":"Two inspirational people in one podcast, its cool to see how adam thinks about code, css, webdev, and building businesses.","published":true,"public":true,"date":"2024-06-16T22:09:17.387839","id":312,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Episode #323 Best practices for Docker in production - [Talk Python To Me Podcast]","link":"https://talkpython.fm/episodes/show/323/best-practices-for-docker-in-production","tags":"python, docker","message":"Great listen for anyone interested in productionizing python code with docker.  Itamar brings up some \n\n\nDon't trust base images for security, upgrade your packages.  Vulnerabilties become published and solved giving the bad guys istructions how to wreck your day and these fixes wont come to your docker application for up to two weeks due to image build tatency.\n\nFor job based containers pre-compile your pyc for faster startup.\n\nAlpine linux is probably not what you want for python.  Many packages such as postgres ship pre-copiled binaries that work for most linux distributions wich use glibc, but alpine uses musl so the binaries will be incompatable requiring you to need to install a bunch of build dependencies.","published":true,"public":true,"date":"2024-06-16T00:55:12.732316","id":311,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(394) Why You Should Build Your Homelab Now - YouTube","link":"https://www.youtube.com/watch?v=tmw7oYG3vMU","tags":"homelab","message":"Homelabbers have been some of the best co-workers I have ever had.  Typically have a get shit done, If there's a way I will find it kind of mentality.  If you are struggling to get a job in tech right now its tough.  Starting a homelab on a pc you pull out of the trash is a good way to get some experience that you can talk about in interview questions.\n\nLinked video has some great points!","published":true,"public":true,"date":"2024-06-14T22:58:22.967307","id":310,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"podman requries qemu-system on ubuntu","link":"https://askubuntu.com/questions/1490805/how-do-i-install-qemu-on-ubuntu-23-10","tags":"linux, podman, container","message":"podman requires qemu-system on \n\n\n``` bash\n❯ podman machine init\nLooking up Podman Machine image at quay.io/podman/machine-os:5.1 to create VM\nExtracting compressed file: podman-machine-default-amd64.qcow2: done\nError: exec: \"qemu-img\": executable file not found in $PATH\n```\n\nThe fix to this for me was to install qemu-system before podman machine init.\n\n\n``` bash\nsudo apt update\n\nsudo apt install qemu-system\n```\n","published":true,"public":true,"date":"2024-06-12T19:29:18.660676","id":309,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Customize and apply backgrounds fast | SVG Backgrounds","link":"https://www.svgbackgrounds.com/","tags":"webdev, css","message":"svgbackgrounds is a really awesome resource for svg things recently featured on [https://shoptalkshow.com/618/](https://shoptalkshow.com/618/)","published":true,"public":true,"date":"2024-06-12T16:09:25.362371","id":308,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"darrenburns/posting: Test your HTTP API using a powerful and modern terminal user interface","link":"https://github.com/darrenburns/posting","tags":"","message":"Currently Posting is a super early postman like tui (terminal user interface).  It looks so good.  Darren is really getting into a groove, and textual is getting to a place that is allowing him to really make these beautiful.\n\nI am so impressed with the progress that he has made so early, it looks so close to postman in the freaking terminal, and the ui is so good.  He already has think like jump that give you a way to around the ui like easymotion plugins.  Theres themes and a command line, oh man its so good. star it.","published":true,"public":true,"date":"2024-06-12T14:30:36.521306","id":307,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Blogmarks that use markdown","link":"https://simonwillison.net/2024/Apr/25/blogmarks-that-use-markdown/","tags":"blogging, web","message":"Oh I kinda like the name blogmark, as opposed to thoughts like I have chose for the same thing.  Aparantly Simon beat me to the punch by 20 years on this one.","published":true,"public":true,"date":"2024-06-10T02:47:52.080133","id":306,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A Link Blog in the Year 2024","link":"https://simonwillison.net/2024/Jun/9/a-link-blog-in-the-year-2024/","tags":"blogging, web","message":"THIS! is the same reasons that I built [thoughts](https://thoughts.waylonwalker.com){.hoverlink}.  Simon has bee a big inspiration along the way.  He defintely changed the format of my posts as I watched him build out his quote posts.\n\n> Link blogging is a pleasantly low-pressure way of writing online. Found something interesting? Post a link to it, with a sentence or two about why it's worth checking out.\n\nDitto! just make a post.","published":true,"public":true,"date":"2024-06-10T02:44:35.326591","id":305,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A Link Blog in the Year 2024 | Kellan Elliott-McCrea: Blog","link":"https://laughingmeme.org//2024/06/08/a-link-blog-in-2024.html","tags":"blogging, web","message":"Kellan brings some interesting thoughts on where the internet is headed in 2024.  Interestingly I see myself headed in a similar direction.  Feeling like I know just enough to say fuck it and build my own platform for me to me me, from [thoughts](https://thoughts.waylonwalker.com){.hoverlink} where I link and make thoughts on posts like this, to [reader](https://reader.waylonwalker.com){.hoverlink} which is my rss reader replacement that I wanted in 2013 when it was [killedbygoogle](https://killedbygoogle.com/){.hoverlink}\n\n>  And particular with the collapse of the social spaces many of us grew up with, I feel called back to earlier forms of the Internet, like blogs, and in particular, starting a link blog.\n\nAi has really had quite the two sided effect since chatgpt launched and set the world ablaze.  Suddenly you can get any answer you want as a custom fit blog post for free without effort, thus killing the traffic to any of these sites.","published":true,"public":true,"date":"2024-06-10T02:40:20.349707","id":304,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Configure DNS over TLS (DoT) Using Unbound DNS in OPNsense","link":"https://homenetworkguy.com/how-to/configure-dns-over-tls-unbound-opnsense/","tags":"opnsense","message":"Setting up DNS overTLS in opnsense has made my dns just a bit more secure and reliable.  I recently had an outage of half the internet within my house.  This also hit some of my friends and not some.  It did not hit my mobile network.  What seems to have happened is a dns issue with my isp not resolving some domains.  This setup corrected my issue and I was back online more securely.\n\n!!! Note\n   I did try to setup the family resolver and found it was blocking some sites I am ok with.  I decided to drop back to the vanilla resolver and let other services within opnsense control blocking where I can caontrol the whitelist myself.","published":true,"public":true,"date":"2024-06-09T15:40:11.674772","id":303,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"argoproj/argo-events: Event-driven Automation Framework for Kubernetes","link":"https://github.com/argoproj/argo-events?tab=readme-ov-file","tags":"k8s, kubernetes","message":"Argo events is an event driven automation framework for kubernetes that can create kubernetes objects among other things based on events.  I've been using native kubernetes cronjobs to kick off jobs based on a cron trigger.  \n\nFor instance I am running reader.waylonwalker.com every hour, to rebuild the site and re-deploy it.  It takes about two minutes to fetch every rss feed, so this is a nice application of a job compared to a web server fetching the feeds live.  Now my posts may be up to an hour stale but they load fast.\n\nArgo events takes event drien architecture to the next level allowing to be triggered by many more things, and do many more things than creating a cron job.  I'm definitely thinking about dropping this in my homelab.","published":true,"public":true,"date":"2024-06-09T14:30:26.367029","id":302,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher","link":"https://github.com/catppuccin/ulauncher","tags":"linux","message":"I am using this theme for Ulauncher in arch and it looks fantastic!  One line install (read it first).\n\n``` bash\npython3 <(curl https://raw.githubusercontent.com/catppuccin/ulauncher/main/install.py -fsSL)\n```","published":true,"public":true,"date":"2024-06-07T03:59:30.563958","id":301,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ulauncher — Application launcher for Linux 🐧","link":"https://ulauncher.io/","tags":"linux","message":"Just discovered this really cool launcher from the DHH distro omakub.  [github.com/omakub](https://github.com/basecamp/omakub){.hoverlink}.\n\nUlauncher comes out of the box looking good, supports extensions, and shortcuts like I have a lot of mac launchers have.  I installed it plus a theme and in no time It was looking good and launching applications.\n\nIn the past I have leaned in on rofi for task launching, it is good.  I just felt it was harder to configure to get right or look good.","published":true,"public":true,"date":"2024-06-07T03:58:16.708602","id":300,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Steam Deck dock","link":"https://kbd.news/Steam-Deck-dock-2291.html","tags":"cyberdeck, keeb","message":"This is a sick steam deck dock!   With a corne built in laptop style.","published":true,"public":true,"date":"2024-06-06T17:25:14.958846","id":299,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"basecamp/omakub: Opinionated Ubuntu Setup","link":"https://github.com/basecamp/omakub","tags":"linux","message":"This is DHH's linux startup script.  Call it a distro if you want, but he doesn't.  It's made to take a vanilla ubuntu install and configure everything the way he likes it.  There's a number of great nuggets in here to pick up on.\n\n> No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omakub is an opinionated take on what Linux can be at its best.\n\nCheck it out and give it a ⭐ [basecamp/omakub](https://github.com/basecamp/omakub){.hoverlink}.","published":true,"public":true,"date":"2024-06-06T16:20:19.363036","id":298,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"From the Circle to Epicycles (Part 1) - An animated introduction to Fourier Series | andreinc","link":"https://www.andreinc.net/2024/04/24/from-the-circle-to-epicycles","tags":"","message":"This is a really cool animated visual representation of how sine waves work, how they relate to circles, pi, rad, and how to add up a series of waves to make square and sawtooth waves.","published":true,"public":true,"date":"2024-06-06T14:02:50.408542","id":297,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Darren Burns 🌱 on X: \"Here's an early clip of my new (work in progress) app: Posting. It's an HTTP client (like Postman, Insomnia, etc) but it runs entirely in the terminal. Keyboard-centric, snappy, and works over SSH. It's written in Python using the Textual framework. https://t.co/7yatztk0rT https://t.co/Wb64aiw7fM\" / X","link":"https://x.com/_darrenburns/status/1797763563270095006","tags":"cli, tui, api","message":"This looks like a sweet tui postman clone.  Darren is really rolling with these tui's.  Cant wait to see where this one goes.","published":true,"public":true,"date":"2024-06-04T02:04:35.562430","id":296,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Force Dark Mode on Every Website in Google Chrome","link":"https://www.howtogeek.com/446198/how-to-force-dark-mode-on-every-website-in-google-chrome/","tags":"linux","message":"Sometimes I struggle to get my os to report dark mode to chrome, luckily there is a way to force chrome to always use dark mode.\n\nI've never really gotten into dark reader and extensions like this. For some reason they all make websites look really weird to me and I don't really care for it.  What I want is websites designed to be in dark/light to always go dark, if the designer didn't design dark just let it be light.","published":true,"public":true,"date":"2024-06-03T18:52:25.959967","id":295,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"xxHash - Extremely fast non-cryptographic hash algorithm","link":"https://xxhash.com/","tags":"python","message":"> xxHash is an extremely fast non-cryptographic hash algorithm, working at RAM speed limit. It is proposed in four flavors (XXH32, XXH64, XXH3_64bits and XXH3_128bits). The latest variant, XXH3, offers improved performance across the board, especially on small data.","published":true,"public":true,"date":"2024-06-03T13:34:30.993219","id":293,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"xxhash · PyPI","link":"https://pypi.org/project/xxhash/","tags":"python","message":"I hit an issue with markata where even though a bunch of articles were cached, the site build was still slow because I was hitting hashlib.sha256 so hard for cache keys.  I was shocked when this popped up in my profiler as a significant portion of the time spent.  I swapped out for xxhash and that issue completely went away.","published":true,"public":true,"date":"2024-06-03T13:34:05.938516","id":292,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Replicate — Run AI with an API","link":"https://replicate.com/","tags":"llm, ai","message":"This is so easy compared to self hosting stable diffusion yourself.  It even has a nice api that you can hit with curl or python.  The pricing seems competitive as well.   Bookmarking this to try next time I need something like it.","published":true,"public":true,"date":"2024-06-01T00:59:49.610688","id":291,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Deliver Code Every Day | Jake Worth","link":"https://www.jakeworth.com/posts/how-to-deliver-code-every-day/","tags":"webdev, shipping","message":"Great set of tips here!\n\n> No waiting. No “waiting until tomorrow” or “It’s Friday, let’s wait until Monday” to deploy. If your deploys are so slow that deploying an hour before the end of the day is a risk, that’s a separate problem. If you’re afraid of a Friday deploy, your system is too brittle, or you don’t have foolproof rollback procedures, or you don’t have people you trust on call to resolve it. Each of these is a problem that you can fix.\n\nThis one I find interesting  I think there are some industries where customers come in large waves over the weekend, and a weekend bug can not only ruin someones day off, take longer to fix, but also cost a lot of money.\n\nNot deploying on Friday is totally what that team should be doing.\n\nMost of us are not that team.  Most of us work on small teams supporting some sort of product that Should be able to be tested and rolled back.  I completely agree with Jake here, if your not willing to deploy on Friday you are not confident in your product.   You need to work on better testing, rollback strategies, and feature flagging is what you need.\n\nI've also been on teams where we don't deploy in the middle of the day or right before we leave for vacation because we are early, our customers are important to us, and we accept that we have not hit our marks yet on the ability to swiftly recover from some downtime so risk is high.","published":true,"public":true,"date":"2024-06-01T00:48:21.580477","id":290,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Be Fast | Jake Worth","link":"https://www.jakeworth.com/posts/be-fast/","tags":"catalyst","message":"Be Fast, Practice, Hone your craft.  There's a lot to be said here about honing your craft for editing text, picking up a few extra WPM, learning vim shortcuts.\n\nAlso just build shit.  The more you build new and different things the more not only your text editing will just roll out, your skills to see patterns in code and architecture will flourish.\n\n> Read their bios, and the answer is always no. They loved to play, sure. They had some base talent, typically. But they also invested an absurd amount of time into that skill set.\n\nThis! is actually what turned me on to Post Malone.  I remember hearing his story in how he was just known as the guy with a guitar because he was always playing it between class and everything.","published":true,"public":true,"date":"2024-06-01T00:38:15.117147","id":289,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Zellij on X: \"POV your sysadmin rigged your terminal to show this when you ssh into production https://t.co/VTUvfk19BL\" / X","link":"https://x.com/Zellij_dev/status/1574675207935107072","tags":"meme","message":"This one is too funny.  opening a sixel image in the terminal when logging into prod.","published":true,"public":true,"date":"2024-05-30T19:38:23.222217","id":288,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Text Decoration - Tailwind CSS","link":"https://tailwindcss.com/docs/text-decoration","tags":"tailwindcss, css, webdev","message":"Tailwind calls strikethrough line-through.  This caught me off guard and took me a minute to find.\n\n> Control how text is decorated with the underline, no-underline, and line-through utilities.","published":true,"public":true,"date":"2024-05-30T18:32:45.499171","id":287,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Digital Gardening for Non-Technical Folks","link":"https://maggieappleton.com/nontechnical-gardening","tags":"digital garden","message":"Maggie is a fantastic proponent to the digital gardening movement. In this article she proposes 3 ways for someone to start their own digital garden with low friction and no code.","published":true,"public":true,"date":"2024-05-30T15:41:59.289144","id":286,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"We have a right to repair! with Kyle Wiens, Founder and CEO at iFixit (Changelog Interviews #582)","link":"https://changelog.com/podcast/582","tags":"right-to-repair","message":"This is one of my favorite changelog episodes of all time.  I had no idea all the work that has gone into the right to repair and ifixit.  They talk a lot about apple and its trend to be less repairable from unservicable air pods to serialized components within iphone.  \n\nA lot of legal talk that was far more interesting that I thought it would be.  Recently winning the right to repair case against John Deere, and creating repairability scores for devices to be placed in stores like energy guide is.","published":true,"public":true,"date":"2024-05-30T15:13:14.855995","id":285,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Try Out the Latest Linux Gnome DE With DistroBox","link":"https://linuxtldr.com/gnome-de-in-distrobox/","tags":"","message":"Get gnome running in distrobox.","published":true,"public":true,"date":"2024-05-26T01:13:05.320497","id":284,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"STLGears.com | The Free STL Gear Designer","link":"https://www.stlgears.com/generators/3dprint","tags":"3d, printing","message":"This is a pretty nice gear generator.  I printed a few gears today and it worked great so far.","published":true,"public":true,"date":"2024-05-26T00:04:56.488550","id":283,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"eraser-dev/eraser: 🧹 Cleaning up images from Kubernetes nodes","link":"https://github.com/eraser-dev/eraser?tab=readme-ov-file","tags":"kubernetes","message":"This is kinda sick, its a tool to clean up container images in a k8s cluster.","published":true,"public":true,"date":"2024-05-25T01:26:09.809232","id":282,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Distrobox","link":"https://distrobox.it/usage/distrobox-host-exec/","tags":"distrobox, containers, linux","message":"distrobox gives you `distrobox-host-exec` to run commands on the host. This is handy to get access to host level clis that you probably wouldn't want to run from the container like `podman`, `docker`, `flatpak`.\n\n\n> DESCRIPTION\n> distrobox-host-exec lets one execute command on the host, while inside of a container.\n> \n> Under the hood, distrobox-host-exec uses host-spawn a project that lets us execute commands back on the host. If the tool is not found the user will be prompted to install it.","published":true,"public":true,"date":"2024-05-22T18:13:13.369276","id":281,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Are We Anti-Cheat Yet?","link":"https://areweanticheatyet.com/","tags":"linux, gaming","message":"A comprehensive community built index of anti-cheat support for linux very similar to proton, but specific to anticheat support.","published":true,"public":true,"date":"2024-05-22T12:37:55.903457","id":280,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ublue-os/image-template: Build your own custom Universal Blue Image!","link":"https://github.com/ublue-os/image-template","tags":"","message":"ublue-os makes a github template for making your own git repo with actions that build out your own personal ublue iso.","published":true,"public":true,"date":"2024-05-22T12:36:10.383532","id":279,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ublue-os/obs-studio-portable: OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins","link":"https://github.com/ublue-os/obs-studio-portable","tags":"","message":"Distrobox is so interesting and cool, I've only recently started realizing how much it can do especially related to hardware and graphics, this is quite an example that runs obs in a distrobox.  I had no idea distrobox would let you connect to cameras and gpus so seemlessly, and give you a gui to work from. And with distrobox you can export so that it just looks like an app on your system.","published":true,"public":true,"date":"2024-05-21T01:46:59.822375","id":278,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How Ahrefs Gets a Billion Dollar-Worth Infrastructure With a 90% Discount | by Efim Mirochnik | May, 2024 | Ahrefs","link":"https://tech.ahrefs.com/how-ahrefs-gets-a-billion-dollar-worth-infrastructure-with-a-90-discount-5edd473b2399","tags":"infra","message":"2024 has been a wild year for infra with going \"back\" to on prem being made popular by [@dhh](https://twitter.com/dhh).  Well it looks like ahrefs saw right through the cloud trends an decided to ride the anti cloud train until it came back around to the station.\n\nBeing just a bit critical of the article it is impossible to get an apples to apples without actually running something of this scale and spending too much to find out.  I cant imagine raw ec2 and ebs being the cheapest route into aws.  They used no serverless tech in their article, but I digress, because I like this own your shit and build good product train.\n\n> What about People?!\n\nThis follow up does dive into the typical gut reaction that people cost a lot of money, you must account for them.  You see when you hire people who are actually good at what they do, and run lean a lot of cost goes away, you have levels of management that disappear, levels of tooling that don't need to exist, departments of IT don't need to exist.  \n\nColo's are the new hotness, and will continue to grow!\n\n---\n\nI just notices that they didn't even account for egress, support and taxes, egress costs would make  a difference.","published":true,"public":true,"date":"2024-05-16T01:38:42.391902","id":277,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Safer Bash Shebang Recipes - Just Programmer's Manual","link":"https://just.systems/man/en/safer-bash-shebang-recipes.html?highlight=pipefail#safer-bash-shebang-recipes","tags":"just, justfile","message":"When using justfiles each line is ran separately from the last, unless you specify the file to be ran by something other than just such as bash.  If you want variables to persist you need to set a shebang.\n\nAlso if you are using your script i a way that you want it to exit when it fails you need to set -e and  -o pipefail.  This is critical if you are thinking about using just for production scripts like ci/cd.  I've hit too bugs where ci passes, but no artifacts were created issues for this exact reason.\n\n``` bash\nfoo:\n  #!/usr/bin/env bash\n  set -euxo pipefail\n  hello='Yo'\n  echo \"$hello from Bash!\"\n```","published":true,"public":true,"date":"2024-05-14T22:29:49.667730","id":276,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Justfile Cheat Sheet by linux_china - Download free from Cheatography - Cheatography.com: Cheat Sheets For Every Occasion","link":"https://cheatography.com/linux-china/cheat-sheets/justfile/","tags":"cheatsheet","message":"This is a dope ass cheat sheet for justfiles.  It's filled with good examples that are short and to the point, probably all from the docs, but anyways I need to do some like this for myself.","published":true,"public":true,"date":"2024-05-14T22:17:30.552429","id":275,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"A quote from Tim Paul","link":"https://simonwillison.net/2024/May/13/tim-paul/","tags":"ai","message":"Damn this Tim Paul quote finishes hard and such a good point.  None of the stuff around llms just work.  Good ui's,  front end, back end, infrastructure, product.  All these things still need to exist, and in fact for ai to be good we need to still go hard on them otherwise everything will die in a heaping pile of [ai slop](https://simonwillison.net/2024/May/8/slop/)\n\n> I’m no developer, but I got the AI part working in about an hour.\n>\n> What took longer was the other stuff: identifying the problem, designing and building the UI, setting up the templating, routes and data architecture.\n>\n> It reminded me that, in order to capitalise on the potential of AI technologies, we need to really invest in the other stuff too, especially data infrastructure.\n>\n> It would be ironic, and a huge shame, if AI hype sucked all the investment out of those things.\n\n— [Tim Paul](https://www.timpaul.co.uk/posts/using-ai-to-generate-web-forms-from-pdfs/)","published":true,"public":true,"date":"2024-05-14T02:21:17.372101","id":274,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"PopSQL - Collaborative SQL Editor - Bring Order to SQL Chaos","link":"https://popsql.com/","tags":"","message":"PopSql looks like a very innovative product to bring collaboration to data exploration and visualization in a way you would expect from something like vscode liveshare.  This looks far more appealing than a traditional BI data tool.","published":true,"public":true,"date":"2024-05-12T19:29:58.820555","id":273,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Pricing | PopSQL","link":"https://popsql.com/pricing","tags":"","message":"interesting pricing model from popsql (pronounces Popsicle).  At a glance you pay for data retention, want the abiltiy to recall all the queries you ran within the last year, run at a higher frequency, you jump a pricing tier.","published":true,"public":true,"date":"2024-05-12T19:27:05.516230","id":272,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(345) Dax Raad - SST, Build modern full-stack applications on AWS with Ease - YouTube","link":"https://www.youtube.com/watch?v=V_2OLtsD0N8&t=4604","tags":"sst, serverless","message":"such a sick episode with dax.\n\nSST's free tier will be free as long as aws allows a free tier, their free tier literally costs them nothing.\n\nThey talked about keeping SST small, the limitations that brings, but also the number of problems that just go away when you only have 3 people building.  Lots of process disappears, everyone can trust everyone, no one needs to wait for approval, everyone is their own PM and just builds cool shit.  They don't have to worry about big costs and making payroll because they are profitable so much higher than their costs.\n\nIf they can get through phase one of just being the go platform for a very specific audience of users, and gain marketshare, the ideas of offerings on top of this are endless.","published":true,"public":true,"date":"2024-05-12T19:24:28.228316","id":271,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(342) Install Pokemon TCG Live on Steam Deck - Installation Guide - get past the white login screen - YouTube","link":"https://www.youtube.com/watch?v=zfN4hk7FelI","tags":"linux","message":"I had no idea that you could just drop an msi installer right in steam.  This worked for me, and was much easier to install pokemon tcg live in 05-2024 on ubuntu 22-04.  I added the msi to steam from my downloads, hit start, failed right away like he said it would.  changed compatability to proton experimental, and it opened right up.\n\n* Download the official installer from pokemon tcg\n* Add non steam game\n* click show all file types\n* navigate to downloaded msi\n* click gear icon > compatability > proton experimental\n* click play\n* profit","published":true,"public":true,"date":"2024-05-11T13:27:19.269366","id":270,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Fields - Pydantic","link":"https://docs.pydantic.dev/2.7/concepts/fields/#field-representation","tags":"pydantic, fastapi, webdev","message":"`exclude=True` and `repr=False` is a good pydantic combination for secret attributes such as user passwords, or hashed passwords.  exclude keeps it out of model_dumps, and repr keeps it out of the logs.\n\n``` python\nfrom pydantic import BaseModel, Field\n\n\nclass User(BaseModel):\n    name: str = Field(repr=True)  \n    age: int = Field(repr=False)\n\n\nuser = User(name='John', age=42)\nprint(user)\n#> name='John'\n```","published":true,"public":true,"date":"2024-05-09T20:28:27.691605","id":269,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hatch v1.10.0 - Hatch","link":"https://hatch.pypa.io/latest/blog/2024/05/02/hatch-v1100/","tags":"python","message":"Hatch be flyin.\n\nThis new release of hatch includes support for the new package installer `uv` which is just mind blowing fast compared to anything else we have in python right now.\n\n``` toml\n[tool.hatch.envs.default]\ninstaller = \"uv\"\n```\n\nThe other features are cool too, check them out.  I'll probably be using the test runner, but I've been waiting for the uv support since uv launched.","published":true,"public":true,"date":"2024-05-02T14:06:57.434247","id":268,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Using journalctl - The Ultimate Guide To Logging","link":"https://www.loggly.com/ultimate-guide/using-journalctl/","tags":"","message":"\n\nI had a boot issue on my sons fresh ubuntu 24.04 install and journalctl came in clutch.\n\n``` bash\njournalctl -p 3 -xb \n```\n\n* -p 3 gives me priority 3\n* -x gives me extra catalog information when available\n* -b gives me the current boot.","published":true,"public":true,"date":"2024-05-02T01:20:51.242237","id":267,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu","link":"https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/2006590","tags":"linux, ubuntu","message":"This Thread saved my son's ubuntu 24.04 install.\nHis was failing to start with the following error.\n\n``` bash\nGdm: GdmSession: no session desktop files installed, aborting...\n```\n\nhttps://twitter.com/_WaylonWalker/status/1785825677079441482\n\n\n``` bash\nsudo apt install --reinstall ubuntu-session\n```","published":true,"public":true,"date":"2024-05-02T00:54:02.210618","id":266,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Alir3z4/html2text: Convert HTML to Markdown-formatted text.","link":"https://github.com/Alir3z4/html2text","tags":"","message":"Super neat tool to convert html to markdown\n\n``` python\n>>> import html2text\n>>>\n>>> print(html2text.html2text(\"<p><strong>Zed's</strong> dead baby, <em>Zed's</em> dead.</p>\"))\n**Zed's** dead baby, _Zed's_ dead.\n```\n\nIt even plays nicely with rich.\n\n``` python\nfrom rich.markdown import Markdown\nfrom rich.console import Console\nimport html2text\nconsole = Console()\nmd = Markdown(html2text.html2text(\"<p><strong>Zed's</strong> dead baby, <em>Zed's</em> dead.</p>\"))\nconsole.print(md)\n``` ","published":true,"public":true,"date":"2024-05-01T17:50:26.950205","id":265,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I Interviewed Uncle Bob - YouTube","link":"https://www.youtube.com/watch?v=UBXXw2JSloo","tags":"programming","message":"Fantastic interview with Uncle Bob, really it was more of a 2 way conversation.  So many of Uncle Bob's takes have been taken out of context, its cool to hear some of the well actuallys, and the experience behind some of the reasoning.","published":true,"public":true,"date":"2024-05-01T02:34:03.288507","id":264,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How an empty S3 bucket can make your AWS bill explode | by Maciej Pocwierz | Apr, 2024 | Medium","link":"https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1","tags":"aws","message":"Imagine waking up to a $1,300 for running an example project!  That sounds like peanuts for a cloud bill but for an individual trying to learn that hits my monthly budget real hard.\n\nThat's what happened to Marciej, make sure you check out the full article and give them a 👏 on Medium if you have an account.\n\nThe more I see things come out about aws, the more it makes me sick, and confirm my feelings that I cannot possibly use them for a side project without some real $$ planning to come out of it.\n\n> Yes, S3 charges for unauthorized requests (4xx) as well[1]. That’s expected behavior.\n\nThey offer no DDOS protection against 4xx or 5xx requests against your bucket.  Absolutely bonkers that you have ZERO control over this.\n\n---\n\nThis response just feels absolutely gross.\n\n> I notified the AWS security team. I suggested that they restrict the unfortunate S3 bucket name to protect their customers from unexpected charges, and to protect the impacted companies from data leaks. But they were unwilling to address misconfigurations of third-party products.\n\nIt sounds like this guy followed some default instructions for an example site, HOW MANY OTHERS have done this or will do this? And AWS has no response other than to take thier money.\n\nAfter contacting them he was able to get it cancelled, but this is no guarantee.  We've seen other cloud vendors stick users like this with a few thousand dollar bills after cutting their bill to 5% of the original.\n\n> AWS was kind enough to cancel my S3 bill. However, they emphasized that this was done as an exception.\n\n2024 is wild on the cloud hosting front, own your shit or be careful.","published":true,"public":true,"date":"2024-05-01T02:31:56.978519","id":263,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Media Types","link":"https://www.iana.org/assignments/media-types/media-types.xhtml#text","tags":"webdev","message":"A full list of standard `Accept` types.\n\nThis is a handy reference.","published":true,"public":true,"date":"2024-04-30T18:15:43.540122","id":262,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Network Types - Pydantic","link":"https://docs.pydantic.dev/2.7/api/networks/#pydantic.networks.EmailStr","tags":"","message":"pydantic has a nice built in email validator `EmailStr`\n\nIt requires an optional pydantic dependency \n\n``` bash\npip install email-validator\n```\n\nThen you can validate email addresses.\n\n``` python\nfrom pydantic import BaseModel, EmailStr\n\nclass Model(BaseModel):\n    email: EmailStr\n\nprint(Model(email='contact@mail.com'))\n#> email='contact@mail.com'\n```","published":true,"public":true,"date":"2024-04-30T18:12:26.268129","id":260,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"rich.panel — Rich 13.6.0 documentation","link":"https://rich.readthedocs.io/en/stable/reference/panel.html","tags":"python, terminal, cli","message":"This is my go to rich response container for clis written in python.  It creates a nice box around the content on the screen and provides some nice separation in the output.  It can be overdone, but comes in clutch when looking for that print statement in a long output.","published":true,"public":true,"date":"2024-04-30T18:10:37.611020","id":259,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Handling Errors - FastAPI","link":"https://fastapi.tiangolo.com/tutorial/handling-errors/","tags":"webdev, fastapi","message":"This page shows how to customize your fastapi errors.  I found this very useful to setup common templates so that I can return the same 404's both programatically and by default, so it all looks the same to the end user.\n\n\n``` python\nfrom fastapi import FastAPI, Request\nfrom fastapi.responses import JSONResponse\n\n\nclass UnicornException(Exception):\n    def __init__(self, name: str):\n        self.name = name\n\n\napp = FastAPI()\n\n\n@app.exception_handler(UnicornException)\nasync def unicorn_exception_handler(request: Request, exc: UnicornException):\n    return JSONResponse(\n        status_code=418,\n        content={\"message\": f\"Oops! {exc.name} did something. There goes a rainbow...\"},\n    )\n\n\n@app.get(\"/unicorns/{name}\")\nasync def read_unicorn(name: str):\n    if name == \"yolo\":\n        raise UnicornException(name=name)\n    return {\"unicorn_name\": name}\n```\n\n---\n\n\nThis post sat in draft for months.  I stumbled upon it again and found great success returning good error messages based on user preferences.  the default remains json, but if a user requests `text/html` it will be an html response, and text for `application/rtf` or `text/plain`","published":true,"public":true,"date":"2024-04-30T18:08:35.419029","id":258,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Creating SSH Apps with Charm Wish and Laravel Prompts | Joe Tannenbaum","link":"https://blog.joe.codes/creating-ssh-apps-with-charm-wish-and-laravel-prompts","tags":"cli, ssh","message":"Joe has a sick cli.labs site for deploying tui applications.\n\n``` bash\nssh cli.lab.joe.codes\n```","published":true,"public":true,"date":"2024-04-30T18:05:21.762073","id":257,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"white-space - CSS: Cascading Style Sheets | MDN","link":"https://developer.mozilla.org/en-US/docs/Web/CSS/white-space","tags":"html, webdev","message":"html can preserve newline `\\n` characters by styling an element with `white-space: pre-wrap;`\n\n> pre-wrap\n    Sequences of white space are preserved. Lines are broken at newline characters, at <br>, and as necessary to fill line boxes.","published":true,"public":true,"date":"2024-04-30T18:03:17.129924","id":256,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"</> htmx ~ The response-targets Extension","link":"https://htmx.org/extensions/response-targets/","tags":"htmx, webdev","message":"The htmx response-targets extension allows me to respond to errors from the backend and do normal htmx swaps.\n\n> !!! note\n    by default htmx will only swap on 200 and 300 responses\n\nLoad the extension in head\n\n``` html\n<script src=\"https://unpkg.com/htmx.org@1.9.12/dist/ext/response-targets.js\"></script>\n```\n\nUse  the extension on an endpoint that might return a 400.\n\n\n``` html\n<div hx-ext=\"response-targets\">\n    <div id=\"response-div\"></div>\n    <button hx-post=\"/register\"\n            hx-target=\"#response-div\"\n            hx-target-5*=\"#serious-errors\"\n            hx-target-404=\"#not-found\">\n        Register!\n    </button>\n    <div id=\"serious-errors\"></div>\n    <div id=\"not-found\"></div>\n</div>\n```","published":true,"public":true,"date":"2024-04-30T18:00:54.090792","id":255,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Restart All Pods in a Kubernetes Namespace | Boot.dev","link":"https://blog.boot.dev/open-source/how-to-restart-all-pods-in-a-kubernetes-namespace/","tags":"k8s, kubernetes","message":"As of kubernetes 1.15 there is an easy way to restart all pods in a deployment.\n\n``` bash\nkubectl -n {NAMESPACE} rollout restart deploy\n```\n\nThanks Lane give him a follow [@wagslane](https://twitter.com/wagslane)","published":true,"public":true,"date":"2024-04-25T21:59:56.521715","id":254,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"⭐⭐⭐⭐⭐ Changelog Master Feed","link":"https://changelog.com/master","tags":"tech","message":"Jerod (It's ya boi) and Adam are my favorite tech news nerds, and have the sickest podcasts in tech.  Yes plural podcasts they run seven podcasts maybe more.  If you want it short and sweet they got the best 15 minutes of tech news each week this is it.  My favorite is Ship it, sad to see Gerhard go, but Justin and Autumn are crushing it.  Every episode is highly polished and surrounded by the sickest beats in podcasting.\n\nSubscribe to one pod if you want, but I recommend collecting them all with the master feed.\n\n⭐⭐⭐⭐⭐","published":true,"public":true,"date":"2024-04-20T01:47:19.742909","id":253,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"MarkdownDown","link":"https://markdowndown.vercel.app/","tags":"webdev","message":"Small web app to convert html into markdown.  Pretty cool idea. I actually want to look into this for reader and see how well it would work.  Right now I am just pulling descriptions, but maybe I can pull full web pages, and keep the full intent of the first 200 words or so in the cards.","published":true,"public":true,"date":"2024-04-20T01:38:35.860857","id":252,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Boston Dynamics’ new humanoid moves like no robot you’ve ever seen | Ars Technica","link":"https://arstechnica.com/gadgets/2024/04/boston-dynamics-debuts-humanoid-robot-destined-for-commercialization/","tags":"","message":"Award for the creepiest way to stand up a robot from lying flat.","published":true,"public":true,"date":"2024-04-20T01:36:39.772642","id":251,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Rug pull, not cool! (Changelog & Friends #40)","link":"https://changelog.com/friends/40","tags":"tech","message":"Five star episode with Jarod and Adam shootin the crap.\n\n> [The massive Cease and Desist](https://opentofu.org/blog/our-response-to-hashicorps-cease-and-desist/)\n\nSucks that the guest had to back out, what a wild world 2024 is.  Filled with license and pricing changes.\n\n> [From Vim to Zed](https://registerspill.thorstenball.com/p/from-vim-to-zed)\n\nInteresting to hear the journey into zed, way to go Thorston diving all the way into working at zed.\n\n>\t[Boston Dynamics' new Atlas](https://arstechnica.com/gadgets/2024/04/boston-dynamics-debuts-humanoid-robot-destined-for-commercialization)\n\nI later saw this through a YT short, and man does it hold up to the creepy level that they described.\n\n> [MarkdownDown](https://markdowndown.vercel.app/)\n\nThis is a legit cool service, that converts html into markdown","published":true,"public":true,"date":"2024-04-20T01:36:03.053274","id":250,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"argocd automated sync","link":"none","tags":"k8s, kubernetes","message":"```  yaml\n---\n\napiVersion: argoproj.io/v1alpha1\nkind: Application\nmetadata:\n  name: kanboard\n  namespace: argocd\nspec:\n  project: default\n  destination:\n    namespace: kanboard\n    server: 'https://kubernetes.default.svc'\n  source:\n    path: kanboard\n    repoURL: 'https://github.com/waylonwalker/homelab-argo'\n    targetRevision: HEAD\n  syncPolicy:\n    automated:\n      prune: true\n```","published":true,"public":true,"date":"2024-04-19T19:36:47.682008","id":249,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Manual Upgrades | K3s","link":"https://docs.k3s.io/upgrades/manual","tags":"k8s, kubernetes, k3s","message":"You can give k3s an install channel to install `stable`,  `latest`, or specific versions like `1.26`.  This is handy to make sure that you install the same version on all of your workers.\n\n``` bash\ncurl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest <EXISTING_K3S_ENV> sh -s - <EXISTING_K3S_ARGS>\n```","published":true,"public":true,"date":"2024-04-19T12:51:03.847792","id":248,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Devin's Upwork \"side hustle\" exposed (Changelog News #90)","link":"https://changelog.com/news/90","tags":"tech","message":"Damn 2024 is such a shit show, now Devin seems to be out as a complete scam.  It's really teaching us to have skepticism for what you find on the internet.  Turns out that when broken down frame by frame much of the description in the video was a straight up lie.  Personally it seemed quite plausible that it was percentage points better than the competition, but I was not holding my breath for it to be a hands off engineer.","published":true,"public":true,"date":"2024-04-18T01:18:04.354523","id":247,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"sql - How can I list the tables in a SQLite database file that was opened with ATTACH? - Stack Overflow","link":"https://stackoverflow.com/questions/82875/how-can-i-list-the-tables-in-a-sqlite-database-file-that-was-opened-with-attach#answer-83195","tags":"sqlite","message":"I learned about the sqlite_master table from this stack overflow answer.  This helps make a lot of sense to how sqlite works.  The master table contains all the sqlite objects and the sql to create them.\n\n> The .tables, and .schema \"helper\" functions don't look into ATTACHed databases: they just query the SQLITE_MASTER table for the \"main\" database. Consequently, if you used\n\n``` bash\nsqlite3 database.db \"SELECT * from sqlite_master;\"\n```","published":true,"public":true,"date":"2024-04-18T01:13:59.904601","id":246,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"inline-snapshot","link":"https://15r10nk.github.io/inline-snapshot/","tags":"python, testing","message":"This is a cool snapshot testing tool that automatically creates, and updates test values for you.\n\nStarting with some test code.\n\n``` python\nfrom inline_snapshot import snapshot\n\n\ndef something():\n    return 1548 * 18489\n\n\ndef test_something():\n    assert something() == snapshot()\n```\n\nnow if I run `pytest` my tests will fail because my assert will fail, but if I run `pytest --inline-snapshot=create` it will fill out my snapshot values and the file will then look like this.\n\n``` python\nfrom inline_snapshot import snapshot\n\n\ndef something():\n    return 1548 * 18489\n\n\ndef test_something():\n    assert something() == snapshot(28620972)\n```","published":true,"public":true,"date":"2024-04-17T18:37:15.601857","id":245,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"nalgeon/redka: Redis re-implemented with SQLite","link":"https://github.com/nalgeon/redka","tags":"redis","message":"Redka a sick new redis compatable api, that uses sqlite as its backend datastore.  It feels lightweight to use as it is a single small binary.  Data does not have to fit into memory as it uses sqlite to store data.","published":true,"public":true,"date":"2024-04-17T01:59:08.638236","id":244,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Arch Linux - News: The xz package has been backdoored","link":"https://archlinux.org/news/the-xz-package-has-been-backdoored/","tags":"linux, arch","message":"Check your system to see if you are vulnerable to the xz backdoor.\n\nI found this line most pertanent to me.\n\n> The xz packages prior to version 5.6.1-2 (specifically 5.6.0-1 and 5.6.1-1) contain this backdoor.\n\nAlso it appears that arch is not vulnerable as it does not directly link openssh to liblzma, so the known attack vecotor is not possible.  read to the end of the linked article for more.\n\n","published":true,"public":true,"date":"2024-04-16T13:00:33.549185","id":243,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"My harpoon config","link":"None","tags":"vim","message":"Install it\n\n``` lua\n\t{\n\t\t\"ThePrimeagen/harpoon\",\n\t\tbranch = \"harpoon2\",\n\t\tdependencies = { \"nvim-lua/plenary.nvim\" },\n\t\tconfig = function()\n\t\t\trequire(\"waylonwalker.plugins.harpoon\").setup()\n\t\tend,\n\t},\n```\n\nharpoon config\n\n``` lua\nlocal harpoon = require(\"harpoon\")\nM = {}\n\nM.setup = function()\n\n-- REQUIRED\nharpoon:setup()\n-- REQUIRED\n\nvim.keymap.set(\"n\", \"<F10>\", function() harpoon:list():append() end)\nvim.keymap.set(\"n\", \"<F9>\", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end)\n\nvim.keymap.set(\"n\", \"<F1>\", function() harpoon:list():select(1) end)\nvim.keymap.set(\"n\", \"<F2>\", function() harpoon:list():select(2) end)\nvim.keymap.set(\"n\", \"<F3>\", function() harpoon:list():select(3) end)\n-- these are cnext/cprev\n-- vim.keymap.set(\"n\", \"<F4>\", function() harpoon:list():select(4) end)\n-- vim.keymap.set(\"n\", \"<F5>\", function() harpoon:list():select(5) end)\nvim.keymap.set(\"n\", \"<F6>\", function() harpoon:list():select(6) end)\n\n-- Toggle previous & next buffers stored within Harpoon list\nvim.keymap.set(\"n\", \"<F7>\", function() harpoon:list():prev() end)\nvim.keymap.set(\"n\", \"<F8>\", function() harpoon:list():next() end)\n\n-- basic telescope configuration\nlocal conf = require(\"telescope.config\").values\nlocal function toggle_telescope(harpoon_files)\n    local file_paths = {}\n    for _, item in ipairs(harpoon_files.items) do\n        table.insert(file_paths, item.value)\n    end\n\n    require(\"telescope.pickers\").new({}, {\n        prompt_title = \"Harpoon\",\n        finder = require(\"telescope.finders\").new_table({\n            results = file_paths,\n        }),\n        previewer = conf.file_previewer({}),\n        sorter = conf.generic_sorter({}),\n    }):find()\nend\n\nvim.keymap.set(\"n\", \"<C-e>\", function() toggle_telescope(harpoon:list()) end,\n    { desc = \"Open harpoon window\" })\n\nend\n\nreturn M\n```","published":true,"public":true,"date":"2024-04-16T01:34:38.855755","id":242,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"From Vim To Zed - YouTube","link":"https://www.youtube.com/watch?v=ZRnWmNdf5IE&t=612","tags":"vim, nvim","message":"I found this statement quite intriguing.\n\n> multi-cursors are just macros.\n\nThis is quite a philisophical video and mostly prime talking about the things that make vim vim, and what prime needs in and editor vs what he can live without.","published":true,"public":true,"date":"2024-04-13T13:42:56.290904","id":241,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Use an llm to automagically generate meaningful git commit messages | Harper Reed's Blog","link":"https://harper.blog/2024/03/11/use-an-llm-to-automagically-generate-meaningful-git-commit-messages/","tags":"llm, ai","message":"This is pretty sick, I wanted this early on when I was making lockhart.  I wanted to do the git hook thing but could not figure it out and did not know that `prepare-commit-msg` was a hook that I could use.\n\n> Git Hooked\n> Then I remembered! Git hooks! Lol. Why would I have that in my brain - who knows!\n> \n> I asked claude again, and they whipped up a simple script that would act as a hook that triggers with the prepare-commit-msg event.\n>\n> This is awesome, cuz if you want to add a git message, you can skip the hook. But if you are lazy, you exclude the message and it will call the LLM.\n\n\nSimon Willison's llm cli comes in clutch here, it has such a good intereface to allow a prompt to be piped in, but the system prompt be set by -s.\n\n``` bash\ngpt = \"!f() { git diff $1 | llm -s \\\"$(cat ~/.config/prompts/commit-system-prompt.txt)\\\" }; f\"\n```\n\n\n> I love hacking on projects, but often I am super bad at making commits that make sense.\n\nI completely relate to this statement, and this is why I am trying it.\n","published":true,"public":true,"date":"2024-04-11T13:35:50.823632","id":240,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"node.js - How to fix npm throwing error without sudo - Stack Overflow","link":"https://stackoverflow.com/questions/16151018/how-to-fix-npm-throwing-error-without-sudo#answer-41395398","tags":"webdev","message":"Its sad that this is not the accepted answer.\n\n\n``` bash\nmkdir ~/.npm-global\nexport NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin\n```","published":true,"public":true,"date":"2024-04-09T18:21:02.067338","id":239,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"google chrome - Webkit scrollbar CSS, always a white box in corner - Stack Overflow","link":"https://stackoverflow.com/questions/35968553/webkit-scrollbar-css-always-a-white-box-in-corner","tags":"webdev","message":"This is how you fix the stupid corner section of a double scroll bar being white on a dark theme site.\n\n\n``` css\n::-webkit-scrollbar-corner {\n  background: rgba(0,0,0,0);\n}\n```\n\nThe question included an example image where you can see white squares everywhere there are horizontal and vertical scroll bars.\n\n![the corner](https://i.stack.imgur.com/P6b7f.png)","published":true,"public":true,"date":"2024-04-09T16:55:55.582007","id":238,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Cache Ruins Everything Around Me - YouTube","link":"https://www.youtube.com/watch?v=j8oD976nhZk","tags":"webdev","message":"This is an interesting problem.  I want to make a solution for this on htmx-patterns.  I would make user specific routes with an `hx-get` rather than serving the whole page, serve a partial with `hx-oob`s to fill in user specific data with a no cache on the cdn level.","published":true,"public":true,"date":"2024-04-08T13:50:43.874546","id":237,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"building a youtube tool in 24 hours to prove a point - YouTube","link":"https://www.youtube.com/watch?v=ws86p5iUaRs","tags":"webdev","message":"So cool to see ROX build this over the course of a day.","published":true,"public":true,"date":"2024-04-08T13:35:15.880433","id":236,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Hogwarts Legacy Argyllshire Map: What does the button do? - Dot Esports","link":"https://dotesports.com/hp/news/hogwarts-legacy-argyllshire-map-what-does-the-button-do","tags":"hogwarts","message":"Damn this button had me stuck for way too long.  It definitely looks like a button once I see it, but I don't recall coming into contact with many buttons in the game, I tried to set it ablaze, pull it, fly it, nothing.","published":true,"public":true,"date":"2024-04-03T01:45:36.528049","id":235,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How can I add my YouTube videos via RSS? - SocialBee Help Documentation","link":"https://help.socialbee.com/article/129-how-can-i-add-my-youtube-videos-via-rss","tags":"rss","message":"YouTube makes finding rss feeds way too hard.  Hats off to them for still supporting it, allowing you to find content outside the algorithm, and consuming content you asked for.  But i had no idea you had to search the source code to get it.","published":true,"public":true,"date":"2024-04-03T01:42:29.021420","id":234,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"sql - SQLite: COUNT slow on big tables - Stack Overflow","link":"https://stackoverflow.com/questions/8988915/sqlite-count-slow-on-big-tables","tags":"sql, sqlite","message":"Another interesting option for slow count queries in sqlite.\n\n> If you haven't DELETEd any records, doing:\n\n``` sql\nSELECT MAX(ROWID) FROM \"table\" LIMIT 1;\n```","published":true,"public":true,"date":"2024-04-01T20:59:40.211283","id":233,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Optimizing SQLite for servers","link":"https://kerkour.com/sqlite-for-servers","tags":"sql, sqlite","message":"Very interesting article by Sylvain, suggested by Simon Willison.\n\nDefinitely some things that I want to come back and try later on.\n\n\nHere is the TLDR of the whole post\n\n``` bash\nPRAGMA journal_mode = WAL;\nPRAGMA busy_timeout = 5000;\nPRAGMA synchronous = NORMAL;\nPRAGMA cache_size = 1000000000;\nPRAGMA foreign_keys = true;\nPRAGMA temp_store = memory;\n```\n\nThis is interesting, and something I need to consider.  I definitely have an application with slow count queries.  I am not sure how to make it better as its not a full `count(*)` so a count table doesn't work, nor does counting by index.\n\nI might need to have a table of cached results, and if a write matches the counter increase it, or update all counters on write.\n\n> COUNT queries are slow\n> SQLite doesn't keep statistics about its indexes, unlike PostgreSQL, so COUNT queries are slow, even when using a WHERE clause on an indexed field: SQLite has to scan for all the matching records.\n\n> One solution is to use a trigger on INSERT and DELETE that updates a running count in a separate table then query that separate table to find the latest count.","published":true,"public":true,"date":"2024-04-01T20:55:23.616186","id":232,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"From Nursing to Programming ft. Trash Puppy | Backend Banter 047 - YouTube","link":"https://www.youtube.com/watch?v=fsExvZY4pe4","tags":"career","message":"Inspiring story transitioning into tech from nursing.  I also came to tech through a set of circumstances that made it difficult for me to excel at my current job.  Looking back it is something that I was always interested in and I was just unsure how to get in, I am so glad that I figured it out, it has been such a great benefit to my family.\n\nI really enjoyed listening to trshpuppy's journey in through building projects, and choosing tech not based on what she wanted to learn, but what fit the project the best.","published":true,"public":true,"date":"2024-04-01T20:21:37.034159","id":231,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Some Git poll results","link":"https://jvns.ca/blog/2024/03/28/git-poll-results/","tags":"git","message":"great poll of git questions\n\n> poll: did you know that in a git merge conflict, the order of the code is different when you do a merge/rebase?\n> \n> merge:\n> \n> \\<\\<\\<\\<\\<\\<\\< HEAD\n> YOUR CODE\n> =======\n> OTHER BRANCH'S CODE\n> >>>>>>> c694cf8aabe\n> \n> rebase:\n> \n> <<<<<<< HEAD\n> OTHER BRANCH'S CODE\n> =======\n> YOUR CODE\n> >>>>>>> d945752 (your commit message)\n\n\nThis one explains a lot.  I _think_ I knew this, I might have seen it somewhere, but I have definitely noticed it go both ways and confuse the crap out of me.  Feels very similar to how `--ours` and `--theirs` flip flops.","published":true,"public":true,"date":"2024-03-29T02:04:41.874183","id":230,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Sealed Secrets","link":"https://sealed-secrets.netlify.app/","tags":"k8s, kubernetes","message":"kubeseal is a pretty simple to get started with way to manage secrets such that they can be stored in a git repo and be picked up by your continuous delivery service.\n\n> Sealed Secrets provides declarative Kubernetes Secret Management in a secure way. Since the Sealed Secrets are encrypted, they can be safely stored in a code repository. This enables an easy to implement GitOps flow that is very popular among the OSS community.","published":true,"public":true,"date":"2024-03-28T01:07:06.405785","id":229,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Middleware Explained - YouTube","link":"https://www.youtube.com/watch?v=JKb_rYvdmpo","tags":"webdev","message":"Great episode covering a seemingly simple topic.  What I really benefitted from was hearing all the different use cases, from logging, debugging, to a/b testing, caching, and auth.  I hadn't even thought of it being applied to a router.  I thought of it being applied for an entire application.  This seems very useful for things like an admin router, all routes would need to have the admin role to get in.","published":true,"public":true,"date":"2024-03-26T13:56:33.510357","id":228,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"fastapi decorators","link":"None","tags":"webdev, fastapi","message":"I've been using these decorators to modify the behavior of specific routes.  It will do things like 404 admin only routes in a way that looks just like fastapi's default, or only allow certain roles into the route, or redirect unauthenticated users to login.\n\nAfter listening to yesterday's syntaxfm I'm now really thinking about middleware and the benefits it might have.  middleware would make it easy to apply things like admin to an entire admin router, so you wont forget it on any one admin route.  It will look cleaner as the admin checker is only applied once per router, not once per route.\n\n``` python \nimport inspect\nimport time\nfrom functools import wraps\nfrom inspect import signature\n\nfrom fastapi import Request\nfrom fastapi.responses import FileResponse, JSONResponse, RedirectResponse\nfrom starlette import status\n\nfrom fokais.config import get_config\nfrom fokais.models.user import Role\n\nconfig = get_config()\n\n\nadmin_routes = []\nauthenticated_routes = []\nnot_cached_routes = []\ncached_routes = []\n\n\ndef not_found(request):\n    hx_request_header = request.headers.get(\"hx-request\")\n    user_agent = request.headers.get(\"user-agent\", \"\").lower()\n\n    if \"mozilla\" in user_agent or \"webkit\" in user_agent or hx_request_header:\n        return config.templates.TemplateResponse(\n            \"error.html\", {\"status_code\": 404, \"detail\": \"Not Found\", \"request\": request}, status_code=404\n        )\n    else:\n        return JSONResponse(\n            content={\n                \"status_code\": 404,\n                \"detail\": \"Not Found\",\n            },\n            status_code=404,\n        )\n\n\ndef no_cache(func):\n    not_cached_routes.append(f\"{func.__module__}.{func.__name__}\")\n\n    @wraps(func)\n    async def wrapper(*args, request: Request, **kwargs):\n        # my_header will be now available in decorator\n        if \"request\" in signature(func).parameters:\n            kwargs[\"request\"] = request\n\n        if inspect.iscoroutinefunction(func):\n            response = await func(*args, **kwargs)\n        else:\n            response = func(*args, **kwargs)\n\n        response.headers[\"Cache-Control\"] = \"no-cache, no-store, must-revalidate\"\n        response.headers[\"Pragma\"] = \"no-cache\"\n        response.headers[\"Expires\"] = \"0\"\n        return response\n\n    return wrapper\n\n\ndef cache(max_age=86400):\n    def inner_wrapper(func):\n        cached_routes.append(f\"{func.__module__}.{func.__name__}\")\n\n        @wraps(func)\n        async def wrapper(*args, request: Request, **kwargs):\n            if \"request\" in signature(func).parameters:\n                kwargs[\"request\"] = request\n            if inspect.iscoroutinefunction(func):\n                response = await func(*args, **kwargs)\n            else:\n                response = func(*args, **kwargs)\n            response.headers[\n                \"Cache-Control\"\n            ] = f\"public, max-age={max_age}, stale-while-revalidate=31536000, stale-if-error=31536000\"\n            response.headers[\"Expires\"] = f\"{int(time.time()) + max_age}\"\n\n            return response\n\n        return wrapper\n\n    return inner_wrapper\n\n\ndef admin_only(func):\n    admin_routes.append(f\"{func.__module__}.{func.__name__}\")\n\n    @wraps(func)\n    async def wrapper(*args, request: Request, **kwargs):\n        if request.state.user is None:\n            return not_found(request)\n        if request.state.user.role != Role.admin:\n            return not_found(request)\n        if \"request\" in signature(func).parameters:\n            kwargs[\"request\"] = request\n        if inspect.iscoroutinefunction(func):\n            response = await func(*args, **kwargs)\n        else:\n            response = func(*args, **kwargs)\n        return response\n\n    return wrapper\n\n\ndef authenticated(roles=[Role.user, Role.admin], redirect_to=\"get_login\"):\n    def inner_wrapper(func):\n        authenticated_routes.append(f\"{func.__module__}.{func.__name__}\")\n\n        @wraps(func)\n        async def wrapper(*args, request: Request, **kwargs):\n            if request.state.user is None:\n                return RedirectResponse(\n                    url=request.url_for(redirect_to, source=request.url), status_code=status.HTTP_302_FOUND\n                )\n            if request.state.user.role not in roles:\n                return not_found(request)\n\n            if \"request\" in signature(func).parameters:\n                kwargs[\"request\"] = request\n            if inspect.iscoroutinefunction(func):\n                response = await func(*args, **kwargs)\n            else:\n                response = func(*args, **kwargs)\n            return response\n\n        return wrapper\n\n    return inner_wrapper\n\n\ndefault_data = {}\n\n\ndef defaults(data=default_data):\n    def inner_wrapper(func):\n        default_data[f\"{func.__module__}.{func.__name__}\"] = data\n\n        @wraps(func)\n        async def wrapper(*args, request: Request, **kwargs):\n            if \"request\" in signature(func).parameters:\n                kwargs[\"request\"] = request\n            if inspect.iscoroutinefunction(func):\n                response = await func(*args, **kwargs)\n            else:\n                response = func(*args, **kwargs)\n            return response\n\n        return wrapper\n\n    return inner_wrapper\n```","published":true,"public":true,"date":"2024-03-26T13:50:46.534388","id":227,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Simon Willison on X: \"TIL Google Chrome has a --headless option you can use to take a screenshot from the CLI that's built into the default installation https://t.co/hoA4ujPSTh\" / X","link":"https://twitter.com/simonw/status/1772043579231445366","tags":"webdev","message":"Huh, so this is just built right into the chrome cli.\n\n``` python\n/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome \\\n  --headless \\\n  --screenshot=/tmp/shot1.png \\\n  https://simonwillison.net\n```","published":true,"public":true,"date":"2024-03-25T03:10:39.073384","id":224,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"fastapi https url_for","link":"None","tags":"fastapi, webdev","message":"\njinja's `url_for` in fastapi does not account for https by default, there is\nprobably a better way, but this is a way that allows me to configure when I use\nhttp vs https.\n\n``` python\n@pass_context\ndef https_url_for(context: dict, name: str, **path_params: Any) -> str:\n    \"\"\"\n    always convert http to https\n    \"\"\"\n    request = context[\"request\"]\n    http_url = request.url_for(name, **path_params)\n    return str(http_url).replace(\"http\", \"https\", 1)\n\n\ndef get_templates(config: BaseSettings) -> Jinja2Templates:\n    templates = Jinja2Templates(directory=\"templates\")\n    templates.env.globals[\"https_url_for\"] = https_url_for\n\n    ## only use the default url_for for local development, for dev, qa, and prod use https\n    if os.environ.get(\"ENV\") in [\"dev\", \"qa\", \"prod\"]:\n        templates.env.globals[\"url_for\"] = https_url_for\n        console.print(\"Using HTTPS\")\n    else:\n        console.print(\"Using HTTP\")\n\n    return templates\n```\n","published":true,"public":true,"date":"2024-03-24T18:15:48.115348","id":223,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Cassidy on X: \"I MADE AN APP ✨ https://t.co/BiyX8XZqDK\" / X","link":"https://twitter.com/cassidoo/status/1770900985382138291","tags":"","message":"Damn are one time paid and have it apps making a comeback?  Seems like the perfect thing to have someone else automate and not pay a subscription for.\n\nGenius Idea Cassidy!!\n\nNow what do you call this, its not software as a service, is this just sofware?","published":true,"public":true,"date":"2024-03-21T23:44:43.064719","id":222,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"learning strawberry","link":"None","tags":"graphql","message":"``` python\nimport logging\nfrom typing import List\n\nimport strawberry\nfrom fastapi import FastAPI\nfrom strawberry.fastapi import GraphQLRouter\n\nlogger = logging.getLogger(__name__)\n\nauthors = {}\nbooks = {}\nbook_authors = {}\nauthors_books = {}\n\n\ndef get_author_for_book(root) -> \"Author\":\n    return authors[book_authors[root.id]]\n\n\n@strawberry.type\nclass Book:\n    id: int\n    title: str\n    author: \"Author\" = strawberry.field(resolver=get_author_for_book)\n\n\ndef get_books_for_author(root) -> List[Book]:\n    print(f\"getting books for {root}\")\n    return [books[i] for i in authors_books[root.id]]\n\n\n@strawberry.type\nclass Author:\n    id: int\n    name: str\n    books: List[Book] = strawberry.field(resolver=get_books_for_author)\n\n\nauthors = {1: Author(id=1, name=\"Michael Crichton\")}\nbooks = {1: Book(id=1, title=\"Jurassic Park\")}\n# relationships\nbook_authors[1] = 1\nauthors_books[1] = [1]\n\n\ndef get_author_by_id(id: int) -> Author:\n    return authors.get(id)\n\n\ndef get_book_by_id(id: int) -> Book:\n    return books.get(id)\n\n\ndef get_authors(root) -> List[Author]:\n    return authors.values()\n\n\ndef get_books(root) -> List[Book]:\n    print(books)\n    print(authors)\n    print(book_authors)\n    print(authors_books)\n    return books.values()\n\n\n@strawberry.type\nclass Query:\n    author: Author = strawberry.field(resolver=get_author_by_id)\n    book: Book = strawberry.field(resolver=get_book_by_id)\n    authors: List[Author] = strawberry.field(resolver=get_authors)\n    books: List[Book] = strawberry.field(resolver=get_books)\n\n    @strawberry.field\n    def hello(self, name: str = None) -> str:\n        \"\"\"this is a resolver for hello, just like authors and books have a resolver\"\"\"\n        if name is None:\n            return \"Hello World\"\n        return f\"Hello {name}\"\n\n\n@strawberry.input\nclass AddBookInput:\n    title: str = strawberry.field(description=\"The title of the book\")\n    author: str = strawberry.field(description=\"The name of the author\")\n\n\n@strawberry.type\nclass Mutation:\n    @strawberry.field\n    # def add_book(self, title: str, author: str) -> Book:\n    def add_book(self, book: AddBookInput) -> Book:\n        print(f\"i got a book: {book.title}\")\n        print(f\"of type {type(book.title)}\")\n        name = book.author\n        title = book.title\n        author = [author for id, author in authors.items() if author.name == name]\n        print(f\"here are the names {[author.name for id, author in authors.items()]}\")\n        print(f\"my name is { name }\")\n        print(f\"this is the author i found {author}\")\n        if author:\n            author = author[0]\n            author_id = author.id\n        else:\n            author_id = max(authors.keys()) + 1\n            author = Author(id=author_id, name=name)\n            authors[author_id] = author\n\n        book = [b for id, b in books.items() if b.title == title]\n        if book:\n            book = book[0]\n        else:\n            book_id = max(books.keys()) + 1\n            book_authors[book_id] = author_id\n            print(f\"I am making book {book_id}\")\n            print(f\"{name} has books {authors_books.get(author_id)}\")\n\n            if author_id in authors_books.keys():\n                authors_books[author_id].append(book_id)\n            else:\n                authors_books[author_id] = [book_id]\n            book = Book(id=book_id, title=title)\n            books[book_id] = book\n\n        print(f\"i got books: {books}\")\n        print(f\"i got authors: {authors}\")\n        return book\n\n\nschema = strawberry.Schema(query=Query, mutation=Mutation)\n\nrouter = GraphQLRouter(\n    schema,\n)\n\napp = FastAPI()\n\n```","published":true,"public":true,"date":"2024-03-20T21:43:45.464262","id":221,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Joining the split keyboards club: a Moonlander story","link":"https://carlosbecker.com/posts/split-keyboard-moonlander/","tags":"","message":"I switched from a 60% vortex pok3r to a 40% corne June, 2021.  I can relate to a lot of what Carlos talks about here.  I think going from 60%-40% made my journey harder than it needed to be.  There's no going back now, but it took me a **really** long time to be able to hit all of the numbers and symbols, just figuring out how to do the layout was hard there's not much space.\n\n> I didn’t touch type. I never really used my pinkies, except maybe for ESC, Shift, CTRL, Backspace et al.\n\nI can relate to this, my typing habits were terrible.  Shortly before going split ortho I worked on my speed with lots, and lots of practice on keybr and monkeytype.  I took my speed from 35wpm to 80wpm with a few months of steady practice. This is one of the best things I did for myself. \n\nOnce I got split it dropped down to single digits and slowly rose back up to 80, just barely breaking my PB on monkeytype.\n\n> I still feel like I still can’t type at my previous max speed — mostly because I wasn’t used to use my pinky and used the “wrong finger” for a lot of keys, but, nevertheless: I got there! I can touch type now! Yay! 🥳\n\nI feel this!  I'm pretty sure that I could still type faster on a normal keeb given some practice, but damn a split ortho is so comfy.  A normal row stagger feels like its twisting my fingers.\n\n> Update: my top speed was 125wpm for 10 words, and I can comfortably type between 80-100wpm now. Good enough.\n\nDamn thats good.\n\n> The bad news is that I’ll need to bring my keyboard with me everywhere I go now…\n\nYes, normal keebs feel awkward and like your fingers are all twisted up.","published":true,"public":true,"date":"2024-03-20T00:17:59.629750","id":220,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"My workflow, part 1","link":"https://carlosbecker.com/posts/workflow-pt1/","tags":"workflow","message":"Carlos has a pretty sick setup here, I can relate to mostly, cept the macos part.  My main critique is that I don't think he gave window managers much chance on linux, and they just don't work on MacOS/Windows.\n\n> Most of the time I have a single, maximized window.\n\nI can relate to this. I should really make a full post about my experience with tiling window managers.  TLDR, I came for tiling and I stayed for the workspaces.\n\n> Multiple Displays\n> An exception here could be streaming: having multiple displays can help preventing doxing yourself if you only share the screen of one of them. I only did stream like 3 times and that’s what I did, but I’m sure experienced streamers have better workflows (with or without multiple displays).\n\nAccurate, my home machine uses one monitor, and for work I use one monitor+laptop.  I pair, screenshare, and present quite a bit at work, and its good to have one screen for sharing, and one for seeing things like the app you are sharing from (chat, cams, etc)","published":true,"public":true,"date":"2024-03-19T23:52:31.122465","id":219,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Using Netlify Analytics to Build a List of Popular Posts - Jim Nielsen’s Blog","link":"https://blog.jim-nielsen.com/2020/using-netlify-analytics-to-build-list-of-popular-posts/","tags":"blogging","message":"This is a sick feature of Jim's blog, I am really inspired by this.  I am not sure how to do it for my own.  I honestly think the easiest non locked in way would be to just use google search console results.  It's definitely a different way to think about it, but most of my traffic is coming from google search, so it would be a pretty good ballpark estimate.","published":true,"public":true,"date":"2024-03-18T02:12:20.239065","id":218,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"605: Jim Nielsen on Subversive URLs, Blogging + AI, and Design Engineers – ShopTalk","link":"https://shoptalkshow.com/605/","tags":"blogging, web","message":"An absolute fantastic episode about blogging, thinking about a web1.0 kind of world today, and what it means moving forward.\n\nWeb 1.0 is robust, you own your own destiny, you own your data, you can do what you want.  There is no platform to tell you what you can and cannot do.  But the future web is stealing your data to build AI models, spam sites are duplicating your content and stealing your SEO.  You may or may not care, but at the end whether you get traffic or now you own your web 1.0 sites.","published":true,"public":true,"date":"2024-03-15T14:42:30.222572","id":217,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Configure Liveness, Readiness and Startup Probes | Kubernetes","link":"https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/","tags":"k8s, kubernetes","message":"What is the difference between health, liveness, readiness, and startup?  This article does a great job at a full writeup description of how it works in kubernetes, here is my TLDR.\n\n\n\n* health 200 OK - I'm still responding to requests\n* health ERR - something happened and I cant respond to requests\n\n* liveness 200 OK - I'm ready for more work\n* liveness ERR - I'm still responding to requests, and i'm already working send requests to another pod, or scale up\n\n\n## Z-pages\n\nThese probes are commonly deployed at `/healthz` and `/livez` endpoints.\n\nWhy the z?\n\nz is a convention that comes from google for meta endpoints to reduce conflict with actual endpoints, and can be deployed to any application.","published":true,"public":true,"date":"2024-03-15T14:38:02.978203","id":216,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"docker - Where does the convention of using /healthz for application health checks come from? - Stack Overflow","link":"https://stackoverflow.com/questions/43380939/where-does-the-convention-of-using-healthz-for-application-health-checks-come-f","tags":"docker, healthchecks","message":"The convention of \"z-pages\" comes from google and reduces the likelihood of collisions with application endpoints and keep the convention across all applications.","published":true,"public":true,"date":"2024-03-15T14:34:23.553869","id":215,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Placehold | A simple, fast and free image placeholder service","link":"https://placehold.co/","tags":"webdev","message":"This is a handy placeholder generator for generating placeholder items like images, and videos.","published":true,"public":true,"date":"2024-03-14T15:46:22.811797","id":214,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"My New Python Lsp Setup","link":"None","tags":"python, nvim","message":"I figured out the killer combination for python lsp servers, ruff and jedi!  ruff does all of the diagnostics and formatting, then jedi handles all the code objects like go to definition and go to reference.\n\n``` lua\n\tlocal servers = {\n\t\truff_lsp = {},\n\t\tjedi_language_server = {},\n}\n```","published":true,"public":true,"date":"2024-03-09T02:58:03.565280","id":213,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"flake8-to-ruff · PyPI","link":"https://pypi.org/project/flake8-to-ruff/","tags":"python, linting","message":"Underrated python library to on board ruff, or just use it on a project where its not the norm.  ruff claims that its 99.9% compatible with black and when you read through the known differences they are clearly edge case bugs in black.\n\n> See this page for more about the comparison to black https://docs.astral.sh/ruff/faq/#how-does-ruffs-formatter-compare-to-black\n\noh and I just noticed that it is maintianed by Charlie, and comes straight out of astral.","published":true,"public":true,"date":"2024-03-09T02:29:51.234951","id":212,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"searching my thoughts locally","link":"None","tags":"sqlite, data, blog","message":"First I need to fetch my thoughts from the api, and put it in a local sqlite database using `sqlite-utils`.\n\n``` bash\nfthoughts () {\n    # fetch thoughts\n    curl 'https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999' | sqlite-utils insert ~/.config/thoughts/database2.db post --pk=id --alter --ignore -\n}\n```\n\nNow that I have my posts in a local sqlite database I can use `sqlite-utils` to enable full text search  and populate the full text search on the post table using the title message and tags columns as search.\n\n``` bash\nsthoughts () {\n    # search thoughts\n    # sqlite-utils enable-fts ~/.config/thoughts/database2.db post title message tags\n    # sqlite-utils populate-fts ~/.config/thoughts/database2.db post title message tags\n    sqlite-utils search ~/.config/thoughts/database2.db post \"$*\" | ~/git/thoughts/format_thought.py | bat --style=plain --color=always --language=markdown\n}\n\nalias st=sthoughts\n```\n\nNow I am ready to search my thoughts, which is a tiny blog format that I created mostly for  leaving my own personal comment on web pages, so most of them have a link to some other online content, and their title is based on the authors title.\n\n<img src=\"https://vhs.charm.sh/vhs-5UMOPkPbr43X3PKi6q1sih.gif\" alt=\"Made with VHS\">\n<a href=\"https://vhs.charm.sh\">\n  <img src=\"https://stuff.charm.sh/vhs/badge.svg\">\n</a>\n","published":true,"public":true,"date":"2024-03-07T23:42:00.079868","id":211,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"lonecraft","link":"https://screenshots.waylonwalker.com/lonecraft.png","tags":"minecraft","message":"This is the best tree I have ever built in minecraft.  It took at least 4 stacks of logs and leaves despite what it looks like.\n\nIt is placed where Welscraft's island in the hermitcraft season 10 seed, but on our own server we call lonecraft.\n\nWe started this server a few weeks after hermitcraft season 10 started, and play on it a few times per week.  It has a pretty successful day one iron farm that took us way more than one day to complete, and the farm behind this is our first ever villager driven farm.  Somehow potatoes got cross contaminated and now its pumping out potatoes and some bread, but no carrots or beat roots.\n\n> World Seed: 5103687417315433447","published":true,"public":true,"date":"2024-03-07T14:20:48.820932","id":210,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Formatting codes – Minecraft Wiki","link":"https://minecraft.wiki/w/Formatting_codes","tags":"minecraft","message":"Minecraft MOTD and server names have formatting codes so that you can get colors, bold, underlined, italics, in your message of the day or server name.  See the article for all the cods.","published":true,"public":true,"date":"2024-03-07T14:16:23.242261","id":209,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"jesseduffield/lazydocker: The lazier way to manage everything docker","link":"https://github.com/jesseduffield/lazydocker","tags":"docker","message":"I've been using this for a few weeks now and it's fantastic.  It's reminds me of lazygit, it gives a nice quick interface into the things I need and it just works.  Yes I can git status to see what changed, then diff the files, then commit hunks, but lazygit can do that in just a few keystrokes.  lazydocker does this for docker. It gives me a nice view into whats running, what's eating up disk space, and the networks I have.  And if I see I have a bunch of exited containers, there is a bulk command righ there to clean them up.\n\n> tldr `docker ps` on steroids\n\n![](https://github.com/jesseduffield/lazydocker/blob/master/docs/resources/demo3.gif?raw=true)","published":true,"public":true,"date":"2024-03-07T14:14:17.287346","id":208,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(265) I'm Coming Around To Go... - YouTube","link":"https://www.youtube.com/watch?v=N8fjU_hlwDI","tags":"go","message":"Go is feeling more and more like something I could throw in my tool belt as a python dev.  I really like that it's garbage collected and has great error management.  I am just not sure how to work it in without it being the main thing.  The thing that is so cool is the ability to ship tiny pre-compiled binaries that just work, and the raw speed.  these binaries just get up and working without any warm up.  writing any cli in python I'm going to be using something like typer, and it takes half a second just to warm up, so even hello world cannot be faster than half a second.","published":true,"public":true,"date":"2024-03-06T14:39:31.049330","id":207,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(265) Creating One-To-Many Relationships in Flask-SQLAlchemy - YouTube","link":"https://www.youtube.com/watch?v=VVX7JIWx-ss","tags":"sqlalchemy","message":"Great example from Anthony showing how easy it is to practice building database orm models and playing with them in a repl.  This is good practice even if you are in  a big code base to be able to test and learn in a simplified code base that does not have a mountain of other code around atuh, permissions, security, and other complex things that come into real production code bases that might make it hard to focus on what you are trying to do.\n\n!!! Note\n   Anthony uses backref here, thats legacy, use back_populates on both parent and child.","published":true,"public":true,"date":"2024-03-06T14:35:17.927565","id":206,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"python - Concepts of backref and back_populate in SQLalchemy? - Stack Overflow","link":"https://stackoverflow.com/questions/51335298/concepts-of-backref-and-back-populate-in-sqlalchemy#answer-59920780","tags":"sqlalchemy","message":"Today I came across some sqlalchemy models that created some relationships, some used `backref` \n some used `back_populates`.   I was stumped why, I had never came accross `backref` before and I felt skill issues sinking in.\n\n## backref is considered legacy\n\nhttps://docs.sqlalchemy.org/en/14/orm/backref.html\n\nAs stated in the sqlalchemy docs, backref is a legacy feature.  Its shorthand to creating relationships between parent and child, but only adding it to the parent.  While this is simpler it introduces some invisible magic.\n","published":true,"public":true,"date":"2024-03-06T01:55:42.094532","id":205,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"2.5 Admins 180: Email 777 – 2.5 Admins","link":"https://2.5admins.com/2-5-admins-180/","tags":"","message":"How do you pronounce URL, is it U.R.L or Earle?  I'm about 50/50, mostly when I am in a hurry I use Earle as it is one syllable and easy to say.  I picked this up from MPJ of fun fun function, who took over Dev Tips.  In this episide Jim uses Earle and they make fun of him.  If it's good enough for Jim, I am done with my 50/50 and I'm going all in on Earle.\n\nEpisode also included a fastinating corrdinated attack that used Ars Technica profile photos communicate directions for the next attack via query parameters in the image url.","published":true,"public":true,"date":"2024-02-03T20:27:31.174370","id":204,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(212) Replace Github Copilot with a Local LLM - YouTube","link":"https://www.youtube.com/watch?v=F1bXfnrzAxM","tags":"llm, ai","message":"This really makes me want to try Dolphin Mixtral with ollama now.  It looks very impressive from this video.  The ability to keep adding features before becoming confused is though with a lot of these llms.\n\nBeing chat based, this is not a co pilot replacement.  I was really hoping for an in line co pilot like tool that I can run locally.  I have not used co pilot yet, but I have had great luck with codeium.","published":true,"public":true,"date":"2024-01-30T23:14:01.217913","id":203,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(212) Dawn Gate - The Game that Solved Toxicity - 2 - YouTube","link":"https://www.youtube.com/shorts/869rtyUlh1U","tags":"gamedev","message":"Thor is just straight up a great Human being!  Getting a gaming company to tie power and progression with being nice is an incredible feat.","published":true,"public":true,"date":"2024-01-30T23:10:12.934587","id":202,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I'm Skeptical Of Low Code - YouTube","link":"https://www.youtube.com/watch?v=4nK03E0jvnI","tags":"webdev, low code","message":"Great take on low code.  I have definitely felt the pressure of being presented low code options, \"look it does almost everything you need, and you can do it without code.\"  Granted there are tons of great low code environments that serve their markets well (things like zapier).\n\nAs pointed out here when they fall short rather than being hard, it goes to nearly impossible.  As Theo points out here many applications follow an 80/20 rule.  80% of the app is really easy to put together, and takes about 20% of the time, probably less.  What no code does is it takes that 80% that is already easy, makes it even easier ( pitches it as faster whether or not that is true ), and makes the last 20% of the project impossibly hard to create and maintain, so you just should have picked a tool that had the capability of doing the whole thing from the start anyways.","published":true,"public":true,"date":"2024-01-30T23:07:40.587218","id":201,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"The One Eyed Fighting Kirby","link":"https://www.youtube.com/watch?v=9_Ekt1PZBzQ&t=351s","tags":"vim, regex","message":" I've heard prime say just give it the one eyed fighting kirby so many times, and execute it few times, and there is no way to find it online, so this will be the link that I will come to, when I need to remember what @theprimeagen means when he says Give it the one eyed fighting kirby.\n\n``` vim\n:s/\\(.*\\);/console.log(\\1)\n```\n\n## So what is this?\n\nThis is a vim substitute comand to replace text in the buffer.  the one eyed fighting kirby is a regex capture group to capture everything between matches, and assign it a value to place back in after the match.\n\nsubstitute in a nutshell, `:s/<what you want to replace>/<what you want to replace with>`\n\n\n## More examples\n\nHere is a contrived example of text.\n\n``` text\nhere there\nfrom here go there\nhere = some_fuction(there)\n```\n\nNow for some reason I want to switch all of the words here and there.  I can do that with three capture groups, \\1 is here, \\2 is everything between, \\3 is there.\n\n``` vim\n:%s/\\(here\\)\\(.*\\)\\(there\\)/\\3\\2\\1\n```\n\n> Just give it the one eyed fighting kirby\n> \n> ~Prime\n\n## still struggling\n\nI thought this explaination from phind was good and more verbose than mine.\n\n---\n\ndescribe this vim substitute regex\n\n:%s/\\(here\\)\\(.*\\)\\(there\\)/\\3\\2\\1\nANSWER | PHIND V9 MODEL\nThe given Vim substitute regex :%s/\\(here\\)\\(.*\\)\\(there\\)/\\3\\2\\1 performs the following operation:\n\n%s initiates the substitute command. The percent sign % indicates that the operation should be performed across the entire file, not just the current line 2.\n\\(here\\) is a capturing group that matches the word \"here\". The parentheses \\( and \\) are used to define a group, and the content inside them is what the group will match 3.\n\\(.*\\) is another capturing group that matches any sequence of characters. The .* inside the group is a wildcard that matches any character (except a newline), and the * quantifier means \"zero or more of the preceding element\". So, this group will match any sequence of characters 2.\n\\(there\\) is yet another capturing group that matches the word \"there\". This group will match the word \"there\" that appears after the word \"here\" and any sequence of characters 3.\n/\\3\\2\\1 is the replacement part of the command. Here, \\3, \\2, and \\1 are backreferences to the matched groups. They correspond to the words \"there\", any sequence of characters, and \"here\", in that order. So, this command replaces the matched pattern with the word \"there\", followed by any sequence of characters, and ending with the word \"here\" 4.\nSo, in summary, this command searches for the pattern \"here\", followed by any sequence of characters, and ending with \"there\", and replaces it with the same pattern but reversed (\"there\", followed by the original sequence of characters, and ending with \"here\").\n\nI used this techniq on [[ refactoring-into-wikilinks ]].","published":true,"public":true,"date":"2024-01-26T17:21:06.241592","id":200,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Java - ArchWiki","link":"https://wiki.archlinux.org/title/java#Switching_between_JVM","tags":"java","message":"Today I learned that arch has a helper script `archlinux-java` to set the version of java.\n\n\n``` bash\narchlinux-java status\narchlinux-java set <JAVA_ENV_NAME>\n```","published":true,"public":true,"date":"2024-01-26T13:37:36.843707","id":199,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"charmbracelet/mods: AI on the command line","link":"https://github.com/charmbracelet/mods","tags":"llm, ai","message":"This is a pretty sweet interface into llms.  I used it a bit with my son tonight while he was asking me for datapack ideas.\n\n``` bash\n❯ mods -f 'I am trying to have fun on my minecraft server and am creating a minecraft datapack send me some load.mcfuncions that will make it fun'\n```\n\nYou can continue the conversation with a `-C`\n\n``` bash\n❯ mods -C -f 'I like where you are going with number 4, can you make it so that it runs when a player opens a door'\n```\n\nYou can pass it some data\n\n``` bash\ncurl https://waylonwalker.com/thoughts-on-unit-tests/ | mods -f 'summarize this post'\n```","published":true,"public":true,"date":"2024-01-26T02:15:42.512676","id":198,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"charmbracelet/mods: AI on the command line","link":"https://github.com/charmbracelet/mods","tags":"","message":"This is a pretty sweet interface into llms.  I used it a bit with my son tonight while he was asking me for datapack ideas.\n\n``` bash\n❯ mods -f 'I am trying to have fun on my minecraft server and am creating a minecraft datapack send me some load.mcfuncions that will make it fun'\n```\n\nYou can continue the conversation with a `-C`\n\n``` bash\n❯ mods -C -f 'I like where you are going with number 4, can you make it so that it runs when a player opens a door'\n```\n\n```","published":true,"public":true,"date":"2024-01-26T02:15:14.750112","id":197,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Gridfinity | The modular, open-source grid storage system for your workshop.","link":"https://gridfinity.xyz/specification/","tags":"","message":"I am starting to build out some custom tool holders for my tool box, and using gridfinity.  This is a super handy reference guide for spec'ing out the bases.","published":true,"public":true,"date":"2024-01-14T14:52:55.767379","id":196,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Read a Range of Data - LIMIT and OFFSET - SQLModel","link":"https://sqlmodel.tiangolo.com/tutorial/limit-and-offset/","tags":"sqlmodel, sqlalchemy, orm","message":"Today I was running some sqlmodel queries through the sqlalchemy orm.  Admittedly I've not done enough orm queries before, and I've done quite a bit of raw sql. I was trying to get objects from two separate models that had relationships setup.\n\n``` python\nsession.query(User, Images).where(User.id == 3).all()\n```\n\nIt is incredibly slow, and gives me the following warning.\n\n``` python\nSELECT statement has a cartesian product between FROM element(s)\n```\n\nWhat I learned from the SQLModel docs is that you should give it a join to correct this and go much faster.\n\n``` python\nsession.query(User, Images).join(Images).where(User.id == 3).all()\n```\n\n","published":true,"public":true,"date":"2024-01-12T02:18:35.433689","id":195,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Template Designer Documentation — Jinja Documentation (3.0.x)","link":"https://jinja.palletsprojects.com/en/3.0.x/templates/#whitespace-control","tags":"webdev, jinja","message":"html code generated by my jinja templates generally look half garbage because of indents and whitespace all over the place.  I just learned about these pesky Whitespace Control characters that can get rid of the whitespace added from templating.\n\n> You can also strip whitespace in templates by hand. If you add a minus sign (-) to the start or end of a block (e.g. a For tag), a comment, or a variable expression, the whitespaces before or after that block will be removed:\n\n``` html\n{% for item in seq -%}\n    {{ item }}\n{%- endfor %}\n```","published":true,"public":true,"date":"2023-12-26T22:00:42.751164","id":194,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Minecraft Server on Docker (Java Edition)","link":"https://docker-minecraft-server.readthedocs.io/en/latest/","tags":"minecraft","message":"I just learned that if you can exec into the container running minecraft with the itzg/minecraft container you can run `rcon-cli` to get command access to the server.  You need to set the `RCON_PASSWORD` if you want to access rcon remotely, but if you have not already done this and have access to the server you can just run `rcon-cli` when you are in.","published":true,"public":true,"date":"2023-12-25T16:45:59.379235","id":193,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"We Finally Agree On Unit Tests - YouTube","link":"https://www.youtube.com/watch?v=MbU-PKukdMw","tags":"python","message":"Theo's response puts a lot of my feelings about unit testing into words. It's crazy how cargo culty it becomes that the echo chamber of twitter can bring in beliefs that we think we believe, but have not experienced enough or put enough thought in to form our own opinion.\n\nThis video made me think so much that it turned into it's own blog post\n\n[Thoughts on Unit Testing](https://waylonwalker.com/thoughts-on-unit-tests)","published":true,"public":true,"date":"2023-12-22T14:52:25.672410","id":192,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Mastodon.py — Mastodon.py 1.8.1 documentation","link":"https://mastodonpy.readthedocs.io/en/stable/","tags":"python","message":"Mastadon.py is a python api client for mastadon that makes it easy to cross post to mastadon.\n\n``` python\nfrom mastodon import Mastodon\n\nMastodon.create_app(\n    'pytooterapp',\n    api_base_url = 'https://mastodon.social',\n    to_file = 'pytooter_clientcred.secret'\n)\n\nfrom mastodon import Mastodon\n\nmastodon = Mastodon(client_id = 'pytooter_clientcred.secret',)\nmastodon.log_in(\n    'my_login_email@example.com',\n    'incrediblygoodpassword',\n    to_file = 'pytooter_usercred.secret'\n)\n\nmastodon.toot('Tooting from Python using #mastodonpy !')\n```","published":true,"public":true,"date":"2023-12-21T01:59:43.994620","id":191,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"bunny.net - The Content Delivery platform that truly Hops!","link":"https://bunny.net/","tags":"webdev, hosting","message":"bunny.net looks like an interesting cloudflare alternative.","published":true,"public":true,"date":"2023-12-20T16:14:28.860761","id":190,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"IndieWebify.Me - a guide to getting you on the IndieWeb","link":"https://indiewebify.me/","tags":"indieweb","message":"This is a sick guided site to validate indieweb tags on your site.  It makes it much easier than trying to do it yourself.","published":true,"public":true,"date":"2023-12-20T15:04:21.330061","id":189,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"FastAPI - dependency inside Middleware? - Stack Overflow","link":"https://stackoverflow.com/questions/72243379/fastapi-dependency-inside-middleware#answer-72480781","tags":"fastapi, webdev","message":"After struggling to get dependencies inside of middleware I learned that you can make global dependencies at the app level.  I used this to set the user on every single route of the application without needing Depend on getting the user on each route.\n\n\n``` python\nfrom fastapi import Depends, FastAPI, Request\n\n\ndef get_db_session():\n    print(\"Calling 'get_db_session(...)'\")\n    return \"Some Value\"\n\n\ndef get_current_user(session=Depends(get_db_session)):\n    print(\"Calling 'get_current_user(...)'\")\n    return session\n\n\ndef recalculate_resources(request: Request, current_user=Depends(get_current_user)):\n    print(\"calling 'recalculate_resources(...)'\")\n    request.state.foo = current_user\n\n\napp = FastAPI(dependencies=[Depends(recalculate_resources)])\n\n\n@app.get(\"/\")\nasync def root(request: Request):\n    return {\"foo_from_dependency\": request.state.foo}\n```","published":true,"public":true,"date":"2023-12-17T17:05:46.157303","id":188,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Handling Errors - FastAPI","link":"https://fastapi.tiangolo.com/tutorial/handling-errors/","tags":"webdev, fastapi","message":"This page shows how to customize your fastapi errors.  I found this very useful to setup common templates so that I can return the same 404's both programatically and by default, so it all looks the same to the end user.\n\n\n``` python\nfrom fastapi import FastAPI, Request\nfrom fastapi.responses import JSONResponse\n\n\nclass UnicornException(Exception):\n    def __init__(self, name: str):\n        self.name = name\n\n\napp = FastAPI()\n\n\n@app.exception_handler(UnicornException)\nasync def unicorn_exception_handler(request: Request, exc: UnicornException):\n    return JSONResponse(\n        status_code=418,\n        content={\"message\": f\"Oops! {exc.name} did something. There goes a rainbow...\"},\n    )\n\n\n@app.get(\"/unicorns/{name}\")\nasync def read_unicorn(name: str):\n    if name == \"yolo\":\n        raise UnicornException(name=name)\n    return {\"unicorn_name\": name}\n```","published":true,"public":true,"date":"2023-12-17T03:47:43.155771","id":187,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"logs with FastAPI and Uvicorn · Issue #1508 · tiangolo/fastapi","link":"https://github.com/tiangolo/fastapi/issues/1508","tags":"python, fastapi, webdev","message":"Setting an additional log handler to the uvicorn logger for access logs in fastapi was not straightforward, but This post was very helpful.\n\n\n```\n@app.on_event(\"startup\")\nasync def startup_event():\n    logger = logging.getLogger(\"uvicorn.access\")\n    handler = logging.StreamHandler()\n    handler.setFormatter(logging.Formatter(\"%(asctime)s - %(levelname)s - %(message)s\"))\n    logger.addHandler(handler)\n```","published":true,"public":true,"date":"2023-12-15T22:04:42.018204","id":186,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to group FastAPI endpoints in Swagger UI? ","link":"https://stackoverflow.com/questions/63762387/how-to-group-fastapi-endpoints-in-swagger-ui#answer-63762765","tags":"python, fastapi, webdev","message":"        Setting tags in your fastapi endpoints will group them in the docs.  You can also set some metadata around the tags to get nice descriptions.\n\nHere is a full example from the post.\n\n``` python\nfrom fastapi import FastAPI\n\ntags_metadata = [\n    {\"name\": \"Get Methods\", \"description\": \"One other way around\"},\n    {\"name\": \"Post Methods\", \"description\": \"Keep doing this\"},\n    {\"name\": \"Delete Methods\", \"description\": \"KILL 'EM ALL\"},\n    {\"name\": \"Put Methods\", \"description\": \"Boring\"},\n]\n\napp = FastAPI(openapi_tags=tags_metadata)\n\n\n@app.delete(\"/items\", tags=[\"Delete Methods\"])\n@app.put(\"/items\", tags=[\"Put Methods\"])\n@app.post(\"/items\", tags=[\"Post Methods\"])\n@app.get(\"/items\", tags=[\"Get Methods\"])\nasync def handle_items():\n    return\n```","published":true,"public":true,"date":"2023-12-15T15:30:37.808202","id":185,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Waylon Walker (getting focus'd fokais.com) on X: \"Bloggers where do you put your markdown?\" / X","link":"https://twitter.com/_WaylonWalker/status/1734387536716308693","tags":"blogging","message":"Most bloggers on my twitter blog right into a file that goes on git.  I kinda expected to have more database folk.  I have my blog in markdown on git and the editing experience is top notch.  I can just find files edit them in MY EDITOR, push them and I got a post.  I am running thoughts in a sqlite database with a fastapi backend, and holy crap the instant nature of posting feels so much better.  Both sides have good points.","published":true,"public":true,"date":"2023-12-15T14:53:33.747386","id":184,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Show some equivalent list comprehensions in filter examples · Issue #1068 · pallets/jinja","link":"https://github.com/pallets/jinja/issues/1068","tags":"webdev, python","message":"I often want to reach for non existing list comprehensions in jinja 2, Here are a few nice equivalents.\n\n``` python\na: {{ data | selectattr('x', 'gt', 5) | list }}\nb: {{ data | map(attribute='c') | list }} \nc: {{ data | selectattr('x', 'gt', 5) | map(attribute='c') | list }} \n```","published":true,"public":true,"date":"2023-12-14T20:28:34.496725","id":183,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"nvim: `vim.o.cmdheight=0`","link":"https://vi.stackexchange.com/questions/39947/nvim-vim-o-cmdheight-0-looses-the-recording-a-macro-messages","tags":"nvim","message":"I fixed my missing macro recording indicator that I lost and was never quite sure why. (because I forgot that I set cmdheight=0).\n\n``` lua\nvim.cmd [[ autocmd RecordingEnter * set cmdheight=1 ]]\nvim.cmd [[ autocmd RecordingLeave * set cmdheight=0 ]]\n```","published":true,"public":true,"date":"2023-12-14T14:20:17.573986","id":182,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DataDog/ddqa: Datadog's QA manager for releases of GitHub repositories","link":"https://github.com/DataDog/ddqa","tags":"python","message":"DataDog ddqa is building out a textual app and deploying it with pyapp.  They have CI setup to fully build and cross compile their textual tui into github releases that you can just download from their releases page.  This is something I am looking at for markata.  This would be pretty sweet to be able to make it just work on places like windows.  It would also be interesting to try to build a full desktop app with pyapp.","published":true,"public":true,"date":"2023-12-13T22:18:06.843419","id":181,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"ImageMagick – Color Names","link":"https://imagemagick.org/script/color.php","tags":"cli","message":"Full list of imagemagick color names.","published":true,"public":true,"date":"2023-12-13T17:23:32.522510","id":180,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Adam Wathan on X: \"Hear me out. https://t.co/QHkEI6SJYZ\" / X","link":"https://twitter.com/adamwathan/status/1734696245015494711","tags":"webdev, css","message":" I'm going to give this trick a shot on my sites, and see how I like it.\n\n``` css\n* {\n  min-width: 0\n}\n```\n\nDown in the comments [@adamwathan](https://twitter.com/adamwathan/) goes on to say.\n\n\n> Basically every layout overflow bug ever boils down to some flex or grid child needing min-width: 0 😄\n\nOh and [@ryanflorence](https://twitter.com/ryanflorence) also says in the comments.\n\n> I ... do this.\n","published":true,"public":true,"date":"2023-12-13T01:22:17.304666","id":179,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Why YOU should write a blog","link":"https://tushar.lol/post/write-a-blog/","tags":"blogging","message":"Nice message by [@tusharsadhwani](https://twitter.com/sadhlife).\n\n> Write it down.\n\nYou had to dig deeper than face value at something.\n\n> Write it down.\n\nYou had to combine  multiple pages of docs.\n\n> Write it down.\n\nSometing was simply not obvious to you at first and it took someone else to give you that ah ha moment.\n\n> Write it down.\n\nYou had a small discovery that had a marginal impact on your day.\n\n> Write it down.\n\nA blog does not have to be a **Blog**, it can be small meaningful posts.  There are absolutely no rules.  If you think you are going to end up with too many posts, that is a solvable problem, make a search, curate your favorite posts, make multiple feeds.\n\nAt the end of the day.\n\n> Write it down.\n\nThis post itself is a thought, the smallest component to my blogging strategy.\n\n> Write it down.","published":true,"public":true,"date":"2023-12-13T01:08:51.399879","id":178,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Path Operation Advanced Configuration - FastAPI","link":"https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#exclude-from-openapi","tags":"webdev, fastapi","message":"        Excluding routes from fastapi docs, can be done from the route configuration using `include_in_schema`.  This is handy for routes that are not really api based or duplicates.  \n\n\n## From the Docs\n\n``` python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/items/\", include_in_schema=False)\nasync def read_items():\n    return [{\"item_id\": \"Foo\"}]\n```\n\n## trailing slash\n\nI've had better luck just routing both naked and trailing slash routes in fastapi.  I've had api's deployed as a subroute to a site rather than a subdomain, and the automatic redirect betweens them tended to always get messed up.  This is pretty easy fix for the pain is causes just give vim a yyp, and if you don't want deuplicates in your docs, ignore one.\n\n``` python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get(\"/items\")\n@app.get(\"/items/\", include_in_schema=False)\nasync def read_items():\n    return [{\"item_id\": \"Foo\"}]\n```\n\n## favicon.ico\n\nNow you do not need to deploy favicons to your api in any way,  it is nice to have it in your browser tab, but more importantly to me I hate having console errors that are meaningless, this gives the browser something to automatically grab and not log errors.\n\n``` python\n@app.get(\"/favicon.ico\", include_in_schema=False)\ndef get_favicon():\n    return RedirectResponse(url=\"https://fokais.com/favicon.ico\", status_code=status.HTTP_302_FOUND)\n\n```","published":true,"public":true,"date":"2023-12-12T01:37:35.768237","id":177,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Protect API docs behind authentication? · Issue #364 · tiangolo/fastapi","link":"https://github.com/tiangolo/fastapi/issues/364","tags":"webdev, fastapi","message":"You can protect your fastapi docs behind auth so that not only can certain roles not run certain routes, but they cannot even see the docs at all.  This way no one that shouldn't be poking around can even discover routes they shouldn't be using.\n\n\nHere is the soluteion provided by [@kennylajara](https://github.com/kennylajara)\n\n``` python\nfrom fastapi import FastAPI\n\nfrom fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html\nfrom fastapi.openapi.utils import get_openapi\n\nimport secrets\n\nfrom fastapi import Depends, FastAPI, HTTPException, status\nfrom fastapi.security import HTTPBasic, HTTPBasicCredentials\n\napp = FastAPI(\n    title=\"FastAPI\",\n    version=\"0.1.0\",\n    docs_url=None,\n    redoc_url=None,\n    openapi_url = None,\n)\n\nsecurity = HTTPBasic()\n\n\ndef get_current_username(credentials: HTTPBasicCredentials = Depends(security)):\n    correct_username = secrets.compare_digest(credentials.username, \"user\")\n    correct_password = secrets.compare_digest(credentials.password, \"password\")\n    if not (correct_username and correct_password):\n        raise HTTPException(\n            status_code=status.HTTP_401_UNAUTHORIZED,\n            detail=\"Incorrect email or password\",\n            headers={\"WWW-Authenticate\": \"Basic\"},\n        )\n    return credentials.username\n\n\n@app.get(\"/docs\", include_in_schema=False)\nasync def get_swagger_documentation(username: str = Depends(get_current_username)):\n    return get_swagger_ui_html(openapi_url=\"/openapi.json\", title=\"docs\")\n\n\n@app.get(\"/redoc\", include_in_schema=False)\nasync def get_redoc_documentation(username: str = Depends(get_current_username)):\n    return get_redoc_html(openapi_url=\"/openapi.json\", title=\"docs\")\n\n\n@app.get(\"/openapi.json\", include_in_schema=False)\nasync def openapi(username: str = Depends(get_current_username)):\n    return get_openapi(title=app.title, version=app.version, routes=app.routes\n```","published":true,"public":true,"date":"2023-12-12T01:27:04.053232","id":176,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Cancel subscriptions | Stripe Documentation","link":"https://stripe.com/docs/billing/subscriptions/cancel#canceling","tags":"webdev, stripe","message":"This is a handy guide to cancelling stripe subscriptions.\n\n``` python\n# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https://dashboard.stripe.com/apikeys\nimport stripe\nstripe.api_key = \"sk_test_51ODvHtB26msLKqCAPBAo1qkBBuIfT5tQBX6YFWCLMsPixIExxITCRVa9tNCIqkdQS8olhR79NYXsFWBPKsM3LbGO00zEcNQfNI\"\n\nstripe.Subscription.modify(\n  \"sub_49ty4767H20z6a\",\n  cancel_at_period_end=True,\n)\n```\n\nYou can even inverse it by flipping `True` to `False` and re activate the subscription.","published":true,"public":true,"date":"2023-12-10T04:28:33.590692","id":175,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Retrieve an upcoming invoice | Stripe API Reference","link":"https://stripe.com/docs/api/invoices/upcoming","tags":"webdev, stripe","message":"You can find your customers next billing date through the stripe api by using `Invoice`. and passing in customer, customer_details, subscription, or schedule.\n\n\n``` python\nimport stripe\nstripe.api_key = \"sk_test_51ODvHtB26msLKqCAPBAo1qkBBuIfT5tQBX6YFWCLMsPixIExxITCRVa9tNCIqkdQS8olhR79NYXsFWBPKsM3LbGO00zEcNQfNI\"\ninvoice = stripe.Invoice.upcoming(customer=\"cus_NeZwdNtLEOXuvB\")\n```\n\nWithin the invoice, you can find the next_payment_attempt as a epoch.\n\n``` python\ndate = datetime.fromtimestamp(invoice.next_payment_attempt)\namount = invoice.amount_due\ncurrency = invoice.currency\n```\n\n","published":true,"public":true,"date":"2023-12-07T14:49:51.273020","id":174,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Search | Stripe Documentation","link":"https://stripe.com/docs/search#search-query-language","tags":"webdev, stripe","message":"Stripe has it's own query language for querying data.  I'm just getting into using it and it seems pretty good so far.  I needed to lookup the price for products.  I was able to find prices for my product using the python api as shown below.\n\n``` python\nstripe.Price.search(query=\"active: 'true' and product: 'prod_P8SfwtxJ45cWE2'\")\n```","published":true,"public":true,"date":"2023-12-06T21:54:17.284428","id":173,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Stripe keys and IDs","link":"https://gist.github.com/fnky/76f533366f75cf75802c8052b577e2a5","tags":"webdev, stripe","message":"Stripe has so many keys and ids this is a very helpful list to decode what exactly an id is for.","published":true,"public":true,"date":"2023-12-06T13:46:44.396146","id":172,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Overworked - YouTube","link":"https://www.youtube.com/shorts/IVdaysrIS74","tags":"soft","message":"Dang this is such a good message.  I can't exactly relate to being forced into the overworking situation that PirateSofware is talking about.  I can relate to being conditioned to feeling a certain way and changing that is very difficult.  I can also relate to not feeling like I am getting enough done in the day.  Sometimes a bit of separation is good.","published":true,"public":true,"date":"2023-11-30T16:55:05.248146","id":171,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"CSS @media print issues with background-color; - Stack Overflow","link":"https://stackoverflow.com/questions/3893986/css-media-print-issues-with-background-color#answer-14784655","tags":"webdev, css","message":"Get those print colors exact\n\n``` css\nbody{\n  -webkit-print-color-adjust:exact !important;\n  print-color-adjust:exact !important;\n}\n```","published":true,"public":true,"date":"2023-11-30T03:00:52.513563","id":170,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"page-break-after - CSS: Cascading Style Sheets | MDN","link":"https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-after","tags":"webdev, css","message":"I'm working on something that might go to print, so I want the page breaks to happen somewhat in my control as the content author.  As I do my writing I break my content up in to many short sections using h2, sometimes an h3.  These are generally short sections that go together, should stay together, and typically are not too lengthy to cause a large white space in print.\n\nI found a way in css to only allow page breaks to happen on h2 and h3, and it turned out perfect, suck it WSIWIG editors\n\n\n``` css\n* {\n  page-break-before: avoid;\n}\n\nh2,\nh3 {\n  page-break-before: auto;\n}\n```","published":true,"public":true,"date":"2023-11-30T02:38:49.199648","id":169,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Go by Example","link":"https://gobyexample.com/","tags":"go","message":"Fantastic resource for learning go.  You work through small examples quickly, learning single concepts along the way.","published":true,"public":true,"date":"2023-11-29T14:11:42.525494","id":168,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Build a Website or App","link":"https://syntax.fm/show/696/how-to-build-a-website-or-app","tags":"webdev","message":"        Great tips in this one.  They discuss everything from front end to backend, databases and ORMS, here are a few of my favorite points.\n\n* Use good data or good fake data\n  * make it have some variation like long and short text\n* Don't use a database if you need one, static content is eaiser to manage\n* end to end test, (does the site load page x)\n* You DONT NEED all this complexity, you can deploy a site with HTML and CSS.","published":true,"public":true,"date":"2023-11-28T02:04:02.897555","id":167,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Will McGugan on X: \"Just a wee thing that came up today. I think this is kind of neat. https://t.co/Un8FRz2TSJ\" / X","link":"https://twitter.com/willmcgugan/status/1729158038551220477","tags":"tui, textual","message":"Textual is so sick, Will just made a live markdown editor in the terminal!  ","published":true,"public":true,"date":"2023-11-27T16:31:33.972298","id":165,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Sebastián Ramírez on X: \"Now @FastAPI has 65k+ GitHub stars! ✨🎉 Since today, FastAPI has a few more GitHub stars than Flask. 🤯 Now FastAPI is the second most starred Python web framework, right after Django. 🥈 https://t.co/YWi0i665VO\" / X","link":"https://twitter.com/tiangolo/status/1729153717956715007","tags":"fastapi, webdev","message":"Fastapi passes flask in GitHub stars!\n\n[![screenshot of https://twitter.com/tiangolo/status/1729153717956715007](https://shots.wayl.one/shot/?url=https://twitter.com/tiangolo/status/1729153717956715007&height=800&width=450&scaled_width=450&scaled_height=800&selectors=)](https://twitter.com/tiangolo/status/1729153717956715007)\n","published":true,"public":true,"date":"2023-11-27T16:15:36.197405","id":164,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Separations of Concerns is a Lie - YouTube","link":"https://www.youtube.com/watch?v=eMTFzpxR0QQ&t=326","tags":"webdev","message":"Nice take by [@t3dotgg](https://twitter.com/t3dotgg).   Some of the old patterns that go deep into webdev, MVC, separation of concerns, REST, are things we are told to believe on day one,  thrown so many things, no mental bandwidth, or experience to form our own opinions we must take them as fact.  Rarely do we take these facts and revisit them with our new understandings years later.","published":true,"public":true,"date":"2023-11-27T14:49:31.506453","id":163,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Pype|Dev🐍 (py-puh-day) on X: \"@wtravishubbard Management is abhorrent to me\" / X","link":"https://twitter.com/pypeaday/status/1727156823185113304","tags":"words","message":"Today I learned the meaning of abhorrent\n\n> abhorrent\n> ăb-hôr′ənt, -hŏr′-\n> adjective\n> Disgusting, loathsome, or repellent.\n> Feeling repugnance or loathing.","published":true,"public":true,"date":"2023-11-22T03:27:24.487591","id":162,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Heroicons","link":"https://heroicons.com/","tags":"webdev, icons","message":"heroicons is a really nice set of many of the basic icons that you will need for building nice ui's.  They have a really nice copy as svg or jsx button, so that you can just yank it and paste it on your page without any extra packages or installation.","published":true,"public":true,"date":"2023-11-14T01:06:12.584810","id":161,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Uptime Kuma","link":"https://uptime.kuma.pet/","tags":"homelab, k3s, containers","message":"Uptime kuma is a fantastic self hosted monitoring tool.  One docker run command and you are up and running.  Once you are in you have full control over checking status of urls, frequency, allowed timeouts, and a HUGE list of notification providers\n\n\n``` bash\ndocker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1\n```\n\n\nI deployed it in my homelab today.\n\n[![screenshot of https://twitter.com/_WaylonWalker/status/1723077941649707468](https://shots.wayl.one/shot/?url=https://twitter.com/_WaylonWalker/status/1723077941649707468&height=800&width=450&scaled_width=450&scaled_height=800&selectors=)](https://twitter.com/_WaylonWalker/status/1723077941649707468)\n","published":true,"public":true,"date":"2023-11-11T02:46:12.195672","id":160,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"kv - Command | Vault | HashiCorp Developer","link":"https://developer.hashicorp.com/vault/docs/commands/kv","tags":"cli","message":"hashi vault lets you manage secrets right from your cli.\n\n``` bash\n# set your vault url\nexport VAULT_ADDR=https://myvault.mydomain\nvault login\n\n# get a secret\nvault kv get secret/hvac\n\n# put a secret\nvault kv put -mount=secret creds passcode=my-long-passcode\n\n# get it\nvault kv get secret/creds\n\n# == Secret Path ==\n# secret/data/creds\n# \n# ======= Metadata =======\n# Key                Value\n# ---                -----\n# created_time       2023-11-05T02:53:40.978120001Z\n# custom_metadata    <nil>\n# deletion_time      n/a\n# destroyed          false\n# version            3\n# \n# ====== Data ======\n# Key         Value\n# ---         -----\n# bar         baz\n# passcode    my-long-passcode\n\n# get one field\nvault kv get -field=passcode secret/creds\n\n# my-long-passcode\nvault kv put -mount=secret creds bar=baz\n\n# set more keys\nvault kv put -mount=secret creds passcode=my-long-passcode bar=baz\n\n# \n# == Secret Path ==\n# secret/data/creds\n# \n# ======= Metadata =======\n# Key                Value\n# ---                -----\n# created_time       2023-11-05T03:24:14.65958906Z\n# custom_metadata    <nil>\n# deletion_time      n/a\n# destroyed          false\n# version            4\n\nvault kv get secret/creds\n\n# == Secret Path ==\n# secret/data/creds\n# \n# ======= Metadata =======\n# Key                Value\n# ---                -----\n# created_time       2023-11-05T02:53:40.978120001Z\n# custom_metadata    <nil>\n# deletion_time      n/a\n# destroyed          false\n# version            4\n# \n# ====== Data ======\n# Key         Value\n# ---         -----\n# bar         baz\n# passcode    my-long-passcode\n\n```","published":true,"public":true,"date":"2023-11-05T03:26:51.133288","id":158,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"johanhaleby/kubetail: Bash script to tail Kubernetes logs from multiple pods at the same time","link":"https://github.com/johanhaleby/kubetail","tags":"","message":"Kubetail is a pretty sick bash script that allows you to tail logs for multiple pods in one stream.  Very handy when you have more than one replica running.\n\n``` bash\nwget https://raw.githubusercontent.com/johanhaleby/kubetail/master/kubetail\nchmod u+x ./kubetail\n```\n\nNow with kubetail I can tail all the logs for every shot-wayl-one pod in the shot namespace.\n\n``` bash\n./kubetail shot-wayl-one -n shot\n```\n\n![output from running the kubetail command](https://screenshots.waylonwalker.com/kubetail.png)","published":true,"public":true,"date":"2023-10-31T01:04:16.349448","id":157,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(90) Kubernetes Secrets in 5 Minutes! - YouTube","link":"https://www.youtube.com/watch?v=cQAEK9PBY8U&t=186","tags":"infra, k8s","message":"I am converting my docker compose env secrets over to k8s secrets.  This guide was clear and to the point how I can replicate this exact workflow.\n\nFirst set the secret, the easiest way is to use kubectl wtih --from-literal because it automatically base64 encodes for you.\n\n``` bash\nkubectl create secret generic minio-access-key --from-literal=ACCESS_KEY=7FkTV**** -n shot\n```\n\nIf you don't use the `--from-literal` you will have to base64 encode it.\n\n``` bash\necho \"7FkTV****\" | openssl base64\n```\n\nOnce you have your secret deployed, you have to update the container spec in your deployment manifest to get the valueFrom secretKeyRef.\n\n``` yaml\n    spec:\n      containers:\n        - env:\n            - name: ACCESS_KEY\n              valueFrom:\n                secretKeyRef:\n                  key: ACCESS_KEY\n                  name: minio-access-key\n            - name: SECRET_KEY\n              valueFrom:\n                secretKeyRef:\n                  key: SECRET_KEY\n                  name: minio-secret-key\n          image: registry.wayl.one/shot-scraper-api\n          name: shot-wayl-one\n          ports:\n            - containerPort: 5000\n              protocol: TCP\n          resources: {}\n      restartPolicy: Always\n```","published":true,"public":true,"date":"2023-10-30T16:47:19.246501","id":156,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Waylon Walker 🐍 on X: \"Which is more complicated\" / X","link":"https://twitter.com/_WaylonWalker/status/1718300097174270193","tags":"infra, k8s, aws","message":"Wow, shocked at these results.  All this time I've been told and believed that k8s is incredibly hard, and you need a $1M problem before you think about it because it will take a $1M team to maintain it.  So far my experience has been good, and I definitely do not have a $1M problem in my homelab.\n\n[![screenshot of https://twitter.com/_WaylonWalker/status/1718300097174270193](https://shots.wayl.one/shot/?url=https://twitter.com/_WaylonWalker/status/1718300097174270193&height=500&width=700&scaled_width=700&scaled_height=500&selectors=)](https://twitter.com/_WaylonWalker/status/1718300097174270193)\n","published":true,"public":true,"date":"2023-10-30T13:25:53.802572","id":155,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Wes Bos on X: \"🔥 The stale-while-revalidate header is suuuuuuper handy for striking a balance between fast loads and and frequently changed content. Here I am using it to instantly deliver an OG image that takes ~8s to generate. https://t.co/bAiTzSWU9o\" / X","link":"https://twitter.com/wesbos/status/1717923624559005977","tags":"webdev, seo, og","message":"Wes has some of the coolest OG images i've ever seen.  Here he talks about how to enable cache configuration so that its constantly updating the cache without the user waiting for the image to be created.","published":true,"public":true,"date":"2023-10-28T14:29:59.724143","id":154,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"</> htmx ~ Locality of Behaviour (LoB)","link":"https://htmx.org/essays/locality-of-behaviour/","tags":"htmx, webdev","message":"Interesting principle here.  What a great example, If I'm looking at the second jQuery example, I have to dig into dev tools or make some assumtions that this team uses jQuery, and selects by id, therefore I can grep for `$(\"#d1\")`.\n\n> Consider two different implementations of an AJAX request in HTML, the first in htmx:\n``` heml\n<button hx-get=\"/clicked\">Click Me</button>\n\n\n> and the second in jQuery:\n\n``` js\n  $(\"#d1\").on(\"click\", function(){\n    $.ajax({\n         /* AJAX options... */\n    });\n  });\n```\n``` html\n<button id=\"d1\">Click Me</button>\n```","published":true,"public":true,"date":"2023-10-28T01:11:56.947333","id":153,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Creating k8s jobs with python","link":"https://thoughts.waylonwalker.com/post-og/152","tags":"homelab, k3s, containers","message":"I was looking to add running kubernetes jobs to a python cli I am creating, and I found this solution, mostly thanks to `ollama run mistral:7b-instruct-q4_K_M ` and my loose understanding of what the yaml syntax is supposed to look like for a kubernetes job.  This will let me create a job in the cluster, choose the image that runs, the command that is called, and how long until the job expires and is cleaned up.  While the job still exists I can go in and look at the logs, but once its ttl has expired they are gone.\n\n\n``` python\nfrom kubernetes import client, config\n\n# Load the default kubeconfig\nconfig.load_kube_config()\n\n# Define the API client for batch jobs\napi_instance = client.BatchV1Api()\n\n# Create a new job object\njob = client.V1Job(\n    api_version=\"batch/v1\",\n    kind=\"Job\",\n    metadata=client.V1ObjectMeta(name=\"myjob\"),\n    spec=client.V1JobSpec(\n        ttl_seconds_after_finished=100,\n        template=client.V1PodTemplateSpec(\n            metadata=client.V1ObjectMeta(labels={\"app\": \"myjob\"}),\n            spec=client.V1PodSpec(\n                containers=[\n                    client.V1Container(\n                        name=\"myjobcontainer\",\n                        image=\"busybox\",\n                        command=[\"ls\", \"/\"],\n                    ),\n                ],\n                restart_policy=\"Never\",\n            ),\n        ),\n        backoff_limit=1,\n    ),\n)\n\n# Call the Kubernetes API to create the job\napi_instance.create_namespaced_job(namespace=\"default\", body=job)\n```","published":true,"public":true,"date":"2023-10-28T00:52:24.391746","id":152,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Diagnostic - Neovim docs","link":"https://neovim.io/doc/user/diagnostic.html#vim.diagnostic.reset()","tags":"vim","message":"Clear out lsp diagnostics in nvim.\n\n\n``` lua\nlua vim.diagnostic.reset()\n```","published":true,"public":true,"date":"2023-10-25T14:01:06.983913","id":151,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to kill process based on the port number in Linux - Linux Tutorials - Learn Linux Configuration","link":"https://linuxconfig.org/how-to-kill-process-based-on-the-port-number-in-linux","tags":"arch","message":"I've often struggled to find and kill a process using a certain port on archlinux.  Mainly becuase most guides use netstat rather than `ss`.\n\n\nHere is how I just killed the process using port 5000 using `fuser`.\n\n``` bash\nsudo fuser -k 5000/tcp\n```\n\nYou can also get information about the process by running `lsof`\n\n\n``` bash\n❯ lsof -i :5000\nCOMMAND      PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME\nthoughts 1058292 waylon   11u  IPv4 119622828      0t0  TCP *:commplex-main (LISTEN)\n```","published":true,"public":true,"date":"2023-10-23T15:15:02.469324","id":149,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"mkimuram/k8sviz: Generate Kubernetes architecture diagrams from the actual state in a namespace","link":"https://github.com/mkimuram/k8sviz","tags":"homelab, k8s","message":"This is a sick kubernetes architecture diagran generation tool.\n\nHere is an example\n\n![an example output from k8sviz](https://raw.githubusercontent.com/mkimuram/k8sviz/master/examples/wordpress/default.png)\n\n\n## installation\n\n``` bash\n$ curl -LO https://raw.githubusercontent.com/mkimuram/k8sviz/master/k8sviz.sh\n$ chmod u+x k8sviz.sh\n```\n### Usage\n\n``` bash\n./k8sviz.sh --kubeconfig ~/.config/kube/falcon-k3s.yaml -t png -o k8sviz.png\n```\n","published":true,"public":true,"date":"2023-10-22T21:07:26.431681","id":148,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"casey/just: 🤖 Just a command runner","link":"https://github.com/casey/just","tags":"cli, dev","message":"I think just, might just be the thing I have been looking for.  I've been looking for some ci/cd that I can host myself, but everything looks pretty big, so for now I am going to use just as my task runner.\n\n\nI installed with installer.\n\n``` bash\ncurl https://i.wayl.one/casey/just | bash\n```\n\nI set up my devtainer builds with just.  Here is my `justfile`, yes you just need the cli and a file named `justfile`.\n\n``` yaml\ndefault: base alpine slim\nbase: build deploy\nalpine: build-alpine deploy-alpine\nslim: build-slim deploy-slim\n\nbuild:\n    podman build -t registry.wayl.one/devtainer:latest .\ndeploy:\n    podman push registry.wayl.one/devtainer\n\nbuild-alpine:\n    podman build -f docker/Dockerfile.alpine -t registry.wayl.one/devtainer:alpine .\ndeploy-alpine:\n    podman push registry.wayl.one/devtainer:alpine\n\nbuild-slim:\n    podman build -f docker/Dockerfile.slim -t registry.wayl.one/devtainer:slim .\ndeploy-slim:\n    podman push registry.wayl.one/devtainer:slim\n```","published":true,"public":true,"date":"2023-10-22T02:09:57.122410","id":147,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Translate a Docker Compose File to Kubernetes Resources | Kubernetes","link":"https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/","tags":"homelab, k3s, containers","message":"`kompose` is a sick cli to convert docker-compose.yml to kubernetes manifest.\n\n``` bash\n# install\n\ncurl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose\n\nkompose convert\nkompose convert -o deployment.yaml\n```\n","published":true,"public":true,"date":"2023-10-22T02:04:18.367065","id":146,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Daniel Nashed's Blog","link":"https://blog.nashcom.de/nashcomblog.nsf/dx/k3s-podman-and-a-registry.htm","tags":"homelab, containers","message":"Running your own docker registry in one line\n\n\n``` bash\npodman run -d -p 5000:5000 --restart=always --name registry registry:latest\n```","published":true,"public":true,"date":"2023-10-21T01:49:41.888224","id":145,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Kubernetes Persistent Volumes with Deployment and StatefulSet","link":"https://akomljen.com/kubernetes-persistent-volumes-with-deployment-and-statefulset/","tags":"homelab, k3s","message":"Example of how to add a pvc to a deployment.","published":true,"public":true,"date":"2023-10-21T01:47:58.608090","id":144,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Inspect a Kubernetes PersistentVolumeClaim | Frank Sauerburger","link":"https://frank.sauerburger.io/2021/12/01/inspect-k8s-pvc.html","tags":"homelab, k3s","message":"I was curious to see what was going on inside of my minio object storage. Great technique here by Frank to create an inspector pod, then you can do as you wish with the data.\n\nI created the manifest as `pvc-inspector.yml`\n\n``` yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: pvc-inspector\nspec:\n  containers:\n  - image: busybox\n    name: pvc-inspector\n    command: [\"tail\"]\n    args: [\"-f\", \"/dev/null\"]\n    volumeMounts:\n    - mountPath: /pvc\n      name: pvc-mount\n  volumes:\n  - name: pvc-mount\n    persistentVolumeClaim:\n      claimName: pvc-name\n```\n\nThen used it like this.\n\n``` bash\n# create pvc-inspector pod\nkubectl apply -f pvc-inspector.yml\n# exec into inspector\nkubectl exec -it pvc-inspector -- sh\n# explore data\nls /pvc\n# cleanup\nkubectl delete -f pvc-inspector.yml\n```","published":true,"public":true,"date":"2023-10-21T01:34:08.216510","id":143,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Can't create Secret in Kubernetes: illegal base64 data at input - Stack Overflow","link":"https://stackoverflow.com/questions/53394973/cant-create-secret-in-kubernetes-illegal-base64-data-at-input","tags":"homelab, k3s","message":"In order to use k8s secrets manifest you first need to encode the data values.\n\n``` bash\necho -n 'mega_secret_key' | openssl base64\n```","published":true,"public":true,"date":"2023-10-21T00:49:39.898922","id":142,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Can I access k3s using just kubectl (no sudo and no k3s command) : kubernetes","link":"https://www.reddit.com/r/kubernetes/comments/cojjf5/can_i_access_k3s_using_just_kubectl_no_sudo_and/","tags":"homelab, k3s","message":"Right after installing k3s you are going to need to use `sudo` to use any `kubectl` command.  The reason for this is that the default config is owned by root.  To get around this you will need to make your own config and set the `KUBECONFIG` environment variable\n\nTo do this I used `sudo` one last time to copy the `k3s.yaml` file into my own directory and take ownership of it.\n\n``` bash\nsudo cp /etc/rancher/k3s/k3s.yaml /home/waylon/.config/kube\n\nsudo chown -R waylon:waylon ~/.config/kube\n\nexport KUBECONFIG=~/.config/kube/k3s.yaml\n```","published":true,"public":true,"date":"2023-10-20T22:52:00.051953","id":141,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Quick-Start Guide | K3s","link":"https://docs.k3s.io/quick-start","tags":"homelab, k3s","message":"I recently spun up k3s in my homelab.  I'm trying to offload some work off of my free tier fly.io app in order to keep it free tier without crashing.\n\n\n``` bash\n# install and start k3s\ncurl -sfL https://get.k3s.io | sh -\n# check to see if your nodes are started\nsudo kubectl get nodes\n```\n\nMy main hiccup so far was the machine I am running on runs zfs on root, and it would not start the master node.  Rather than figuring out how to make zfs play nice I just pointed k3s to a drive that is not zfs.\n\n``` bash\n# manuallly\nsudo k3s server -d /mnt/vault/.rancher/k3s\n# without editing systemd service\nsudo ln -s /mnt/vault/.rancher/k3s /var/lib/rancher/k3s\n```","published":true,"public":true,"date":"2023-10-20T21:32:03.347608","id":140,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(70) Tailwind Connect 2023 — Keynote - YouTube","link":"https://www.youtube.com/watch?v=CLkxRnRQtDE","tags":"webdev, css, tailwind","message":"Tailwind comes with `space` that I have never heard of that is made to give margin and padding together in one class.  Adam dropped it here in the Tailwind Connect conference.","published":true,"public":true,"date":"2023-10-19T13:41:24.832324","id":139,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Episode #433 Litestar: Effortlessly Build Performant APIs - [Talk Python To Me Podcast]","link":"https://talkpython.fm/episodes/show/433/litestar-effortlessly-build-performant-apis","tags":"webdev, python","message":"Litestar is an interesting api framework similar to fastpi, that I am interested to check out to see if it fits into some project scope.  It sounds like it comes with a lot more batteries included for things like auth, but does not have hard opinions like django.  At this point I'm not jumping off of fastapi, but its something I want to try.","published":true,"public":true,"date":"2023-10-17T18:45:08.841320","id":138,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Delete a Postgres Cluster · Fly Docs","link":"https://fly.io/docs/postgres/managing/deleting/","tags":"infra, fly","message":"Deleting a fly postgres db cluster was not straightforward to me as the app name is not inferred from the toml like it is for the main app.\n\n\n``` bash\nfly apps destroy <pg-app-name>\nfly pg db list -a <pg-app-name>\n```","published":true,"public":true,"date":"2023-10-17T18:42:30.943710","id":137,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Twitter Requires full image_urls","link":"None","tags":"webdev, meta, twitter","message":"Yet again twitter cards were causing me pain.  This time it was me not realizing that they require full urls, and not relative or abolute urls.\n\n> This was not working\n\n``` html\n    <meta name=\"twitter:image\" content=\"/shot/?path={{ request.url|quote_plus }}\" content-type='image/png'/>\n```\n\n> This does work with a full url\n\n``` html\n    <meta name=\"twitter:image\" content=\"https://thoughts.waylonwalker.com/shot/?path={{ request.url|quote_plus }}\" content-type='image/png'/>\n```","published":true,"public":true,"date":"2023-10-17T17:30:09.205079","id":136,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(68) Has Web Development Regressed? A Conversation with Wes Bos | Backend Banter 023 - YouTube","link":"https://www.youtube.com/watch?v=EMg-AruNQQs","tags":"webdev, interviews","message":"Boot.dev is crushing it with these interviews. This one has Wes Bos, includes teaching, webdev, where is webdev headed.","published":true,"public":true,"date":"2023-10-17T01:33:41.094490","id":135,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"David-Kunz/gen.nvim: Neovim plugin to generate text using LLMs with customizable prompts","link":"https://github.com/David-Kunz/gen.nvim","tags":"llm, ai","message":"This seems like a promising tool to use with ollama.","published":true,"public":true,"date":"2023-10-14T02:31:29.944530","id":134,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Ollama","link":"https://ollama.ai/","tags":"llm, ai","message":"ollama is the easiest to get going local llm tool that I have tried, and seems to be crazy fast.  It feels faster than chat gpt, which has not been the experience I have had previously with running llm's on my hardware.\n\n\n``` bash\ncurl https://i.jpillora.com/jmorganca/ollama | bash\nollama serve\nollama run mistral\nollama run codellama:7b-code\nollama list\n```\n\n","published":true,"public":true,"date":"2023-10-14T02:31:03.032847","id":133,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"sysid/sse-starlette","link":"https://github.com/sysid/sse-starlette","tags":"htmx, webdev","message":"sse-starlette provides server sent events for startlette and FastApi.  I'm evaluating for use with htmx.\n\n## Installation:\n\n``` bash\npip install sse-starlette\n```\n## Usage:\n\n``` python\nimport asyncio\nimport uvicorn\nfrom starlette.applications import Starlette\nfrom starlette.routing import Route\nfrom sse_starlette.sse import EventSourceResponse\n\nasync def numbers(minimum, maximum):\n    for i in range(minimum, maximum + 1):\n        await asyncio.sleep(0.9)\n        yield dict(data=i)\n\nasync def sse(request):\n    generator = numbers(1, 5)\n    return EventSourceResponse(generator)\n\nroutes = [\n    Route(\"/\", endpoint=sse)\n]\n\napp = Starlette(debug=True, routes=routes)\n\nif __name__ == \"__main__\":\n    uvicorn.run(app, host=\"0.0.0.0\", port=8000, log_level='info')\n```","published":true,"public":true,"date":"2023-10-12T19:14:45.260267","id":132,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Overflow - Tailwind CSS","link":"https://tailwindcss.com/docs/overflow","tags":"webdev, css, tailwind","message":"Controlling overflow with tailwindcss\n\n## Examples\n\n``` html\n<div class=\"overflow-visible ...\"></div>\n\n<div class=\"overflow-hidden ...\"></div>\n```","published":true,"public":true,"date":"2023-10-11T19:16:21.185234","id":131,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How To Create a Custom Scrollbar","link":"https://www.w3schools.com/howto/howto_css_custom_scrollbar.asp","tags":"webdev, css","message":"Default scrollbars on a dark theme website are just the ugliest thing.  This page covers all the pseudo selectors needed to style the scrollbar.\n\n``` css\n/* width */\n::-webkit-scrollbar {\n  width: 10px;\n}\n\n/* Track */\n::-webkit-scrollbar-track {\n  background: #f1f1f1;\n}\n\n/* Handle */\n::-webkit-scrollbar-thumb {\n  background: #888;\n}\n\n/* Handle on hover */\n::-webkit-scrollbar-thumb:hover {\n  background: #555;\n}\n```","published":true,"public":true,"date":"2023-10-11T19:11:49.567684","id":130,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"wincent/aspects/dotfiles/files/.zshrc at 85fc42d9e96d408a5b36739f6c10e6d686b70b34 · wincent/wincent","link":"https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc","tags":"cli, shell, zsh","message":"Wincent (Greg Hurrel) has a pretty solid and fast zshrc.  I recently grabbed his completion section and it seems to be working better than whatever I had.\n\nzsh completion snippet\n\n\n``` bash\n#\n# Completion\n#\n\nfpath=($HOME/.zsh/completions $fpath)\n\nautoload -U compinit\ncompinit -u\n\n# Make completion:\n# - Try exact (case-sensitive) match first.\n# - Then fall back to case-insensitive.\n# - Accept abbreviations after . or _ or - (ie. f.b -> foo.bar).\n# - Substring complete (ie. bar -> foobar).\nzstyle ':completion:*' matcher-list '' '+m:{[:lower:]}={[:upper:]}' '+m:{[:upper:]}={[:lower:]}' '+m:{_-}={-_}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'\n\n# Colorize completions using default `ls` colors.\nzstyle ':completion:*' list-colors ''\n\n# Allow completion of ..<Tab> to ../ and beyond.\nzstyle -e ':completion:*' special-dirs '[[ $PREFIX = (../)#(..) ]] && reply=(..)'\n\n# $CDPATH is overpowered (can allow us to jump to 100s of directories) so tends\n# to dominate completion; exclude path-directories from the tag-order so that\n# they will only be used as a fallback if no completions are found.\nzstyle ':completion:*:complete:(cd|pushd):*' tag-order 'local-directories named-directories'\n\n# Categorize completion suggestions with headings:\nzstyle ':completion:*' group-name ''\nzstyle ':completion:*:descriptions' format %F{default}%B%{$__WINCENT[ITALIC_ON]%}--- %d ---%{$__WINCENT[ITALIC_OFF]%}%b%f\n\n# Enable keyboard navigation of completions in menu\n# (not just tab/shift-tab but cursor keys as well):\nzstyle ':completion:*' menu select\n``` ","published":true,"public":true,"date":"2023-10-10T12:38:22.577084","id":129,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Change Autocomplete Styles in WebKit Browsers | CSS-Tricks - CSS-Tricks","link":"https://css-tricks.com/snippets/css/change-autocomplete-styles-webkit-browsers/","tags":"webdev, css","message":"All the hover, select, autofil, focus combinations have left me confused on how to consistently get my form elements styled in dark mode\n\nThis snippet from CSS tricks has fixed all the different states for me to give me full control.\n```\n/* Change Autocomplete styles in Chrome*/\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover, \ninput:-webkit-autofill:focus,\ntextarea:-webkit-autofill,\ntextarea:-webkit-autofill:hover,\ntextarea:-webkit-autofill:focus,\nselect:-webkit-autofill,\nselect:-webkit-autofill:hover,\nselect:-webkit-autofill:focus {\n  border: 1px solid green;\n  -webkit-text-fill-color: green;\n  -webkit-box-shadow: 0 0 0px 1000px #000 inset;\n  transition: background-color 5000s ease-in-out 0s;\n}\n```","published":true,"public":true,"date":"2023-10-10T01:48:04.552483","id":128,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"florimondmanca/arel: Lightweight browser hot reload for Python ASGI web apps","link":"https://github.com/florimondmanca/arel","tags":"webdev, fastapi","message":"arel is a \"Lightweight browser hot reload for Python ASGI web apps\"\n\nI just implemented this on my thoughts website using fastapi, and it's incredibly fast and lightweight.  There just two lines of js that make a web socket connection back to the backend that watches for changes.\n\n\nWhen in development mode, this snippet gets injected directly on the page and does a refresh when arel detects a change.\n\n``` js\nconst ws = new WebSocket(\"ws://localhost:5000/hot-reload\");\nws.onmessage = () => window.location.reload();\n```","published":true,"public":true,"date":"2023-10-08T15:22:23.678568","id":127,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Automatic browser reloading in FastAPI","link":"https://gist.github.com/vrslev/6d0602bfa939a01844f645c608afb85a","tags":"webdev, fastapi","message":"I just discovered [arel](https://pypi.org/project/arel/) for hot reloading python applications when content changes from this snippet that implements it for fatapi.\n\nOn app startup add the `/hot-reload` routes if in **DEBUG** mode.\n\n``` python\n\nimport os\n\nimport arel\nfrom fastapi import FastAPI, Request\nfrom fastapi.templating import Jinja2Templates\n\napp = FastAPI()\ntemplates = Jinja2Templates(\"templates\")\n\nif _debug := os.getenv(\"DEBUG\"):\n    hot_reload = arel.HotReload(paths=[arel.Path(\".\")])\n    app.add_websocket_route(\"/hot-reload\", route=hot_reload, name=\"hot-reload\")\n    app.add_event_handler(\"startup\", hot_reload.startup)\n    app.add_event_handler(\"shutdown\", hot_reload.shutdown)\n    templates.env.globals[\"DEBUG\"] = _debug\n    templates.env.globals[\"hot_reload\"] = hot_reload\n\n\n@app.get(\"/\")\ndef index(request: Request):\n    return templates.TemplateResponse(\"index.html\", context={\"request\": request})\n\n# run:\n# DEBUG=true uvicorn main:app --reload\n```\n\ninstall `arel` and make sure you have `uvicorn[standard]` for websocket support.\n\n``` text\nfastapi\nuvicorn[standard]\narel\njinja2\n```\n\nIn the template, load the script when in debug mode.\n\n``` html\n<body>\n  {% block content %}{% endblock %}\n\n  <!-- Hot reload script -->\n  {% if DEBUG %} {{ hot_reload.script(url_for('hot-reload')) | safe }} {% endif\n  %}\n</body>\n```","published":true,"public":true,"date":"2023-10-08T15:16:56.263448","id":126,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Bob Belderbos on X: \"Forget Python for a sec, here's how Vim helped me out today ... 💪 📈 Ever felt like you needed a quick string replacement without diving into a script? Here's a Vim trick I just used ... I wanted to replace all occurrences of: name,name@example.com,0,171,,2023-09-21 With:…\" / X","link":"https://twitter.com/bbelderbos/status/1709525676154368055","tags":"vim, regex","message":"I need to learn regex capture groups better.  This is so dang powerful. I really like the \\v that bob uses here, it really does cut down on the terseness of all the special characters.\n\n> I wanted to replace all occurrences of:\n>\n> name,name@example.com,0,171,,2023-09-21\n>\n> With:\n>\n> name,name@example.com\n>\n> Easy to do with Python, but what about a bit of > regex in Vim?\n>\n> :%s/\\v([^,]+,[^,]+),.*/\\1/","published":true,"public":true,"date":"2023-10-05T01:34:19.536735","id":124,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"teej dv 🔭 on X: \"Hypermedia fixes this HATEOAS gonna hate\" / X","link":"https://twitter.com/teej_dv/status/1708258701008593173","tags":"htmx, webdev","message":"HATEOAS gonna hate. More and more htmx seems like the js library for backend devs.  So rather than making 55 rest calls here, just make an endpoint that does what you want it to do with one, or a few requests.","published":true,"public":true,"date":"2023-10-05T01:13:37.625690","id":123,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Open source, not open contribution with Ben Johnson (Changelog Interviews #433) |> Changelog","link":"https://changelog.com/podcast/433","tags":"sqlite, data, database","message":"Ben Johnson was on the Changelog a few years back covering his work on litestream, and talks about why he chose to go open source, but not open contribution.\n\n> You should have a good reason to move off of sqlite.","published":true,"public":true,"date":"2023-10-05T01:11:19.021034","id":122,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Point-in-time recovery - Wikipedia","link":"https://en.wikipedia.org/wiki/Point-in-time_recovery","tags":"catalyst","message":"I just learned that the term PITR means **Point In Time Recovery**.  I have never seen this term, but it is most often referred to in relation to database recoveries.","published":true,"public":true,"date":"2023-10-03T13:25:36.739314","id":121,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DjangoCon Europe 2023 | Use SQLite in production - YouTube","link":"https://www.youtube.com/watch?v=yTicYJDT1zE&t=2s","tags":"sqlite, data, database","message":"Very inspiring talk, TLDR, you probably don't need a database server.  sqlite will probably be faster, simpler to maintain, and simpler to test your application.","published":true,"public":true,"date":"2023-10-03T13:22:19.071159","id":120,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"benbjohnson/litestream: Streaming replication for SQLite.","link":"https://github.com/benbjohnson/litestream","tags":"sqlite, data, database","message":"        `litestream` is a sick cli tool for steaming replicas of sqlite.  It automatically does daily snapshots, and streams all of the writes to the replica live.\n\n\n## install\n\nInstall is fast using installer, no compilation, just copy the binary and run.\n\n``` bash\ncurl https://i.wayl.one/benbjohnson/litestream\n```","published":true,"public":true,"date":"2023-10-01T02:19:18.709834","id":119,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Why I Built Litestream - Litestream","link":"https://litestream.io/blog/why-i-built-litestream/","tags":"sqlite, data, database","message":"As applications scale to the edge, to put compute as close to the user as possible, database queries back to the master node get slower and slower.  Enter sqlite replication, put the database wtih the application code and replicate from master.","published":true,"public":true,"date":"2023-09-30T16:16:47.192026","id":118,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"I'm All-In on Server-Side SQLite · The Fly Blog","link":"https://fly.io/blog/all-in-on-sqlite-litestream/","tags":"sqlite, data, database","message":"SQLite is the next big database trend.  with more horizontal scaling, close to user read heavy applications, having your database in the same application stack makes a lot of sense.  Tools like litestream are going to enable global distribution in an impressive way.","published":true,"public":true,"date":"2023-09-30T14:54:33.190373","id":117,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"LiteFS Cloud: Distributed SQLite with Managed Backups · The Fly Blog","link":"https://fly.io/blog/litefs-cloud/","tags":"sqlite, data, database","message":"Fly.io's solution to sqlite managed backups.I definitely want to look into this a bit, but moreso the tech under the hook litestream.","published":true,"public":true,"date":"2023-09-30T14:49:41.773662","id":116,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"jpillora/installer: One-liner for installing binaries from Github releases","link":"https://github.com/jpillora/installer","tags":"cli, installer, github","message":"This is a sick looking bash script generator for installing binaries off of github releases.  it reccomends curl into bash, but you could curl into install.sh  and toss that in your dotfiles repo or wherever.\n\nInstall installer with installer\n\n``` bash\ncurl -s https://i.jpillora.com/installer | bash\n```","published":true,"public":true,"date":"2023-09-23T00:59:09.380809","id":115,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to run pods as systemd services with Podman | Enable Sysadmin","link":"https://www.redhat.com/en/blog/podman-run-pods-systemd-services","tags":"linux, podman, container","message":"podman comes with a nice command for generating systemd service files (units).\n\n``` bash\n$ podman pod create --name=my-pod\n635bcc5bb5aa0a45af4c2f5a508ebd6a02b93e69324197a06d02a12873b6d1f7\n\n$ podman create --pod=my-pod --name=container-a -t centos top\nc04be9c4ac1c93473499571f3c2ad74deb3e0c14f4f00e89c7be3643368daf0e\n\n$ podman create --pod=my-pod --name=container-b -t centos top\nb42314b2deff99f5877e76058ac315b97cfb8dc40ed02f9b1b87f21a0cf2fbff\n\n$ cd $HOME/.config/systemd/user\n\n$ podman generate systemd --new --files --name my-pod\n/home/vrothberg/.config/systemd/user/pod-my-pod.service\n/home/vrothberg/.config/systemd/user/container-container-b.service\n/home/vrothberg/.config/systemd/user/container-container-a.service\n```","published":true,"public":true,"date":"2023-09-22T01:12:19.048341","id":114,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Pagefind | Pagefind — Static low-bandwidth search at scale","link":"https://pagefind.app/","tags":"webdev, search, wasm","message":"Pagefind is absolutely insane.  I've tried a number of static site searches, and found them all hard to get get going, clunky and not the best experience as a user or developer.\n\nI setup pagefind in about 2 minutes on my site where it found and indexed 833 pages in 2 minutes.\n\nThe only downside I see so far is that it is a lot of bandwidth to the user.  On simulated slow 3G you can definitly feel it, but not terrible.  Anything slower and its going to start feeling frustrating.\n\n> edit: I have actually fully deployed it on waylonwalker.com, and its fast!\n\ncreate the index\n\n``` bash\nnpx -y pagefind --site public --serve\n```\n\nThen I put this on a page, it looks really nice on a white background, but would need some work to drop into a dark theme.\n\n``` html\n<link href=\"/pagefind/pagefind-ui.css\" rel=\"stylesheet\">\n<script src=\"/pagefind/pagefind-ui.js\"></script>\n<div id=\"search\"></div>\n<script>\n    window.addEventListener('DOMContentLoaded', (event) => {\n        new PagefindUI({ element: \"#search\", showSubResults: true });\n    });\n</script>\n```","published":true,"public":true,"date":"2023-09-20T01:04:41.204481","id":112,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(27) Bo Burnham, I mean Miriah, says lower your programming expectations a lot... - YouTube","link":"https://www.youtube.com/shorts/J8rbUHDlZ7k","tags":"","message":"Dang Mariah, killing it with continuous learning perspective.","published":true,"public":true,"date":"2023-09-13T18:51:55.599814","id":111,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Simon Willison on X: \"Anyone got a lead on a good embedding model that can embed both images and text into the same space, so you can search for \"dog\" and get back images most likely to contain a dog? It looks like VisualBERT is one, what are others?\" / X","link":"https://twitter.com/simonw/status/1700528222382027039","tags":"llm, ai","message":"Kinda mindblown that this is even possible.  This is so far outside of my current thinking that i didn't even think of an elegant way to implement semantic search accross images and text at the same time.  I know it happens at Google, but I envision that as still text search accross tags and meta data about the image.\n\nBased on the number of responses CLIP is the thing that does this.","published":true,"public":true,"date":"2023-09-10T00:05:15.283623","id":110,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"aca/emmet-ls: Emmet support based on LSP.","link":"https://github.com/aca/emmet-ls","tags":"webdev, nvim","message":"This is the greatest nvim emmet plugin I have tried.  In the past I had tried the vim plugin a few times and just could not get a good flow with the keybindings and found it confusing for my occasional use.  `emmet-ls` just uses lsp-completion, so its the same flow as other completions.\n\nYou can try it out by installing with `:Mason`\n\n## config\n\n``` lua\nlocal lspconfig = require('lspconfig')\nlocal configs = require('lspconfig/configs')\nlocal capabilities = vim.lsp.protocol.make_client_capabilities()\ncapabilities.textDocument.completion.completionItem.snippetSupport = true\n\nlspconfig.emmet_ls.setup({\n    -- on_attach = on_attach,\n    capabilities = capabilities,\n    filetypes = { \"css\", \"eruby\", \"html\", \"javascript\", \"javascriptreact\", \"less\", \"sass\", \"scss\", \"svelte\", \"pug\", \"typescriptreact\", \"vue\" },\n    init_options = {\n      html = {\n        options = {\n          -- For possible options, see: https://github.com/emmetio/emmet/blob/master/src/config.ts#L79-L267\n          [\"bem.enabled\"] = true,\n        },\n      },\n    }\n})\n```","published":true,"public":true,"date":"2023-09-08T12:34:38.684173","id":109,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"LLM now provides tools for working with embeddings","link":"https://simonwillison.net/2023/Sep/4/llm-embeddings/","tags":"llm, ai","message":"Simon's llm cli is getting quite interesting.  I really want to run some clustering on my website content.","published":true,"public":true,"date":"2023-09-07T00:35:55.951234","id":108,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Formatter","link":"https://biomejs.dev/formatter/","tags":"webdev, cli","message":"Tried out biome today and it worked better than prettier on jinja templates, I might adopt this over prettier.","published":true,"public":true,"date":"2023-09-07T00:32:00.670935","id":107,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"</> htmx ~ The disable-element Extension","link":"https://v1.htmx.org/extensions/disable-element/","tags":"htmx, webdev","message":"An extension to disable elements during flight of an htmx request, Looks super useful for things like a create or delete button where the server would end up with an error if you double delete or double create.  This eliminates an error path that the user might see under normal use of the ui.","published":true,"public":true,"date":"2023-09-02T17:02:58.879811","id":106,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"</> htmx ~ hx-indicator Attribute","link":"https://htmx.org/attributes/hx-indicator/","tags":"htmx, webdev","message":"The `htmx-request` class is added to `htmx-target` elements.  You can target this css selector to create  loading state throbbers.\n\nBy default the target element will the `self`, but you can use the typical htmx css selector to select which element will recieve the `htmx-request` class while the request is running.\n\nThe only way to override the name of the class is through config.","published":true,"public":true,"date":"2023-09-02T16:59:30.578667","id":105,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(19) The Truth About HTMX | Prime Reacts - YouTube","link":"https://www.youtube.com/watch?v=2hMrk7A8Wf0&t=2081s","tags":"htmx, webdev","message":"Prime concisely made sense of why htmx is so awesome compared to what has become modern reactive web dev in 2 minutes.  I had never thought of it this way and it's incredible.\n\nOne thing I have comepletely missed out on with my use of htmx is setting the disabled state while the server is working, what a genius move!","published":true,"public":true,"date":"2023-09-01T19:02:47.566956","id":104,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"</> htmx ~ Examples ~ Updating Other Content","link":"https://htmx.org/examples/update-other-content/","tags":"webdev, htmx","message":"Three ways to support updating other content.  Fantastic article walking through the different ways to update other parts of the screen using htmx.\n\nIn htmx there is no 2 way data binding, the dom is your state, and if you have elements derived from the same data on the screen in different places you need to think about how to keep them in sync.","published":true,"public":true,"date":"2023-08-26T01:03:10.151131","id":103,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Bigger Applications - Multiple Files - FastAPI","link":"https://fastapi.tiangolo.com/tutorial/bigger-applications/#another-module-with-apirouter","tags":"python, api, fastapi","message":" Fastapi lets you tag your `APIRouter`'s so that the swagger docs are grouped according to the router.\n\n``` python\nrouter = APIRouter(tags=['router'])\n```\n\nNow all routes in `router` will appear in the router group in the swagger docs.","published":true,"public":true,"date":"2023-08-24T14:51:23.450169","id":102,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Custom pages and templates - Datasette documentation","link":"https://docs.datasette.io/en/stable/custom_templates.html#serving-static-files","tags":"","message":"Datasette has its own static server that can host assets such as style sheets.\n\n\n``` bash\ndatasette -m metadata.json --static assets:static-files/ \n```","published":true,"public":true,"date":"2023-08-23T14:37:27.778730","id":100,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Preline UI - Tailwind CSS component library | Preline UI, crafted with Tailwind CSS","link":"https://preline.co/docs/index.html","tags":"tailwindcss, css","message":"Tailwind css component library.  There are many examples with copy and pastabily with the tailwind classes already setup.","published":true,"public":true,"date":"2023-08-21T15:10:54.020125","id":99,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Tailwind CSS Cheat Sheet","link":"https://nerdcave.com/tailwind-cheat-sheet","tags":"tailwindcss, css","message":"A nice searchable cheatsheet for tailwindcss classes.","published":true,"public":true,"date":"2023-08-21T15:03:41.464163","id":98,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"cURL Command Without Using Cache | Baeldung on Linux","link":"https://www.baeldung.com/linux/curl-without-cache#adding-the-pragma-http-header","tags":"curl, cli","message":"Busting cache with curl.  I'm not sure how much gets cached by curl, but I have ran into several cases where I am looking for new content and I want to ensure the content is new and no chance of being cached.\n\nThis article suggests 3 different techniques.\n\n``` bash\ncurl -H 'Cache-Control: no-cache, no-store' http://www.example.com\ncurl -H 'Pragma: no-cache' http://www.example.com\ncurl http://www.example.com/?xyzzyspoon\n```","published":true,"public":true,"date":"2023-08-21T13:39:41.224649","id":97,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"SQLite FTS5 Extension","link":"https://www.sqlite.org/fts5.html","tags":"sqlite, data, database","message":"sqlite has 3 different tokenizers, `porter, ascii, trigram`.  \n\nThese can be used with sqlite-utils.\n\n``` bash\nsqlite-utils enable-fts --tokenize porter database.db post title message tags\n```\n\nAnd with the python api.\n\n``` python\ndb = Database('database.db')\ndb[\"post\"].enable_fts(\n                [\"title\", \"message\", \"tags\"], create_triggers=True, tokenize=\"trigram\"\n            )\nposts = list(db[\"post\"].search(search))\n```\n\n\n","published":true,"public":true,"date":"2023-08-21T13:33:24.464635","id":96,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"sharkdp/bat: A cat(1) clone with wings.","link":"https://github.com/sharkdp/bat","tags":"linux, cli","message":"Bat is my favorite pager, its the one for me that seems to just work more than the rest. colors, syntax highlighting, line numbers search, it just feels the most natural.","published":true,"public":true,"date":"2023-08-21T13:28:06.955196","id":95,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"sqlite_utils Python library - sqlite-utils","link":"https://sqlite-utils.datasette.io/en/stable/python-api.html#full-text-search","tags":"python, sql, sqlite, fts","message":"sqlite-utils is primarily a cli tool for sqlite operations such as enabling full text search, and executing searches, but it also has a nice python api that is exposed and pretty straightforward to use.\n\n``` python\nfrom sqlite_utils import Database\ndb = Database(\"database.db\")\ndb[\"post\"].enable_fts([\"title\", \"message\", \"tags])\ndb[\"post\"].search(\"water\")\n```\n\nThis returns a generator object that you can iterate over the row objects with.","published":true,"public":true,"date":"2023-08-20T14:32:39.850665","id":94,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Format All Files in a Directory with Prettier | by Dr. Derek Austin 🥳 | Level Up Coding","link":"https://levelup.gitconnected.com/how-to-format-all-files-in-a-directory-with-prettier-5f0ff5f4ffb2","tags":"cli, prettier","message":"Use prettier to format all files in a directory.  By default prettier does not write, it just echos out the format that it would do.  Give it the `--write` and it will write the changes to the files.\n\n``` bash\nprettier --write .\n```\n\nI just used this on my thoughts repo.\n\n``` bash\nprettier --write templates\n```","published":true,"public":true,"date":"2023-08-19T14:58:09.396566","id":93,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"simonw/datasette-render-markdown: Datasette plugin for rendering Markdown","link":"https://github.com/simonw/datasette-render-markdown","tags":"python, data, database, sqlite","message":"datasette really does everything doesn't it!","published":true,"public":true,"date":"2023-08-16T00:48:07.053364","id":90,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"simonw/shot-scraper: A command-line utility for taking automated screenshots of websites","link":"https://github.com/simonw/shot-scraper","tags":"python, screenshot, webdev","message":"        > A command-line utility for taking automated screenshots of websites\n\n\nDaaaang, this is such an elegantly simple way to get web screenshots with a cli.  I was literally up and running with two commands on my arch linux machine (which it warned was unsupported by playwright).\n\n``` python\npip install shot-scraper\n# Now install the browser it needs:\nshot-scraper install\nshot-scraper waylonwalker.com\nshot-scraper https://datasette.io/ \nshot-scraper https://datasette.io/ -h 1280 -w 1920\nshot-scraper https://datasette.io/ -h 480 -w 720\nshot-scraper shot --selector '#posts' https://thoughts.waylonwalker.com/post/89\n```\n\n> Note `shot-scraper https://datasette.io/ ` is a full length screenshot of the entire page.\n\nOh and its pretty dang fast, let alone the setup time, this crushes on startup time in my attempts to use a headless browser in the past.","published":true,"public":true,"date":"2023-08-16T00:05:33.491709","id":89,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"shot-scraper: automated screenshots for documentation, built on Playwright","link":"https://simonwillison.net/2022/Mar/10/shot-scraper/#a-complex-example","tags":"python, docs, playwright","message":"An interesting way to build automatically annotaatd docs with arrows pointing to elements on a webpage.","published":true,"public":true,"date":"2023-08-15T23:55:17.740078","id":88,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(128) #learning #webdevelopment - YouTube","link":"https://www.youtube.com/shorts/wsEuPYFpDgk","tags":"soft","message":"I'd never given this much thought, but there are so many guides that are complete guides for beginner workflows, but once you get beyond beginner there is likely no manual for what you are trying to do in programming.  There is no guide that will tell you the best way to get your companies salesforce data, alongside of the ERP data and present it to the users who need to know in a way that compels them to make the right decisions.  You are going to have to build this out for yourself by piecing together knowledge about each subject.","published":true,"public":true,"date":"2023-08-11T18:33:40.611860","id":81,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"HTML Over The Wire | Hotwire","link":"https://hotwired.dev/","tags":"webdev","message":"An alternative approach to building modern web withhout heavy js and json, but instead html over the wire, keeping the logic in the backend of rails.\n\n","published":true,"public":true,"date":"2023-08-11T01:12:07.193591","id":80,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How do I post form data using Curl?","link":"https://reqbin.com/req/c-sma2qrvp/curl-post-form-example","tags":"","message":"How to pass form data with curl, give it the d.\n\n``` bash\ncurl -X POST https://reqbin.com/echo/post/form\n   -H \"Content-Type: application/x-www-form-urlencoded\" \n   -d \"param1=value1&param2=value2\" \n```","published":true,"public":true,"date":"2023-08-10T20:19:05.323234","id":79,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Lifecycle Hooks | Vue.js","link":"https://vuejs.org/guide/essentials/lifecycle.html#lifecycle-diagram","tags":"webdev, vuejs","message":"A super handy reference to the vuejs lifecycle.\n\n<img src=\"https://vuejs.org/assets/lifecycle.16e4c08e.png\" alt=\"vuejs lifecycle\" style=\"\n    width: 100%;\n\">","published":true,"public":true,"date":"2023-08-09T13:46:02.823436","id":78,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Use HTML to Open a Link in a New Tab","link":"https://www.freecodecamp.org/news/how-to-use-html-to-open-link-in-new-tab/","tags":"html, webdev","message":"Most of the time when creating links in html you want to maintain the default behavior, as this is what users are going to expect, but sometimes your site behaves such that it does not fit, and it does something unexpected anyways.  in this case you might want to make the default behavior to open the link in a new tab rather than relying on users to control click.\n\nUse this with restraint as this can make your site feel janky and do things that do not feel natural to the web.\n\n``` html\n<p>Check out <a href=\"https://www.freecodecamp.org/\" target=\"_blank\" rel=\"noopener noreferrer\">freeCodeCamp</a>.</p>\n```","published":true,"public":true,"date":"2023-08-09T13:44:01.762122","id":77,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Create Models with a Many-to-Many Link - SQLModel","link":"https://sqlmodel.tiangolo.com/tutorial/many-to-many/create-models-with-link/","tags":"python, api, fastapi","message":"Creating many to many relationships with sqlmodel requires a LinkTable Model.  The link model will keep track of the linked id's between each of the models.\n\n<img src=\"https://sqlmodel.tiangolo.com/img/tutorial/many-to-many/many-to-many.svg\" alt=\"many-to-many relationship model\" style=\"\n    width: 100%;\n\">\n\n``` python\nfrom typing import List, Optional\n\nfrom sqlmodel import Field, Relationship, Session, SQLModel, create_engine\n\n\nclass HeroTeamLink(SQLModel, table=True):\n    team_id: Optional[int] = Field(\n        default=None, foreign_key=\"team.id\", primary_key=True\n    )\n    hero_id: Optional[int] = Field(\n        default=None, foreign_key=\"hero.id\", primary_key=True\n    )\n\n\nclass Team(SQLModel, table=True):\n    id: Optional[int] = Field(default=None, primary_key=True)\n    name: str = Field(index=True)\n    headquarters: str\n\n    heroes: List[\"Hero\"] = Relationship(back_populates=\"teams\", link_model=HeroTeamLink)\n\n\nclass Hero(SQLModel, table=True):\n    id: Optional[int] = Field(default=None, primary_key=True)\n    name: str = Field(index=True)\n    secret_name: str\n    age: Optional[int] = Field(default=None, index=True)\n\n    teams: List[Team] = Relationship(back_populates=\"heroes\", link_model=HeroTeamLink)\n```","published":true,"public":true,"date":"2023-08-09T13:37:15.909651","id":76,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"python - How to use a Pydantic model with Form data in FastAPI? - Stack Overflow","link":"https://stackoverflow.com/questions/60127234/how-to-use-a-pydantic-model-with-form-data-in-fastapi","tags":"python, fastapi, htmx, pydantic, webdev","message":"I went down the route of leveraging the `json-enc` extention in htmx, but later realized that this completely breaks browsers/users who do not wish to use javascript.  While most of the web would feel quite broken with javascript disabled, I don't want to contribute to that without good reason. \n\nTaking a second look into this issue, rather than using `json-enc`, and using as_form to get form data into a model keeps the nice DX fo everything being a pydantic model, but the site still works without js.  with js htmx kicks in, you get a spa like experience by loading partials onto the page, and without, you just get a full page reload.\n\n## the implementation\n\ncopied from https://stackoverflow.com/questions/60127234/how-to-use-a-pydantic-model-with-form-data-in-fastapi\n\n\n``` python\nimport inspect\nfrom typing import Type\n\nfrom fastapi import Form\nfrom pydantic import BaseModel\nfrom pydantic.fields import ModelField\n\ndef as_form(cls: Type[BaseModel]):\n    new_parameters = []\n\n    for field_name, model_field in cls.__fields__.items():\n        model_field: ModelField  # type: ignore\n\n        new_parameters.append(\n             inspect.Parameter(\n                 model_field.alias,\n                 inspect.Parameter.POSITIONAL_ONLY,\n                 default=Form(...) if model_field.required else Form(model_field.default),\n                 annotation=model_field.outer_type_,\n             )\n         )\n\n    async def as_form_func(**data):\n        return cls(**data)\n\n    sig = inspect.signature(as_form_func)\n    sig = sig.replace(parameters=new_parameters)\n    as_form_func.__signature__ = sig  # type: ignore\n    setattr(cls, 'as_form', as_form_func)\n    return cls\n```\n\nAnd the usage looks like\n\n\n``` python\n@as_form\nclass Test(BaseModel):\n    param: str\n    a: int = 1\n    b: str = '2342'\n    c: bool = False\n    d: Optional[float] = None\n\n\n@router.post('/me', response_model=Test)\nasync def me(request: Request, form: Test = Depends(Test.as_form)):\n    return form\n```\n","published":true,"public":true,"date":"2023-08-08T13:46:19.525870","id":75,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"chebykinn/sedmario: NES Super Mario Bros level 1 written in pure sed!","link":"https://github.com/chebykinn/sedmario","tags":"","message":"🤯 NES Super Mario Bros level 1 written in pure sed, this is madmess.","published":true,"public":true,"date":"2023-08-08T01:13:03.312256","id":74,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Formatting on save · jose-elias-alvarez/null-ls.nvim Wiki","link":"https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Formatting-on-save#code","tags":"vim, nvim","message":"neovim stopped formatting on save for me awhile ago and I have just been dealing with it.  looks like there may have been an api change, idk.\n\n\nI had to make this update.4\n\n``` diff\n- vim.lsp.buf.format()\n+ vim.lsp.buf.format({async=false})\n``` ","published":true,"public":true,"date":"2023-08-06T01:19:23.399621","id":73,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Debugging | pywebview","link":"https://pywebview.flowrl.com/guide/debugging.html","tags":"python, webdev, desktop","message":"How to enable debug mode in pywebview.\n\n\n``` python\nimport webview\n\nwebview.create_window('Woah dude!', 'https://pywebview.flowrl.com/hello')\nwebview.start(debug=True)\n```","published":true,"public":true,"date":"2023-08-05T18:04:04.754546","id":72,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"`ValueError: Constraint must have a name` in alembic 1.10.0 · Issue #1195 · sqlalchemy/alembic","link":"https://github.com/sqlalchemy/alembic/issues/1195","tags":"python, data, database, alembic","message":"After a nasty time with alembic upgrades, thoughts is about to get a new users table.  This may have came from incorrectly setting up alembic for sqlite from the start, but I was able to fix the issue with this GitHub issue.\n\n``` python\nalembic sqlite ValueError: Constraint must have a name\n```\n\nThe change I needed to make to get my migration to run.\n\n``` diff        - batch_op.create_foreign_key(None, 'user', ['author_id'], ['id'])\n\n        + batch_op.create_foreign_key('fk_post_author_id_user', 'user', ['author_id'], ['id'])\n```","published":true,"public":true,"date":"2023-08-05T01:25:07.256174","id":71,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Use Alembic Check to check for possible upgrades","link":"None","tags":"python, data, database, alembic","message":"Since using alembic I have been just running out a new revision checking its content and deleting it if its empty, today I learned there is an `alembic check` command to check for operations that need to be created.\n\n``` bash\n❯ alembic check\nINFO  [alembic.runtime.migration] Context impl SQLiteImpl.\nINFO  [alembic.runtime.migration] Will assume non-transactional DDL.\nNo new upgrade operations detected.\n```","published":true,"public":true,"date":"2023-08-05T01:22:06.855438","id":70,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"API — Jinja Documentation (3.0.x)","link":"https://jinja.palletsprojects.com/en/3.0.x/api/#jinja2.Environment.compile_templates","tags":"python, jinja, webdev","message":"🤯 jinja comes with a loader to `pre-compile` templates!  Defihnitely need to look at this for `markata`, as `jinja` is till one of the biggest hot spots.","published":true,"public":true,"date":"2023-08-04T23:54:05.328064","id":69,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"API — Jinja Documentation (3.0.x)","link":"https://jinja.palletsprojects.com/en/3.0.x/api/#jinja2.FileSystemLoader","tags":"python, jinja, webdev","message":"I've definitely been missing out on setting up a proper jinja loader on a few projects, I need to lean on this a bit more.\n\n``` python\nclass jinja2.FileSystemLoader(searchpath, encoding='utf-8', followlinks=False):\n    '''\n    Load templates from a directory in the file system.\n    '''\n```\n> The path can be relative or absolute. Relative paths are relative to the current working directory.\n\n``` python\nloader = FileSystemLoader(\"templates\")\n# A list of paths can be given. The directories will be searched in order, stopping at the first matching template.\nloader = FileSystemLoader([\"/override/templates\", \"/default/templates\"])\n```","published":true,"public":true,"date":"2023-08-04T23:35:09.924278","id":68,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(124) Tailwind CSS Crash Course - YouTube","link":"https://www.youtube.com/watch?v=UBOj6rqRUME","tags":"webdev, css","message":"Nice intro into tailwind, I definitely started grasping some of the concepts after watching Brad.","published":true,"public":true,"date":"2023-08-04T12:55:03.532519","id":67,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"GitHub - wagoodman/dive: A tool for exploring each layer in a docker image","link":"https://github.com/wagoodman/dive","tags":"docker","message":"Really cool tui to inspect docker imaages that runs with docker.","published":true,"public":true,"date":"2023-08-02T12:14:01.975612","id":66,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"GZIP Compression Test | GiftOfSpeed","link":"https://www.giftofspeed.com/gzip-test/","tags":"webdev","message":"A nice tool to check compression on a public url.","published":true,"public":true,"date":"2023-08-01T13:11:35.416358","id":65,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Read a Range of Data - LIMIT and OFFSET - SQLModel","link":"https://sqlmodel.tiangolo.com/tutorial/limit-and-offset/?h=#combine-limit-and-offset-with-where","tags":"python","message":"Implement paging in sqlmodel with where, limit, and offset.\n\n``` python\ndef select_heroes():\n    with Session(engine) as session:\n        statement = select(Hero).where(Hero.age > 32).limit(3)\n        results = session.exec(statement)\n        heroes = results.all()\n        print(heroes)\n```","published":true,"public":true,"date":"2023-08-01T00:10:15.009725","id":64,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"DuckDB vs. MotherDuck — should you switch to the cloud version? | Kestra","link":"https://kestra.io/blogs/2023-07-28-duckdb-vs-motherduck","tags":"data, database, duckdb","message":"duckdb is a new in process database that has been making its rounds in analytics for its high performance in those applications.  \n\nMother duck is  a centeralized server that brings manages storage, data sharing and an ide to duckdb.","published":true,"public":true,"date":"2023-07-31T22:36:12.780982","id":63,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Center things - Textual","link":"https://textual.textualize.io/how-to/center-things/","tags":"python, textual, tui","message":"How to center things in textual. Textual has a very unique way of styling text user interfaces for the terminal using css.  If you know css it feels natural.\n\n@willmcgugan, has put together a great article on how to center things in textual\n\nhere the final result\n\n\n``` python\nfrom textual.app import App, ComposeResult\nfrom textual.widgets import Static\n\nQUOTE = \"Could not find you in Seattle and no terminal is in operation at your classified address.\"\n\n\nclass CenterApp(App):\n    \"\"\"How to center things.\"\"\"\n\n    CSS = \"\"\"\n    Screen {\n        align: center middle;\n    }\n\n    #hello {\n        background: blue 50%;\n        border: wide white;\n        width: 40;\n        height: 9;\n        text-align: center;\n        content-align: center middle;\n    }\n    \"\"\"\n\n    def compose(self) -> ComposeResult:\n        yield Static(QUOTE, id=\"hello\")\n\n\nif __name__ == \"__main__\":\n    app = CenterApp()\n    app.run()\n```","published":true,"public":true,"date":"2023-07-30T16:31:55.076689","id":62,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"s3-tree · PyPI","link":"https://pypi.org/project/s3-tree/","tags":"python, cloud, data, s3","message":"Super useful way to show a tree view of  an s3 bucket's structure!\n\n``` python\npip install s3-tree\n```\n\n\n``` python\ns3-tree bucketname\n```","published":true,"public":true,"date":"2023-07-30T14:37:06.599690","id":61,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"python - SQLAlchemy ORDER BY DESCENDING? - Stack Overflow","link":"https://stackoverflow.com/questions/4186062/sqlalchemy-order-by-descending","tags":"python, sql, sqlalchemy","message":"How to sort results from a sqlalchemy based orm.\n\n``` python\n.order_by(model.Entry.amount.desc())\n```\n\nI needed this to enable paging on my thoughts api.\n\n``` python\n@post_router.get(\"/posts/\")\nasync def get_posts(\n    *,\n    request: Request,\n    session: Session = Depends(get_session),\n    hx_request: Annotated[str | None, Header()] = None,\n    accept: Annotated[str | None, Header()] = None,\n    current_user: Annotated[User, Depends(try_get_current_active_user)],\n    page_size: int = 10,\n    page: int = 1,\n) -> Posts:\n    \"get all posts\"\n    statement = (\n        select(Post)\n        .where(Post.published)\n        .order_by(Post.id.desc())\n        .limit(page_size)\n        .offset((page - 1) * page_size)\n    )\n    posts = session.exec(statement).all()\n    posts = Posts(__root__=posts)\n\n    if isinstance(current_user, RedirectResponse):\n        is_logged_in = False\n    else:\n        is_logged_in = True\n\n    if hx_request and page == 1 and len(posts.__root__) == 0:\n        return HTMLResponse('<ul id=\"posts\"><li>No posts</li></ul>')\n    if hx_request and len(posts.__root__) == 0:\n        return HTMLResponse(\"\")\n    if not hx_request and len(posts.__root__) == 0:\n        return [\"no posts\"]\n    if hx_request:\n        return templates.TemplateResponse(\n            \"posts.html\",\n            {\n                \"request\": request,\n                \"config\": config,\n                \"posts\": posts,\n                \"md\": md,\n                \"is_logged_in\": is_logged_in,\n                \"page\": page,\n            },\n        )\n\n    if accept.startswith(\"text/html\"):\n        return templates.TemplateResponse(\n            \"base.html\",\n            {\n                \"request\": request,\n                \"config\": config,\n                \"posts\": posts,\n                \"md\": md,\n                \"is_logged_in\": is_logged_in,\n                \"page\": page,\n            },\n        )\n\n    return posts\n\n```","published":true,"public":true,"date":"2023-07-29T22:30:25.120916","id":60,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"kndndrj/nvim-dbee: Interactive database client for neovim","link":"https://github.com/kndndrj/nvim-dbee","tags":"nvim, data, database","message":"A neovim database client that I need to check out.","published":true,"public":true,"date":"2023-07-29T01:08:20.164423","id":59,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Relocating the Docker root directory - IBM Documentation","link":"https://www.ibm.com/docs/en/z-logdata-analytics/5.1.0?topic=compose-relocating-docker-root-directory","tags":"linux, docker","message":"A very straightforward guide to moving your docker data, such as container storage to a different location.  In my case I wanted it off of my boot drive.","published":true,"public":true,"date":"2023-07-29T01:07:06.295744","id":58,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host's /etc/resolv.conf","link":"https://github.com/containers/aardvark-dns","tags":"linux, arch","message":"I ran into some dns issues while running podman on arch, aparantly I had missed an optional dependency of aardvark-dns for container to container dns resolution.\n\n``` bash\nparu -S aardvark-dns\n```","published":true,"public":true,"date":"2023-07-29T01:05:22.359098","id":57,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Podman - ArchWiki","link":"https://wiki.archlinux.org/title/Podman","tags":"linux, podman","message":"I kept running into limits in the number of subuid and subgid's I had on my system by default.  As always thank the arch wiki guide for having the most comprehensive yet consice guide to setup podman.\n\nWhat I needed to do to fix the error.\n\n``` bash\nusermod --add-subuids 100000-165535 --add-subgids 100000-165535 username\n```","published":true,"public":true,"date":"2023-07-29T01:03:23.492285","id":56,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"TestDisk Step By Step - CGSecurity","link":"https://www.cgsecurity.org/wiki/TestDisk_Step_By_Step","tags":"linux","message":"`testdisk` is an amazing command line utility (interactive tui) that just saved me a hard drive that was filled with data, but every machine that I plugged it into told me that it was completely unpartitioned.","published":true,"public":true,"date":"2023-07-29T01:00:51.771079","id":55,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Using Rich Inspect to interrogate Python objects - Textual","link":"https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/","tags":"python, rich, terminal, debugging","message":"I love rich inspect.  It's one of my most often used features of rich.  It gives you a great human readable insight into python object instances.\n\n``` python\n>>> from rich import inspect\n>>> text_file = open(\"foo.txt\", \"w\")\n>>> inspect(text_file)\n```\n\nI have a pyflyby entry for it so that I can just run it ang get automatic imports.  To not clash with the standard library inspect, which is quite useful on it's own, I have aliased it to `rinspect`.\n\n``` python\nfrom rich import inspect as rinspect\n```","published":true,"public":true,"date":"2023-07-29T00:58:00.248817","id":54,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Wesley Aptekar-Cassels | Reasons to avoid Javascript CDNs","link":"https://blog.wesleyac.com/posts/why-not-javascript-cdn","tags":"webdev","message":"And this is why we don't run cdn in prod, respect your users who can't control where the assets are stored.  There are so many **fast** static hosting providers out there, if you are worried about performance reasons use one of those to self host.","published":true,"public":true,"date":"2023-07-29T00:31:14.568015","id":53,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"</> htmx ~ The json-enc Extension","link":"https://htmx.org/extensions/json-enc/","tags":"python, fastapi, htmx","message":"json-enc extension converts url encoded form values into json encoded data, this is very useful for fastapi to have the same interface for htmx and curl type of interfaces.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":52,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Header Parameters - FastAPI","link":"https://fastapi.tiangolo.com/tutorial/header-params/#declare-header-parameters","tags":"python, fastapi, webdev","message":"Getting request headers in fastapi has a pretty nice stetup, it allows you to get headers values as function arguments, \n\nI was able to use headers to detect if a request was made from htmx or not.\n\n> If the request was made from htmx, then we want a html format, otherwise I'm probably hitting the api programatically from something like `curl` or `python`\n\n``` python\n@post_router.post(\"/post/\")\nasync def post_post(\n    request: Request,\n    post: PostCreate,\n    current_user: Annotated[User, Depends(try_get_current_active_user)],\n    session: Session = Depends(get_session),\n    is_hx_request: Annotated[str | None, Header()] = None,\n) -> PostRead:\n    \"create a post\"\n    print('hx_request', hx_request)\n    db_post = Post.from_orm(post)\n    session.add(db_post)\n    session.commit()\n    session.refresh(db_post)\n    if is_hx_request:\n        return templates.TemplateResponse(\"post_item.html\", {\"request\": request, \"config\": config, \"post\": db_post})\n    return db_post\n\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":51,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"1j01/textual-paint: :art: MS Paint... in your terminal.","link":"https://github.com/1j01/textual-paint","tags":"python, textual","message":"[1j01](https://github.com/1j01) created a complete working clone of ms paint in the terminal using the textual framework.  It's incredible.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":50,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"sqlite-utils now supports plugins","link":"https://simonwillison.net/2023/Jul/24/sqlite-utils-plugins/","tags":"python, data, sql","message":"As the title states sqlite-utils now supports plugins.  I dug in just a bit and Simon implemented this completely with entrypoints, no framework or library at all.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":49,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(113) Session vs Token Authentication in 100 Seconds - YouTube","link":"https://www.youtube.com/watch?v=UBUNrFtufWo","tags":"webdev, auth","message":"Great short explaination of session vs token authentication.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":48,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Form Data - FastAPI","link":"https://fastapi.tiangolo.com/tutorial/request-forms/#define-form-parameters","tags":"fatapi, webdev","message":"Getting form data inside of fastapi was not intuitive to me at first. Everything I had used in fastapi leaned on pydantic models.  Form data comes in differently and needs collected differently.\n\n``` python\nfrom typing import Annotated\n\nfrom fastapi import FastAPI, Form\n\napp = FastAPI()\n\n\n@app.post(\"/login/\")\nasync def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):\n    return {\"username\": username}\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":47,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"pywebview","link":"https://pywebview.flowrl.com/guide/usage.html","tags":"python, pywebview","message":"I am creating this post from a desktop app that I _created_ in 3 lines.\n\n``` python\nimport webview\n\nwebview.create_window('Woah dude!', 'https://thoughts.waylonwalker.com')\nwebview.start()\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":46,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Column INSERT/UPDATE Defaults — SQLAlchemy 1.4 Documentation","link":"https://docs.sqlalchemy.org/en/14/core/defaults.html#server-invoked-ddl-explicit-default-expressions","tags":"python, sql, sqlalchemy","message":"sqlalchemy server_defaults end up as defaults in the database when new values are inserted.\n\n``` python\nt = Table(\n    \"test\",\n    metadata_obj,\n    Column(\"abc\", String(20), server_default=\"abc\"),\n    Column(\"created_at\", DateTime, server_default=func.sysdate()),\n    Column(\"index_value\", Integer, server_default=text(\"0\")),\n)\n\n```\n\n``` sql\nCREATE TABLE test (\n    abc varchar(20) default 'abc',\n    created_at datetime default sysdate,\n    index_value integer default 0\n)\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":45,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Template Designer Documentation — Jinja Documentation (3.1.x)","link":"https://jinja.palletsprojects.com/en/3.1.x/templates/#include","tags":"python, webdev, jinja2","message":"A feature of jinja that I just discovered is including sub templates. Here is an example from the docs.\n\n\n``` html\n{% include 'header.html' %}\nBody goes here.\n{% include 'footer.html' %}\n```\n\nAnd inside of my thoughts project I used it to render posts.\n\n``` html\n<ul id='posts'>\n    {% for post in posts.__root__ %}\n    {% include 'post_item.html' %}\n    {% endfor %}\n</ul>\n```\n\n> note that post_item.html automatically inherits the post variable.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":44,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Templates - FastAPI","link":"https://fastapi.tiangolo.com/advanced/templates/","tags":"python, fastapi, webdev","message":"A guide to add Jinja2Templates to fastapi.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":43,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"</> htmx ~ Documentation","link":"https://htmx.org/docs/#swapping","tags":"htmx, webdev","message":"A complete reference of all of the htmx swapping methods.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":42,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"python 3.x - FastAPI redirection for trailing slash returns non-ssl link - Stack Overflow","link":"https://stackoverflow.com/questions/63511413/fastapi-redirection-for-trailing-slash-returns-non-ssl-link","tags":"fastapi, webdev","message":"I am trying to use htmx on a new fastapi site for my thoughts, and have been hitting this error. \n\n``` js\nMixed Content: The page at 'https://front.mydomain.com/#/clients/1' was loaded over HTTPS, but requested an insecure resource 'http://back.mydomain/jobs/?_end=25&_order=DESC&_sort=id&_start=0&client_id=1'. This request has been blocked; the content must be served over HTTPS.\n```\n\n## What is happening\n\nI have an htmx component that gets the current users name, but if they are not logged in the backend redirects to a login form.\n\n``` html\n        <div hx-get='/users/me' hx-trigger='load'>\n            get me\n        </div>\n```\n\nBut for some reason when the front end gets this redirect, it tries to do it through http, and flags it as insecure.\n\n## The solution\n\nTo solve this issue, the post directs to set the `--forwarded-allow-ips` to '*'\n\n``` bash\nuvicorn thoughts.api.app:app --port 5000 --reload --log-level info --host 0.0.0.0 --workers 1 --forwarded-allow-ips '*'\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":40,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"</> htmx ~ The client-side-templates Extension","link":"https://htmx.org/extensions/client-side-templates/","tags":"htmx, webdev","message":"Using templates with htmx requires the client-side-templates extension, and the template engine to be loaded in a `<script>` tag.\n\nexample htmx using templates.\n\n``` html\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width\">\n  <script src=\"https://unpkg.com/htmx.org\"></script>\n  <script src=\"https://unpkg.com/htmx.org/dist/ext/client-side-templates.js\"></script>\n  <script src=\"https://unpkg.com/mustache@latest\"></script>\n</head>\n<body>\n  <div hx-ext=\"client-side-templates\">\n    <button hx-get=\"https://jsonplaceholder.typicode.com/todos/1\"\n            hx-swap=\"innerHTML\"\n            hx-target=\"#content\"\n            mustache-template=\"foo\">\n      Click Me\n    </button>\n\n    <p id=\"content\">Start</p>\n\n    <template id=\"foo\">\n      <p> {% raw %}{{userID}}{% endraw %} and {% raw %}{{id}}{% endraw %} and {% raw %}{{title}}{% endraw %} and {% raw %}{{completed}}{% endraw %}</p>\n    </template>\n  </div>\n</body>\n</html>\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":39,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Static Files - FastAPI","link":"https://fastapi.tiangolo.com/tutorial/static-files/","tags":"python, fastapi, webdev","message":"Mounting static files in fastapi.\n\n``` python\nfrom fastapi import FastAPI\nfrom fastapi.staticfiles import StaticFiles\n\napp = FastAPI()\n\napp.mount(\"/static\", StaticFiles(directory=\"static\"), name=\"static\")\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":38,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(109) HTMX looks pretty neat #coding #javascript - YouTube","link":"https://www.youtube.com/shorts/IqE7juQBr6A","tags":"htmx, webdev","message":"Love the poling example with hx-trigger='every 1s'.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":37,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"First-class session support in FastAPI · Issue #754 · tiangolo/fastapi","link":"https://github.com/tiangolo/fastapi/issues/754","tags":"python, fastapi, security","message":"Here is a snippet provided by @tiangolo to store the users jwt inside of a session cookie in fatapi.  This was written in feb 12, 2020 and admits that this is not a well documented part of fastapi.\n\n> It's already in place. More or less like the rest of the security tools. And it's compatible with the rest of the parts, integrated with OpenAPI (as possible), but probably most importantly, with dependencies.\n\n> It's just not properly documented yet. 😞\n\n> But still, it works 🚀 e.g.\n\n``` python\nfrom fastapi import FastAPI, Form, HTTPException, Depends\nfrom fastapi.security import APIKeyCookie\nfrom starlette.responses import Response, HTMLResponse\nfrom starlette import status\nfrom jose import jwt\n\n\napp = FastAPI()\n\ncookie_sec = APIKeyCookie(name=\"session\")\n\nsecret_key = \"someactualsecret\"\n\nusers = {\"dmontagu\": {\"password\": \"secret1\"}, \"tiangolo\": {\"password\": \"secret2\"}}\n\n\ndef get_current_user(session: str = Depends(cookie_sec)):\n    try:\n        payload = jwt.decode(session, secret_key)\n        user = users[payload[\"sub\"]]\n        return user\n    except Exception:\n        raise HTTPException(\n            status_code=status.HTTP_403_FORBIDDEN, detail=\"Invalid authentication\"\n        )\n\n\n@app.get(\"/login\")\ndef login_page():\n    return HTMLResponse(\n        \"\"\"\n        <form action=\"/login\" method=\"post\">\n        Username: <input type=\"text\" name=\"username\" required>\n        <br>\n        Password: <input type=\"password\" name=\"password\" required>\n        <input type=\"submit\" value=\"Login\">\n        </form>\n        \"\"\"\n    )\n\n\n@app.post(\"/login\")\ndef login(response: Response, username: str = Form(...), password: str = Form(...)):\n    if username not in users:\n        raise HTTPException(\n            status_code=status.HTTP_403_FORBIDDEN, detail=\"Invalid user or password\"\n        )\n    db_password = users[username][\"password\"]\n    if not password == db_password:\n        raise HTTPException(\n            status_code=status.HTTP_403_FORBIDDEN, detail=\"Invalid user or password\"\n        )\n    token = jwt.encode({\"sub\": username}, secret_key)\n    response.set_cookie(\"session\", token)\n    return {\"ok\": True}\n\n\n@app.get(\"/private\")\ndef read_private(username: str = Depends(get_current_user)):\n    return {\"username\": username, \"private\": \"get some private data\"}\n```\n\n","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":36,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Harlequin SQL IDE - DuckDB","link":"https://duckdb.org/docs/guides/sql_editors/harlequin","tags":"python, data, duckdb, textual, harlequin","message":"Harlequin is a pretty sweet example of what textual can be used to create.   Its a terminal based sql ide for DuckDB.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":35,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Python API - DuckDB","link":"https://duckdb.org/docs/api/python/overview.html","tags":"python, data, duckdb","message":"To persist data in duckdb you need to first make a connection to a duck db database.\n\n``` python\ncon = duckdb.connect('file.db')\n```\n\nThen work off of the connection `con` rather than `duckdb`.\n\n\n``` python\ncon.sql('CREATE TABLE test(i INTEGER)')\ncon.sql('INSERT INTO test VALUES (42)')\n# query the table\ncon.table('test').show()\n# explicitly close the connection\ncon.close()\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":34,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"SQL on Pandas - DuckDB","link":"https://duckdb.org/docs/guides/python/sql_on_pandas","tags":"python, data, duckdb, pandas","message":"duckdb can just query any pandas dataframe that is in memory.\n\n> I tried running it against a list of objects and got this error.  Great error message that gives me supported types right in the message.\n\n``` python\nMake sure that \"posts\" is either a pandas.DataFrame, duckdb.DuckDBPyRelation, pyarrow Table, Dataset, RecordBatchReader, Scanner, or NumPy ndarrays with supported format\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":33,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"pytest-subtests · PyPI","link":"https://pypi.org/project/pytest-subtests/","tags":"python, pytest","message":"pytest-subtests is a package to register multiple subtests within a similar test function.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":32,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Dark Form","link":"https://codepen.io/Godex/pen/DLgQbg","tags":"webdev, css","message":"A nice codepen reference for dark forms.   I am using it for my thoughts chrome extension.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":31,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"doyensec/wsrepl: WebSocket REPL for pentesters","link":"https://github.com/doyensec/wsrepl","tags":"python, websockets, textual","message":"Very inspiring textual project to check out how they set up the ui.  Their intro video has a pretty epic dev experience.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":29,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(1) Doyensec on Twitter: \"Announcing wsrepl, the WebSocket testing tool from Doyensec! This intuitive tool is super easy to use and makes automation around WebSockets simple! Check out our blog for the details and download it today! https://t.co/km5m7k6Pb0 #doyensec #appsec #websockets #burpsuite https://t.co/UVLymuSk95\" / Twitter","link":"https://twitter.com/Doyensec/status/1681320727465672706","tags":"python, websockets, textual","message":"wsrepl is an epic websocket repl built in python on the textual framework.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":28,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Filter Data - WHERE - SQLModel","link":"https://sqlmodel.tiangolo.com/tutorial/where/#filter-rows-using-where-with-sqlmodel","tags":"python, fastapi, sqlmodel","message":"When fetching pydantic models from the database with sqlmodel, and you cannot select your item by id, you probably need to use a where clause.  This is the sqlmodel way of doing it.\n\n> Here is a snippet of how I am using sqlmodel select and where to find a post by link in my thoughts database.\n\n``` python\n@post_router.get(\"/link/\")\nasync def get_post_by_link(\n    *,\n    session: Session = Depends(get_session),\n    link: str,\n) -> PostRead:\n    \"get one post by link\"\n    link = urllib.parse.unquote(link)\n    print(f'link: {link}')\n    post = session.exec(select(Post).where(Post.link==link)).first()\n    if not post:\n        raise HTTPException(status_code=404, detail=f\"Post not found for link: {link}\")\n\n    return post\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":27,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"URL Decoding query strings or form parameters in Python | URLDecoder","link":"https://www.urldecoder.io/python/","tags":"python, urlib, fastapi","message":"In order to turn url encoded links back into links that I would find in the database of my thoughts project I need to urldecode them when they hit the api.  When anything hits the api it must urlencode the links in order for them to be sent correctly as data and not get parsed as part of the url.\n\n\n> Here is a snippet of how I am using urlib.parse.unquote to un-encode encoded urls so that I can fetch posts from the database.\n\n``` python\n@post_router.get(\"/link/\")\nasync def get_post_by_link(\n    *,\n    session: Session = Depends(get_session),\n    link: str,\n) -> PostRead:\n    \"get one post by link\"\n    link = urllib.parse.unquote(link)\n    print(f'link: {link}')\n    post = session.exec(select(Post).where(Post.link==link)).first()\n    if not post:\n        raise HTTPException(status_code=404, detail=f\"Post not found for link: {link}\")\n\n    return post\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":26,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"encodeURIComponent() - JavaScript | MDN","link":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent","tags":"javascript, webdev","message":"In order to send data that includes special characters such as `/` in a url you need to url encode it.  You have probably seen these many times in urls with things like %20 for spaces.\n\nI'm working on a chrome extension to make quick blog posts, like thoughts or a persistent bookmark tool with comments.  The backend is written in fastapi and when I check to see if I have a post for a page I need to url encode it.\n\n``` bash\ncurl -X 'GET' \\\n  'https://thoughts.waylonwalker.com/link/?link=https%3A%2F%2Fhtmx.org%2Fextensions%2Fclient-side-templates%2F' \\\n  -H 'accept: application/json'\n```\n\n> curl example generated from the fastapi swagger docs.\n\nHere is how I used javascript's `encodeURIComponent` to turn my chrome extension into a notification when I already have a post for the current page.\n\n``` js\n// Event listener for tab changes\nchrome.tabs.onActivated.addListener(function (activeInfo) {\n  // Get the active tab information\n  chrome.tabs.get(activeInfo.tabId, function (tab) {\n    const url = tab.url || \"\";\n\n    getData(`https://thoughts.waylonwalker.com/link/?link=${encodeURIComponent(url)}`).then((data) => {\n        console.log('link data: ', data);\n      if (data.hasOwnProperty('detail')) {\n        chrome.browserAction.setBadgeText({ text: \"\" });\n      } else {\n        localStorageKey = `formData-${url}`;\n        chrome.browserAction.setBadgeText({ text: \"1\" });\n        chrome.browserAction.setBadgeBackgroundColor({ color: \"#80A3D5\" });\n        localStorage.setItem(localStorageKey, JSON.stringify(data));\n      }\n    });\n  });\n});\n```\n","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":25,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"(106) Python Sucks And I LOVE It | Prime Reacts - YouTube","link":"https://www.youtube.com/watch?v=8D7FZoQ-z20&t=97","tags":"python","message":"Prime reviews an article with some hot takes about python being slow and quirky, but good enough for a lot of things.  Especially data applications that have libraries written in C.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":16,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Changelog on Twitter: \"🗣️ @kelseyhightower on his demos: That happy path gets people out of their chairs. They’re going back to the computer, like: “Yo, I’m gonna try it right now.” Come on… I’d rather have that. And I’ll take the bit of criticism that comes with it. https://t.co/m9r2KZjNQO\" / Twitter","link":"https://twitter.com/changelog/status/1681306857951084544","tags":"soft, presentation","message":"Such an inspiring clip from Kelsey Heightower.  Make good shit that inspires people rather than fake ppts of how things _could_ be.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":15,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Chris Coyier on Twitter: \"I was unaware of `text-wrap: pretty;` I knew about the (new/cool) `text-wrap: balance;` — but sometimes that's a bit... too much. I feel like it's nice on headers but not smaller type. Here's what I mean.\" / Twitter","link":"https://twitter.com/chriscoyier/status/1681407724993798144","tags":"webdev, css","message":"\nNext time I'm working with large headers on small screens I need to try this.  I always truggle to get them to look good for most text and overflow ridiculously long words correctly or at all.\n\n\n``` css\ntext-wrap: pretty;\ntext-wrap: balance\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":14,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Full-text search - Datasette documentation","link":"https://docs.datasette.io/en/latest/full_text_search.html#enabling-full-text-search-for-a-sqlite-table","tags":"sqlite, data, database","message":"Enable full-text search in sqlite using sqlite-utils.\n\n``` bash\n$ sqlite-utils enable-fts mydatabase.db items name description\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":13,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"sqlite-utils command-line tool - sqlite-utils","link":"https://sqlite-utils.datasette.io/en/stable/cli.html#querying-data-directly-using-an-in-memory-database","tags":"sqlite, data, database, sql, json","message":"I want to like jq, but I think Simon is selling me on sqlite, maybe its just me but this looks readable, hackable, editable, memorizable.  Everytime I try jq, and its 5 minutes fussing with it just to get the most basic thing to work.  I know enough sql out of the gate to make this work off the top of my head\n\n\n``` bash\ncurl  https://thoughts.waylonwalker.com/posts/ | sqlite-utils memory - 'select title, message from stdin where stdin.tags like \"%python%\"' | jq\n```\n\n","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":12,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"sqlite-utils command-line tool - sqlite-utils","link":"https://sqlite-utils.datasette.io/en/stable/cli.html#inserting-json-data","tags":"sqlite, data, database","message":"insert a json array directly into into sqlite with sqlite-utils.\n\n``` bash\necho '{\"name\": \"Cleo\", \"age\": 4}' | sqlite-utils insert dogs.db dogs -\n```\n\n","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":11,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"jq Cheat Sheet","link":"https://lzone.de/cheat-sheet/jq","tags":"jq, ijq, json","message":"A nice cheat sheet for jq. jq looks so nice, but it so quickly gets overwhelming on how to select what you want.  I was able to make a jq contains query.\n\n``` bash\ncurl  https://thoughts.waylonwalker.com/posts/ | jq '.[] | select(.title | contains(\"python\"))'\n```","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":10,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to Manage 'Systemd' Services and Units Using 'Systemctl' in Linux","link":"https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/","tags":"linux, systemd","message":"A fantastic overview of the systemd cli.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":9,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to fix ZFS pool not importing at boot :: ./techtipsy — Herman's blog","link":"https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/","tags":"linux, zfs, systemd","message":"Hacky solution to get `zpool import tank` to work on boot right away.  This has been an issue that has plagued my system for months and no matter what dependencies I add in it never works, but adding a sleep as ExecStartPre did the trick.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":8,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Flask Trailing Slashes 404","link":"https://stackoverflow.com/questions/33241050/trailing-slash-triggers-404-in-flask-path-rule","tags":"python, web, flask","message":"In flask apps I often get a 404 for routes with a trailing slash.  This Stack Overflow post shows how to configure flask to allow trailing slashes on some or all routes.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":7,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Deleting Specific Lines in a File with sed or yq","link":"https://nickjanetakis.com/blog/deleting-specific-lines-in-a-file-with-sed-or-yq","tags":"linux, bash, cli","message":"sed can be a tricky beast, I often stumble when trying to pipe into it.  Next time I need to use sed, I should reference this article by Nick Janetakis.  He makes it looks much easier than my experience has been, and it appears to behave like a vim `:%s/` substitution does, or a `g/` g command.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":6,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"Dear Red Hat... featuring Jeff Geerling (Changelog & Friends #7) |> Changelog","link":"https://changelog.com/friends/7","tags":"","message":"Loved this explanation about all the recent lock down with RHEL from Jeff Geerling.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":5,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"How to pull from images from docker.io with podman","link":"https://gist.github.com/isomorphisms/3114ab86960656a729a6b4653001aae2","tags":"docker, podman, linux","message":"By default podman will not pull images from docker.io and will need setup.  This guide worked for me.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":4,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"python script is not found","link":"None","tags":"python","message":"When setting up a new machine, vm, docker image you might be installing command line tools from places like pip.  They will often put executables in your `~/.local/bin` directory, but by default your shell is not looking in that directory for commands.\n\n``` bash\n  WARNING: The script dotenv is installed in '/home/falcon/.local/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n```\n\nTo solve this you need to add that directory to your $PATH.\n\n\n``` bash\nexport PATH=$PATH:~/.local/bin\n```\n\nTo make this change permanant add this line to your shell's init script, which is likely something like `~/.bashrc` or `~/.zshrc`.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":3,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}},{"title":"LazyVim Installation","link":"https://www.lazyvim.org/installation","tags":"vim, linux","message":"Lately in 2023 I have been leaning on lazyvim for my new setups where I am not necessarily ready to drop my full config.  It's been pretty solid, and comes with a very nice setup out of the box, the docs are pretty fantastic as well.","published":true,"public":true,"date":"2023-07-28T14:59:37.270708","id":2,"author":{"username":"waylonwalker","full_name":"Waylon Walker","email":"waylon@waylonwalker.com","disabled":false}}]