Today I Learned

Short TIL posts

1852 posts latest post 2026-05-13
Publishing rhythm
Apr 2026 | 23 posts
encodeURIComponent() - JavaScript | MDN The encodeURIComponent() function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will ... MDN Web Docs · developer.mozilla.org [1] 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. I’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 [2] and when I check to see if I have a post for a page I need to url encode it. curl -X 'GET' \ 'https://thoughts.waylonwalker.com/link/?link=https%3A%2F%2Fhtmx.org%2Fextensions%2Fclient-side-templates%2F' \ -H 'accept: application/json' curl example generated from the fastapi swagger docs. Here 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. // Event listener for tab changes chrome.tabs.onActivated.addListener(function (activeInfo) { // Get the active tab information ...
🛠️ Installation | LazyVim You can find a starter template for LazyVim here lazyvim.org [1] 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. Note This post is a thought [2]. It’s a short note that I make about someone else’s content online #thoughts References: [1]: https://www.lazyvim.org/installation [2]: /thoughts/
- 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. Note This post is a thought [1]. It’s a short note that I make about someone else’s content online #thoughts References: [1]: /thoughts/
External Link X (formerly Twitter) · twitter.com [1] Such an inspiring clip from Kelsey Heightower. Make good shit that inspires people rather than fake ppts of how things could be. Note This post is a thought [2]. It’s a short note that I make about someone else’s content online #thoughts References: [1]: https://twitter.com/changelog/status/1681306857951084544 [2]: /thoughts/
External Link X (formerly Twitter) · twitter.com [1] Next 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. text-wrap: pretty; text-wrap: balance Note This post is a thought [2]. It’s a short note that I make about someone else’s content online #thoughts References: [1]: https://twitter.com/chriscoyier/status/1681407724993798144 [2]: /thoughts/
Full-text search - Datasette documentation docs.datasette.io [1] Enable full-text search in sqlite using sqlite-utils. $ sqlite-utils enable-fts mydatabase.db items name description Note This post is a thought [2]. It’s a short note that I make about someone else’s content online #thoughts References: [1]: https://docs.datasette.io/en/latest/full_text_search.html#enabling-full-text-search-for-a-sqlite-table [2]: /thoughts/
sqlite-utils command-line tool - sqlite-utils sqlite-utils.datasette.io [1] 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 curl https://thoughts.waylonwalker.com/posts/ | sqlite-utils memory - 'select title, message from stdin where stdin.tags like "%python%"' | jq Note This post is a thought [2]. It’s a short note that I make about someone else’s content online #thoughts References: [1]: https://sqlite-utils.datasette.io/en/stable/cli.html#querying-data-directly-using-an-in-memory-database [2]: /thoughts/
sqlite-utils command-line tool - sqlite-utils sqlite-utils.datasette.io [1] insert a json array directly into into sqlite with sqlite-utils. echo '{"name": "Cleo", "age": 4}' | sqlite-utils insert dogs.db dogs - Note This post is a thought [2]. It’s a short note that I make about someone else’s content online #thoughts References: [1]: https://sqlite-utils.datasette.io/en/stable/cli.html#inserting-json-data [2]: /thoughts/
LZone LZone - Cheat Sheets for Sysadmin / DevOps / System Architecture lzone.de [1] 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. curl https://thoughts.waylonwalker.com/posts/ | jq '.[] | select(.title | contains("python"))' Note This post is a thought [2]. It’s a short note that I make about someone else’s content online #thoughts References: [1]: https://lzone.de/cheat-sheet/jq [2]: /thoughts/
Looking for inspiration? sqlite-migrate [1] by simonw [2]. A simple database migration system for SQLite, based on sqlite-utils References: [1]: https://github.com/simonw/sqlite-migrate [2]: https://github.com/simonw
The work on textual-paint [1] by 1j01 [2]. 🎨 MS Paint in your terminal. References: [1]: https://github.com/1j01/textual-paint [2]: https://github.com/1j01
Check out wsrepl [1] by doyensec [2]. It’s a well-crafted project with great potential. WebSocket REPL for pentesters References: [1]: https://github.com/doyensec/wsrepl [2]: https://github.com/doyensec
If you’re into interesting projects, don’t miss out on llm.nvim [1], created by huggingface [2]. LLM powered development for Neovim References: [1]: https://github.com/huggingface/llm.nvim [2]: https://github.com/huggingface
I like maces’s [1] project fastapi-htmx [2]. Extension for FastAPI [3] to make HTMX [4] easier to use. References: [1]: https://github.com/maces [2]: https://github.com/maces/fastapi-htmx [3]: /fastapi/ [4]: /htmx/
The work on interpreters [1] by ericsnowcurrently [2]. a placeholder References: [1]: https://github.com/ericsnowcurrently/interpreters [2]: https://github.com/ericsnowcurrently
Check out coolify [1] by coollabsio [2]. It’s a well-crafted project with great potential. An open-source & self-hostable Heroku / Netlify / Vercel alternative. References: [1]: https://github.com/coollabsio/coolify [2]: https://github.com/coollabsio
The next version of markata will be around a full second faster at building it’s docs, that’s a 30% bump in performance at the current state. This performance will come when virtual environments are stored in the same directory as the source code. [1] What happened?? # [2] I was looking through my profiler for some unexpected performance hits, and noticed that the docs plugin was taking nearly a full second (sometimes more), just to run glob. | |- 1.068 glob markata/plugins/docs.py:40 | | |- 0.838 <listcomp> markata/plugins/docs.py:82 | | | `- 0.817 PathSpec.match_file pathspec/pathspec.py:165 | | | [14 frames hidden] pathspec, <built-in>, <string> Python scandir ignores hidden directories # [3] I started looking for different solutions and what I found was that I was hitting pathspec with way more files than I needed to. len(list(Path().glob("**/*.py"))) # 6444 len([Path(f) for f in glob.glob("**/*.py", recursive=True)]) # 110 After digging into the docs I found that glob.glob uses os.scandir which ignores ‘.’ and ‘..’ directories while Path.glob does not. https://docs.python.org/3/library/os.html#os.scandir results? # [4] Now glob.py from the docs plugin does not...
I’m impressed by minijinja [1] from mitsuhiko [2]. MiniJinja is a powerful but minimal dependency template engine for Rust compatible with Jinja/Jinja2 References: [1]: https://github.com/mitsuhiko/minijinja [2]: https://github.com/mitsuhiko
I’m really excited about gpt-engineer [1], an amazing project by AntonOsika [2]. It’s worth exploring! Platform to experiment with the AI Software Engineer. Terminal based. NOTE: Very different from https://gptengineer.app References: [1]: https://github.com/AntonOsika/gpt-engineer [2]: https://github.com/AntonOsika
I like s0md3v’s [1] project roop [2]. one-click face swap References: [1]: https://github.com/s0md3v [2]: https://github.com/s0md3v/roop