{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Slashes",
  "home_page_url": "https://go.waylonwalker.com/slashes/",
  "feed_url": "https://go.waylonwalker.com/slashes/feed.json",
  "description": "Slash command posts",
  "authors": [
    {
      "name": "Waylon Walker"
    }
  ],
  "items": [
    {
      "id": "https://go.waylonwalker.com/carry/",
      "url": "https://go.waylonwalker.com/carry/",
      "title": "/carry/",
      "content_html": "\u003ch2 id=\"edc\"\u003eEDC \u003ca href=\"#edc\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI try to keep a pretty light every day carry, but it never works out, keyfobs\nand headphone cases end up causing more bulk than I’d like, but My EDC is no\nwhere near the bulk I had as a kid with my cargo pants decked out with\neverything I could possibly need.\u003c/p\u003e\n\u003cp\u003eI hold no attachment to anything in my EDC.  Nothing on my person has\nsentimental value.  Anything I carry can be lost, stolen, or destroyed at any\npoint in time.  I pick things of sufficient usable, utilitarian, quality\nsufficient to work.  No extra fluff.\u003c/p\u003e\n\u003chr/\u003e\n\u003cul\u003e\n\u003cli\u003eGoogle Pixel 6\u003c/li\u003e\n\u003cli\u003eRidge Wallet\u003c/li\u003e\n\u003cli\u003eOlight Perun - Since April 2022\u003c/li\u003e\n\u003cli\u003eCivivi Qubit - Since March 2024 after my last one was donated to the Indianapolis Stadium\u003c/li\u003e\n\u003cli\u003eOpenFit Shokz\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr/\u003e\n\u003ch2 id=\"rules\"\u003eRules \u003ca href=\"#rules\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003elightweight\u003c/li\u003e\n\u003cli\u003ereplacable\u003c/li\u003e\n\u003cli\u003eno emotional attachments\u003c/li\u003e\n\u003cli\u003eutilitarian\u003c/li\u003e\n\u003cli\u003eeverything serves a purpose\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"my-kit\"\u003eMy kit \u003ca href=\"#my-kit\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/606e48d7-bf14-42b9-a96e-87b676556ff8.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/file/606e48d7-bf14-42b9-a96e-87b676556ff8.webp\" alt=\"My EDC layout\"/ data-glightbox=\"description: My EDC layout\"\u003e\u003c/a\u003e\n\u003cfigcaption\u003e\u003cp\u003ePhoto taken March 2023\u003c/p\u003e\u003c/figcaption\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"phone\"\u003ePhone \u003ca href=\"#phone\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eGoogle Pixel 6\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eI will not get finance a new phone for the foreseeable future again.  The last\ntime I feel like I got a phone that felt like an upgrade was 2018 when I went\nto the Pixel 3.  The pixel 6 and pixel 8 my wife has feel no different\nwhatsoever to me.  It’s become more of a tool that does its job, there’s no\nmajor upgrades really driving me to create more ewaste with new devices.\u003c/p\u003e\n\u003ch2 id=\"wallet\"\u003eWallet \u003ca href=\"#wallet\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eRidge Wallet\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eA necessary evil that I still need.  I keep as few of cards as necessary in it.\nThis would be the worst thing in my kit to loose.  Only because the time it\nwould take to replace all of them.  This one was a gift to replace my last\nleather wallet, and I see no reason for this one to ever need replaced.  It’s\nmuch lighter and smaller, would not change that aspect.\u003c/p\u003e\n\u003ch2 id=\"flashlight\"\u003eFlashlight \u003ca href=\"#flashlight\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eOlight Perun\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eWhen I became a homeowner I added a dedicated flashlight to my EDC.  Its light\nand out of the way.  It’s the only thing I’ve ever found useful to fit in the\ncoin pocket of jeans, so I don’t even notice it.  Compared to using a phone,\nits more powerful, easier to position on me with the clip on my shirt/pants, or\nmagnetically to a metal surface for inspections/house work.\u003c/p\u003e\n\u003ch2 id=\"knife\"\u003eKnife \u003ca href=\"#knife\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eCivivi Qubit\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eI’ve carried a knife since as long as I can remember, feels like 10 but\nprobably more like 14 years old.  Never anything fancy, a few knock off\nleathermans, a few Buck, Case, KaBar that I found on a bridge, and now 3\nCivivis.  I use them till they break or more commonly they get lent and not\nreturned, or lost.  This is the most utilitarian thing I keep, almost always\nkept razor sharp, used, abused, and put away dirty.  Never used for prying, but\nused to cut anything it will cut no matter how \u003cem\u003ehard\u003c/em\u003e it is on it.  Its not to\nlook pretty, show off, its purely a tool that I hold no attachment to.\u003c/p\u003e\n\u003ch2 id=\"headphones\"\u003eHeadphones \u003ca href=\"#headphones\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eOpenFit Shokz\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNot my first choice in headphones, but they work.  Headphones are probably the\nitem of biggest churn and ewaste for me.  Eventually I might pony up for\nsomething that is more durable and repairable, but headphones just don’t last\nforever before they stop working for me.  This latest pair was a pair my wife\nchose to try and did not like.  They sat in a drawer for a year or so until I\nstarted carrying them.\u003c/p\u003e\n",
      "content_text": "\n## EDC\n\nI try to keep a pretty light every day carry, but it never works out, keyfobs\nand headphone cases end up causing more bulk than I'd like, but My EDC is no\nwhere near the bulk I had as a kid with my cargo pants decked out with\neverything I could possibly need.\n\nI hold no attachment to anything in my EDC.  Nothing on my person has\nsentimental value.  Anything I carry can be lost, stolen, or destroyed at any\npoint in time.  I pick things of sufficient usable, utilitarian, quality\nsufficient to work.  No extra fluff.\n\n---\n\n* Google Pixel 6\n* Ridge Wallet\n* Olight Perun - Since April 2022\n* Civivi Qubit - Since March 2024 after my last one was donated to the Indianapolis Stadium\n* OpenFit Shokz\n\n---\n\n## Rules\n\n* lightweight\n* replacable\n* no emotional attachments\n* utilitarian\n* everything serves a purpose\n\n## My kit\n\n![My EDC layout](https://dropper.waylonwalker.com/file/606e48d7-bf14-42b9-a96e-87b676556ff8.webp)\nPhoto taken March 2023\n\n## Phone\n_Google Pixel 6_\n\nI will not get finance a new phone for the foreseeable future again.  The last\ntime I feel like I got a phone that felt like an upgrade was 2018 when I went\nto the Pixel 3.  The pixel 6 and pixel 8 my wife has feel no different\nwhatsoever to me.  It's become more of a tool that does its job, there's no\nmajor upgrades really driving me to create more ewaste with new devices.\n\n## Wallet\n_Ridge Wallet_\n\nA necessary evil that I still need.  I keep as few of cards as necessary in it.\nThis would be the worst thing in my kit to loose.  Only because the time it\nwould take to replace all of them.  This one was a gift to replace my last\nleather wallet, and I see no reason for this one to ever need replaced.  It's\nmuch lighter and smaller, would not change that aspect.\n\n## Flashlight\n_Olight Perun_\n\nWhen I became a homeowner I added a dedicated flashlight to my EDC.  Its light\nand out of the way.  It's the only thing I've ever found useful to fit in the\ncoin pocket of jeans, so I don't even notice it.  Compared to using a phone,\nits more powerful, easier to position on me with the clip on my shirt/pants, or\nmagnetically to a metal surface for inspections/house work.\n\n## Knife\n_Civivi Qubit_\n\nI've carried a knife since as long as I can remember, feels like 10 but\nprobably more like 14 years old.  Never anything fancy, a few knock off\nleathermans, a few Buck, Case, KaBar that I found on a bridge, and now 3\nCivivis.  I use them till they break or more commonly they get lent and not\nreturned, or lost.  This is the most utilitarian thing I keep, almost always\nkept razor sharp, used, abused, and put away dirty.  Never used for prying, but\nused to cut anything it will cut no matter how _hard_ it is on it.  Its not to\nlook pretty, show off, its purely a tool that I hold no attachment to.\n\n## Headphones\n_OpenFit Shokz_\n\nNot my first choice in headphones, but they work.  Headphones are probably the\nitem of biggest churn and ewaste for me.  Eventually I might pony up for\nsomething that is more durable and repairable, but headphones just don't last\nforever before they stop working for me.  This latest pair was a pair my wife\nchose to try and did not like.  They sat in a drawer for a year or so until I\nstarted carrying them.\n\n",
      "summary": "I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I'd like, but My EDC is no...",
      "date_published": "2026-03-27T16:35:40Z",
      "date_modified": "2026-03-27T16:35:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/verify/",
      "url": "https://go.waylonwalker.com/verify/",
      "title": "/verify",
      "content_html": "\u003cp\u003eInspired by @mollywhite’s\n\u003ca href=\"https://mollywhite.net/verify/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/mollywhite.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/mollywhite.net.png\" class=\"has-avatar  has-avatar-before\"\u003everify\u003c/a\u003e \u003ca href=\"https://slashpages.net\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/slashpages.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/slashpages.net.png\" class=\"has-avatar  has-avatar-before\"\u003eslashpage\u003c/a\u003e.\nThis page serves as the system of record for my online identity. The best\nplaces to follow me are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMy Website: \u003ca href=\"https://waylonwalker.com\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ewaylonwalker.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eYouTube: \u003ca href=\"https://youtube.com/waylonwalker\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/youtube.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/youtube.com.png\" class=\"has-avatar  has-avatar-before\"\u003eWaylon Walker\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eYouTube Gaming: \u003ca href=\"https://www.youtube.com/channel/UCHuxc1HRsd3aRjvL6C817tQ\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.youtube.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.youtube.com.png\" class=\"has-avatar  has-avatar-before\"\u003eWaylon Walker Gaming\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTwitch: \u003ca href=\"https://www.twitch.tv/waylonwalker\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.twitch.tv.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.twitch.tv.png\" class=\"has-avatar  has-avatar-before\"\u003eWaylon Walker\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTwitter: \u003ca href=\"https://twitter.com/_WaylonWalker\"\u003e@_WaylonWalker\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLinkedIn: \u003ca href=\"https://www.linkedin.com/in/waylonwalker\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.linkedin.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.linkedin.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eWaylon Walker\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGitHub: \u003ca href=\"https://github.com/WaylonWalker\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eWaylonWalker\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDev.to: \u003ca href=\"https://dev.to/waylonwalker\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/dev.to.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/dev.to.ico\" class=\"has-avatar  has-avatar-before\"\u003eWaylon Walker\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBluesky: \u003ca href=\"https://bsky.app/profile/waylonwalker.com\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/bsky.app.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/bsky.app.png\" class=\"has-avatar  has-avatar-before\"\u003e@waylonwalker.com\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nInspired by @mollywhite's\n[verify](https://mollywhite.net/verify/) [slashpage](https://slashpages.net).\nThis page serves as the system of record for my online identity. The best\nplaces to follow me are:\n\n* My Website: [waylonwalker.com](https://waylonwalker.com)\n* YouTube: [Waylon Walker](https://youtube.com/waylonwalker)\n* YouTube Gaming: [Waylon Walker Gaming](https://www.youtube.com/channel/UCHuxc1HRsd3aRjvL6C817tQ)\n* Twitch: [Waylon Walker](https://www.twitch.tv/waylonwalker)\n* Twitter: [@_WaylonWalker](https://twitter.com/_WaylonWalker)\n* LinkedIn: [Waylon Walker](https://www.linkedin.com/in/waylonwalker)\n* GitHub: [WaylonWalker](https://github.com/WaylonWalker)\n* Dev.to: [Waylon Walker](https://dev.to/waylonwalker)\n* Bluesky: [@waylonwalker.com](https://bsky.app/profile/waylonwalker.com)\n",
      "summary": "Inspired by @mollywhite's verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:",
      "date_published": "2026-02-24T10:36:57Z",
      "date_modified": "2026-02-24T10:36:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/top4/",
      "url": "https://go.waylonwalker.com/top4/",
      "title": "/top4",
      "content_html": "\u003cp\u003eDefinitive ranked lists of my top 3 favorites plus an honorable mention.\u003c/p\u003e\n\u003ch2 id=\"terminal-tools\"\u003eTerminal Tools \u003ca href=\"#terminal-tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://neovim.io/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/neovim.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/neovim.io.ico\" class=\"has-avatar  has-avatar-before\"\u003eneovim\u003c/a\u003e\u003c/strong\u003e - modal editing changed how I think about text\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://tmux.github.io/\"\u003etmux\u003c/a\u003e\u003c/strong\u003e - terminal sessions that survive disconnects and allow me to hop between projects at the speed of thought.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://k9scli.io/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/k9scli.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/k9scli.io.ico\" class=\"has-avatar  has-avatar-before\"\u003ek9s\u003c/a\u003e\u003c/strong\u003e - S tier tui interface that all tuis should strive for\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eHonorable mention:\u003c/strong\u003e \u003ca href=\"https://ipython.org/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/ipython.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/ipython.org.png\" class=\"has-avatar  has-avatar-before\"\u003eipython\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"python-tools\"\u003ePython Tools \u003ca href=\"#python-tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://pandas.pydata.org/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pandas.pydata.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pandas.pydata.org.ico\" class=\"has-avatar  has-avatar-before\"\u003epandas\u003c/a\u003e\u003c/strong\u003e - This is what got me out of corporate spreadsheets and back into code/software.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://kedro.org/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/kedro.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/kedro.org.ico\" class=\"has-avatar  has-avatar-before\"\u003ekedro\u003c/a\u003e\u003c/strong\u003e - data pipelines with opinions I agree with\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://fastapi.tiangolo.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/fastapi.tiangolo.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/fastapi.tiangolo.com.png\" class=\"has-avatar  has-avatar-before\"\u003efastapi\u003c/a\u003e\u003c/strong\u003e - my favorite python web framework\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eHonorable mention:\u003c/strong\u003e \u003ca href=\"https://typer.tiangolo.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/typer.tiangolo.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/typer.tiangolo.com.png\" class=\"has-avatar  has-avatar-before\"\u003etyper\u003c/a\u003e - fast cli apps\u003c/p\u003e\n\u003ch2 id=\"games-to-play-with-kids\"\u003eGames to Play with Kids \u003ca href=\"#games-to-play-with-kids\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003emultiplayer\u003c/em\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://minecraft.net/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/minecraft.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/minecraft.net.png\" class=\"has-avatar  has-avatar-before\"\u003eMinecraft\u003c/a\u003e\u003c/strong\u003e - infinite creativity, modding potential\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://store.steampowered.com/app/1211020/Wobbly_Life/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/store.steampowered.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/store.steampowered.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eWobbly Life\u003c/a\u003e\u003c/strong\u003e - Open World Co-op\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://www.stardewvalley.net/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.stardewvalley.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.stardewvalley.net.png\" class=\"has-avatar  has-avatar-before\"\u003eStardew Valley\u003c/a\u003e\u003c/strong\u003e - cozy, collaborative farming\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eHonorable mention:\u003c/strong\u003e \u003ca href=\"https://www.terraria.org/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.terraria.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.terraria.org.ico\" class=\"has-avatar  has-avatar-before\"\u003eTerraria\u003c/a\u003e - 2d world builder\u003c/p\u003e\n\u003ch2 id=\"games-to-play-alone\"\u003eGames to Play Alone \u003ca href=\"#games-to-play-alone\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003esingleplayer\u003c/em\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://www.hollowknight.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.hollowknight.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.hollowknight.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eHollow Knight\u003c/a\u003e/\u003ca href=\"https://hollowknightsilksong.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/hollowknightsilksong.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/hollowknightsilksong.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eHollow Knight Silksong\u003c/a\u003e\u003c/strong\u003e - S tier 2d platformer with adventure, mystery, lore, boss fights.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://store.steampowered.com/app/861650/Session_Skate_Sim/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/store.steampowered.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/store.steampowered.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eSession Skate Sim\u003c/a\u003e\u003c/strong\u003e - The best skate sim\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://www.animalwell.net/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.animalwell.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.animalwell.net.ico\" class=\"has-avatar  has-avatar-before\"\u003eAnimal Well\u003c/a\u003e\u003c/strong\u003e - epic 2d platformer with the most incredible graphics at 320p ever created and the deepest puzzles Ive seen\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eHonorable mention:\u003c/strong\u003e \u003ca href=\"https://store.steampowered.com/app/400/Portal/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/store.steampowered.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/store.steampowered.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ePortal\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eInspired by \u003ca href=\"https://topfour.net\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/topfour.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/topfour.net.png\" class=\"has-avatar  has-avatar-before\"\u003etopfour.net\u003c/a\u003e and \u003ca href=\"https://slashpages.net\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/slashpages.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/slashpages.net.png\" class=\"has-avatar  has-avatar-before\"\u003eslashpages.net\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n",
      "content_text": "\nDefinitive ranked lists of my top 3 favorites plus an honorable mention.\n\n## Terminal Tools\n\n1. **[neovim](https://neovim.io/)** - modal editing changed how I think about text\n1. **[tmux](https://tmux.github.io/)** - terminal sessions that survive disconnects and allow me to hop between projects at the speed of thought.\n1. **[k9s](https://k9scli.io/)** - S tier tui interface that all tuis should strive for\n\n**Honorable mention:** [ipython](https://ipython.org/)\n\n## Python Tools\n\n1. **[pandas](https://pandas.pydata.org/)** - This is what got me out of corporate spreadsheets and back into code/software.\n2. **[kedro](https://kedro.org/)** - data pipelines with opinions I agree with\n3. **[fastapi](https://fastapi.tiangolo.com/)** - my favorite python web framework\n\n**Honorable mention:** [typer](https://typer.tiangolo.com/) - fast cli apps\n\n## Games to Play with Kids\n\n_multiplayer_\n\n1. **[Minecraft](https://minecraft.net/)** - infinite creativity, modding potential\n1. **[Wobbly Life](https://store.steampowered.com/app/1211020/Wobbly_Life/)** - Open World Co-op\n1. **[Stardew Valley](https://www.stardewvalley.net/)** - cozy, collaborative farming\n\n**Honorable mention:** [Terraria](https://www.terraria.org/) - 2d world builder\n\n## Games to Play Alone\n\n_singleplayer_\n\n1. **[Hollow Knight](https://www.hollowknight.com/)/[Hollow Knight Silksong](https://hollowknightsilksong.com/)** - S tier 2d platformer with adventure, mystery, lore, boss fights.\n1. **[Session Skate Sim](https://store.steampowered.com/app/861650/Session_Skate_Sim/)** - The best skate sim\n1. **[Animal Well](https://www.animalwell.net/)** - epic 2d platformer with the most incredible graphics at 320p ever created and the deepest puzzles Ive seen\n\n**Honorable mention:** [Portal](https://store.steampowered.com/app/400/Portal/)\n\n*Inspired by [topfour.net](https://topfour.net) and [slashpages.net](https://slashpages.net)*\n",
      "summary": "Definitive ranked lists of my top 3 favorites plus an honorable mention.",
      "date_published": "2026-02-11T14:00:00Z",
      "date_modified": "2026-02-11T14:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash",
        "favorites"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/yep/",
      "url": "https://go.waylonwalker.com/yep/",
      "title": "/yep",
      "content_html": "\u003cp\u003eInspired by @fyrio’s \u003ca href=\"https://fyr.io/yep\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/fyr.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/fyr.io.png\" class=\"has-avatar  has-avatar-before\"\u003eyep\u003c/a\u003e\n\u003ca href=\"https://slashpages.net/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/slashpages.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/slashpages.net.png\" class=\"has-avatar  has-avatar-before\"\u003eslashpage\u003c/a\u003e, a list of \u003cstrong\u003eS tier\u003c/strong\u003e things I enjoy, use,\nrecommend, want to know more about, or seek out in no particular order, updated as I think about it.\u003c/p\u003e\n\u003cdiv class=\"admonition seealso\"\u003e\n\u003cp class=\"admonition-title\"\u003eSeealso\u003c/p\u003e\n\u003cdiv class=\"embed-card\"\u003e\n\u003c/div\u003e\n  \u003ca href=\"/nope/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e/nope\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInspired by @baty\u0026#39;s nope slashpage, a list of ** things I don\u0026#39;t like, don\u0026#39;t care, avoid, overhyped, or won\u0026#39;t do in no particular order, updated as I think...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 11, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003ch2 id=\"yep\"\u003e/yep \u003ca href=\"#yep\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ecoffee\u003c/li\u003e\n\u003cli\u003esmall web 1.0\u003c/li\u003e\n\u003cli\u003eRSS\u003c/li\u003e\n\u003cli\u003eminecraft\u003c/li\u003e\n\u003cli\u003eHollow Knight\u003c/li\u003e\n\u003cli\u003eSilksong\u003c/li\u003e\n\u003cli\u003eterminals\u003c/li\u003e\n\u003cli\u003epython\u003c/li\u003e\n\u003cli\u003evim keybindings\u003c/li\u003e\n\u003cli\u003eself-hosting\u003c/li\u003e\n\u003cli\u003eopen source\u003c/li\u003e\n\u003cli\u003erunning kubernetes in my basement\u003c/li\u003e\n\u003cli\u003emechanical keyboards\u003c/li\u003e\n\u003cli\u003emarkdown\u003c/li\u003e\n\u003cli\u003edata engineering\u003c/li\u003e\n\u003cli\u003eWoodworking\u003c/li\u003e\n\u003cli\u003eFingerboarding\u003c/li\u003e\n\u003cli\u003eDarts\u003c/li\u003e\n\u003cli\u003eSkateboarding\u003c/li\u003e\n\u003cli\u003eBiking\u003c/li\u003e\n\u003cli\u003eTrampoline\u003c/li\u003e\n\u003cli\u003e3d printing\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nInspired by @fyrio's [yep](https://fyr.io/yep)\n[slashpage](https://slashpages.net/), a list of **S tier** things I enjoy, use,\nrecommend, want to know more about, or seek out in no particular order, updated as I think about it.\n\n!!! seealso\n\n    \u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/nope/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e/nope\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInspired by @baty\u0026#39;s nope slashpage, a list of ** things I don\u0026#39;t like, don\u0026#39;t care, avoid, overhyped, or won\u0026#39;t do in no particular order, updated as I think...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 11, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n## /yep\n\n* coffee\n* small web 1.0\n* RSS\n* minecraft\n* Hollow Knight\n* Silksong\n* terminals\n* python\n* vim keybindings\n* self-hosting\n* open source\n* running kubernetes in my basement\n* mechanical keyboards\n* markdown\n* data engineering\n* Woodworking\n* Fingerboarding\n* Darts\n* Skateboarding\n* Biking\n* Trampoline\n* 3d printing\n\n",
      "summary": "Inspired by @fyrio's yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...",
      "date_published": "2026-02-11T12:00:00Z",
      "date_modified": "2026-02-11T12:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash",
        "opinions"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nope/",
      "url": "https://go.waylonwalker.com/nope/",
      "title": "/nope",
      "content_html": "\u003cp\u003eInspired by @baty’s \u003ca href=\"https://baty.net/nope/\"\u003enope\u003c/a\u003e\n\u003ca href=\"https://slashpages.net/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/slashpages.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/slashpages.net.png\" class=\"has-avatar  has-avatar-before\"\u003eslashpage\u003c/a\u003e, a list of \u003cstrong\u003eF tier\u003c/strong\u003e things I don’t like,\ndon’t care, avoid, overhyped, or won’t do in no particular order, updated as I\nthink about it.\u003c/p\u003e\n\u003cdiv class=\"admonition seealso\"\u003e\n\u003cp class=\"admonition-title\"\u003eSeealso\u003c/p\u003e\n\u003cdiv class=\"embed-card\"\u003e\n\u003c/div\u003e\n  \u003ca href=\"/yep/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e/yep\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInspired by @fyrio\u0026#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 11, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003ch2 id=\"nope\"\u003e/nope \u003ca href=\"#nope\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eroblox\u003c/li\u003e\n\u003cli\u003emobile games\u003c/li\u003e\n\u003cli\u003etelemetry\u003c/li\u003e\n\u003cli\u003eWindows\u003c/li\u003e\n\u003cli\u003eVSCode\u003c/li\u003e\n\u003cli\u003eallow notifications\u003c/li\u003e\n\u003cli\u003esubscription hell\u003c/li\u003e\n\u003cli\u003eads\u003c/li\u003e\n\u003cli\u003esocial media\u003c/li\u003e\n\u003cli\u003eclickbait\u003c/li\u003e\n\u003cli\u003eWYSIWYG editors particularly ones that use proprietary non text formats\u003c/li\u003e\n\u003cli\u003epolitics\u003c/li\u003e\n\u003cli\u003eshort form video\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\n\nInspired by @baty's [nope](https://baty.net/nope/)\n[slashpage](https://slashpages.net/), a list of **F tier** things I don't like,\ndon't care, avoid, overhyped, or won't do in no particular order, updated as I\nthink about it.\n\n\n!!! seealso\n\n    \u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/yep/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e/yep\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInspired by @fyrio\u0026#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 11, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n## /nope\n\n* roblox\n* mobile games\n* telemetry\n* Windows\n* VSCode\n* allow notifications\n* subscription hell\n* ads\n* social media\n* clickbait\n* WYSIWYG editors particularly ones that use proprietary non text formats\n* politics\n* short form video\n\n",
      "summary": "Inspired by @baty's nope slashpage, a list of ** things I don't like, don't care, avoid, overhyped, or won't do in no particular order, updated as I think...",
      "date_published": "2026-02-11T12:00:00Z",
      "date_modified": "2026-02-11T12:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash",
        "opinions"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ai/",
      "url": "https://go.waylonwalker.com/ai/",
      "title": "Ai",
      "content_html": "\u003cp\u003eLast updated Jan 2026.\u003c/p\u003e\n\u003cdiv class=\"admonition seealso\"\u003e\n\u003cp class=\"admonition-title\"\u003eSeealso\u003c/p\u003e\n\u003cp\u003eLooking for all posts tagged with ai see [[ tag/ai ]]\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eAi is a tool I use a lot for code generation, research, image generation, and\ndebugging.  The words I publish on this site are my own unless explicitly\nstated from the top.  There’s only one or two posts in this category.\u003c/p\u003e\n\u003ch2 id=\"words-are-mine\"\u003eWords are mine \u003ca href=\"#words-are-mine\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe core of what this blog is, is my thoughts ideas, sharing experiences.  The\nwords are the important part.  They are not perfect, I often do not spell or\ngrammer check, and what is here is from a flow state of writing and very often\nnot refactored.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNo AI unless explicitly stated\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"code-gen\"\u003ecode gen \u003ca href=\"#code-gen\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eUp till around 2023 all of the code to create the site was hand written by me.\nI have my own site generator that I maintain \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\" data-preview=\"This post is a work in progress.\"\u003emarkata\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFrom 2023 through 2025 snippets of code, sometimes entire plugins or modules\nwere created in chat apps like chatgpt.  There was no agentic coding, windsurf,\ncursor, claude code, opencode, none of it.  It was all integrated into the site\nby hand.\u003c/p\u003e\n\u003cp\u003eStarting around Dec 2025 I was finding freely available agents through tools\nlike opencode to be more and more useful, making less mistakes, doing better at\ngetting context and making changes.  The flow is relying on heavy planning and\nissue reporting.\u003c/p\u003e\n\u003ch2 id=\"image-gen\"\u003eimage gen \u003ca href=\"#image-gen\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI really got into stable diffusion as it came out.  I thought it was\nfascinating to generate different kinds of images of things that I would\notherwise have no ability to create, for a long time I was generating images\nfor every post.  I’ve moved on from doing it for every post, but still do it\noccasionally.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI’m not an artist, sometimes I like to include art that I would not otherwise\nbe able to.  Most of the art you see on a post is AI generated, and may not\nbe called out.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"a-hreftechbrophobic-classwikilink-data-titletechbrophobic-data-descriptioni-just-heard-someone-drop-the-this-term-and-it-kinda-fits-a-lot-of-shit-on-the-internet-right-now-arguing-that-its-ok-to-question-ai-its-ok-to-like-it-its-data-date2025-11-09techbrophobica\"\u003e\u003ca href=\"/techbrophobic/\" class=\"wikilink\" data-title=\"Techbrophobic\" data-description=\"I just heard someone drop the this term and it kinda fits a lot of shit on the internet right now. Arguing that its OK to question AI, its OK to like it, its...\" data-date=\"2025-11-09\" data-preview=\"I just heard someone drop the this term and it kinda fits a lot of shit on the internet right now. Arguing that its OK to question AI, its OK to like it, its...\"\u003eTechbrophobic\u003c/a\u003e \u003ca href=\"#a-hreftechbrophobic-classwikilink-data-titletechbrophobic-data-descriptioni-just-heard-someone-drop-the-this-term-and-it-kinda-fits-a-lot-of-shit-on-the-internet-right-now-arguing-that-its-ok-to-question-ai-its-ok-to-like-it-its-data-date2025-11-09techbrophobica\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI feel this term strongly.  I find ai tooling useful, but the industry and hype bros bring a bad taste.\u003c/p\u003e\n\u003cp\u003eThe tools do not not do everything right, you still have to think, watch its output.  You have to put the work in to do proper software engineering.  Its not a magic pill, but it has the ability to implement ideas, plans, very quickly.\u003c/p\u003e\n\u003cp\u003eAlso the whole industry creeps me out.  The theft that happened to get here was wrong.  AI shovoled into everything as slop sucks.  The stock market pump is sus.\u003c/p\u003e\n",
      "content_text": "\nLast updated Jan 2026.\n\n!!! seealso\n\n    Looking for all posts tagged with ai see [[ tag/ai ]]\n\nAi is a tool I use a lot for code generation, research, image generation, and\ndebugging.  The words I publish on this site are my own unless explicitly\nstated from the top.  There's only one or two posts in this category.\n\n## Words are mine\n\nThe core of what this blog is, is my thoughts ideas, sharing experiences.  The\nwords are the important part.  They are not perfect, I often do not spell or\ngrammer check, and what is here is from a flow state of writing and very often\nnot refactored.\n\n\u003e No AI unless explicitly stated\n\n## code gen\n\nUp till around 2023 all of the code to create the site was hand written by me.\nI have my own site generator that I maintain \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\"\u003emarkata\u003c/a\u003e.\n\nFrom 2023 through 2025 snippets of code, sometimes entire plugins or modules\nwere created in chat apps like chatgpt.  There was no agentic coding, windsurf,\ncursor, claude code, opencode, none of it.  It was all integrated into the site\nby hand.\n\nStarting around Dec 2025 I was finding freely available agents through tools\nlike opencode to be more and more useful, making less mistakes, doing better at\ngetting context and making changes.  The flow is relying on heavy planning and\nissue reporting.\n\n## image gen\n\nI really got into stable diffusion as it came out.  I thought it was\nfascinating to generate different kinds of images of things that I would\notherwise have no ability to create, for a long time I was generating images\nfor every post.  I've moved on from doing it for every post, but still do it\noccasionally.\n\n\u003e I'm not an artist, sometimes I like to include art that I would not otherwise\n\u003e be able to.  Most of the art you see on a post is AI generated, and may not\n\u003e be called out.\n\n## \u003ca href=\"/techbrophobic/\" class=\"wikilink\" data-title=\"Techbrophobic\" data-description=\"I just heard someone drop the this term and it kinda fits a lot of shit on the internet right now. Arguing that its OK to question AI, its OK to like it, its...\" data-date=\"2025-11-09\"\u003eTechbrophobic\u003c/a\u003e\n\nI feel this term strongly.  I find ai tooling useful, but the industry and hype bros bring a bad taste.\n\nThe tools do not not do everything right, you still have to think, watch its output.  You have to put the work in to do proper software engineering.  Its not a magic pill, but it has the ability to implement ideas, plans, very quickly.\n\nAlso the whole industry creeps me out.  The theft that happened to get here was wrong.  AI shovoled into everything as slop sucks.  The stock market pump is sus.",
      "summary": "Last updated Jan 2026.",
      "date_published": "2026-01-11T13:48:43Z",
      "date_modified": "2026-01-11T13:48:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash",
        "ai",
        "llm"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wants/",
      "url": "https://go.waylonwalker.com/wants/",
      "title": "wants",
      "content_html": "\u003cp\u003eInspired by \u003ca href=\"https://maya.land/wants/\"\u003emara.town/wants\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"want-but-do-not-enjoy\"\u003ewant but do not enjoy \u003ca href=\"#want-but-do-not-enjoy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eNew hardware that cannot be repaired\u003c/li\u003e\n\u003cli\u003eDisciplining Children\u003c/li\u003e\n\u003cli\u003eNice landscaping which requires regular maintenance\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"enjoy-but-do-not-want\"\u003eenjoy but do not want \u003ca href=\"#enjoy-but-do-not-want\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebreakfast\u003c/li\u003e\n\u003cli\u003eFancy things\u003c/li\u003e\n\u003cli\u003eManual Labor in moderation\u003c/li\u003e\n\u003cli\u003eVacations to far away places\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nInspired by [mara.town/wants](https://maya.land/wants/)\n\n## want but do not enjoy\n\n* New hardware that cannot be repaired\n* Disciplining Children\n* Nice landscaping which requires regular maintenance\n\n## enjoy but do not want\n\n* breakfast\n* Fancy things\n* Manual Labor in moderation\n* Vacations to far away places\n",
      "summary": "Inspired by mara.town/wants",
      "date_published": "2025-05-27T21:01:14Z",
      "date_modified": "2025-05-27T21:01:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tinyapps/",
      "url": "https://go.waylonwalker.com/tinyapps/",
      "title": "tinyapps",
      "content_html": "\u003cp\u003eI’m working on replacing my usage of google inline search apps with real apps,\nthese are ones that I create and host on my own \u003ca href=\"/homelab/\" class=\"glossary-term\" title=\"A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...\"\u003ehomelab\u003c/a\u003e.  The first three that\nI created are mostly chatgpt based, with a bit of hand edit after the fact,\nuploaded to minio and become an app on my\n\u003ca href=\"https://github.com/waylonwalker/k8s-pages\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ek8s-pages\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003erenamed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eThe original title of this post was \u0026#34;Replacing Google Search Apps With Self Hosted Web Apps\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m leaning on \u003ca href=\"/web-wakelock/\" class=\"wikilink\" data-title=\"web wakelock\" data-description=\"I\u0026#39;m trying to replace my usage of google inline search apps with real apps, today I used a stopwatch to time some things out at work by opening stopwatch....\" data-date=\"2025-05-21\" data-preview=\"I\u0026#39;m trying to replace my usage of google inline search apps with real apps, today I used a stopwatch to time some things out at work by opening stopwatch....\"\u003eweb wakelock\u003c/a\u003e to keep the screen on while these apps are\nrunning, primarily clos, timer, and stopwatch.\u003c/p\u003e\n\u003ch2 id=\"clock\"\u003eClock \u003ca href=\"#clock\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA large displya clock.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://clock.wayl.one\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://clock.wayl.one\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"screenshot of https://clock.wayl.one\"/ data-glightbox=\"description: screenshot of https://clock.wayl.one\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"timer\"\u003eTimer \u003ca href=\"#timer\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA simple timer that counts down from thet set time.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://timer.wayl.one\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://timer.wayl.one\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"screenshot of https://timer.wayl.one\"/ data-glightbox=\"description: screenshot of https://timer.wayl.one\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"stopwatch\"\u003eStopwatch \u003ca href=\"#stopwatch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is the one that inspired it all, I need to run a few stopwatches at work,\nand chose to just do it right in the google search with a few tabs running.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://stopwatch.wayl.one\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://stopwatch.wayl.one\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"screenshot of https://stopwatch.wayl.one\"/ data-glightbox=\"description: screenshot of https://stopwatch.wayl.one\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"dice\"\u003eDice \u003ca href=\"#dice\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA simple dice roller, this one is the one that I decided to start adding \u003ccode\u003e?\u003c/code\u003e\nfor help.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://dice.wayl.one\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://dice.wayl.one\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"screenshot of https://dice.wayl.one\"/ data-glightbox=\"description: screenshot of https://dice.wayl.one\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"uuid\"\u003eUUID \u003ca href=\"#uuid\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt displays a uuid, thats it.  \u003ckbd\u003ectrl\u003c/kbd\u003e + \u003ckbd\u003ec\u003c/kbd\u003e to copy.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://uuid.wayl.one\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://uuid.wayl.one\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"screenshot of https://uuid.wayl.one\"/ data-glightbox=\"description: screenshot of https://uuid.wayl.one\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"b64\"\u003eb64 \u003ca href=\"#b64\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eToday i spent some time on \u003ca href=\"b64.wayl.one\"\u003eb64\u003c/a\u003e, it is a base64 decoder/encoder.\nJust start tying to enter text, or paste, escape to deselect the text box, d to\ndecode, e to encode, ? for help.  It took a bit to get all of the keymaps right\nwith the differnt modes and make sure that for instance you don’t keep typing\nin the input box while in help mode, or decode/encode while in the input box.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://b64.wayl.one\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://b64.wayl.one\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"screenshot of https://b64.wayl.one\"/ data-glightbox=\"description: screenshot of https://b64.wayl.one\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"pocketcal\"\u003ePocketCal \u003ca href=\"#pocketcal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis one is not mine, it’s made by \u003ca href=\"https://cassidoo.co/post/pocketcal-build-log/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/cassidoo.co.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/cassidoo.co.png\" class=\"has-avatar  has-avatar-before\"\u003eCassidy\nWilliams\u003c/a\u003e), but is within the\nethos and deserves a mention here.  Its a single page calendar that is a static\nsite completely rendered on the front end, data is stored in the url as you\ninteract with it.  None of your data goes to a server.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://pocketcal.com\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://pocketcal.com\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"screenshot of https://pocketcal.com\"/ data-glightbox=\"description: screenshot of https://pocketcal.com\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"qrcode\"\u003eqrcode \u003ca href=\"#qrcode\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eToday I wanted to finish an article that I was on afk and It killed me to get\nit from my work computer to my phone, so I made a qrcode generator.  Paste in\nor type in your message and it shows up as a qr code live.  This one needed an\nevent listener for window resize since the library creates a rigid canvas qr\ncode that does not fit on the screen once you create it then resize the window.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps/\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps%2F%3Ftext%3Dhttps%3A%2F%2Fshots.waylonwalker.com%2F\u0026amp;width=450\u0026amp;height=500\" alt=\"screenshot of https://b64.wayl.one\"/ data-glightbox=\"description: screenshot of https://b64.wayl.one\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eI even added query params to pass hex codes in for \u003ccode\u003ecolor\u003c/code\u003e and \u003ccode\u003ebg\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps/\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps%2F%3Ftext%3Dhttps%3A%2F%2Fshots.waylonwalker.com%2F%26color%3Dff69b4%26bg%3Dffcc00\u0026amp;width=450\u0026amp;height=500\" alt=\"screenshot of https://b64.wayl.one\"/ data-glightbox=\"description: screenshot of https://b64.wayl.one\"\u003e\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI'm working on replacing my usage of google inline search apps with real apps,\nthese are ones that I create and host on my own homelab.  The first three that\nI created are mostly chatgpt based, with a bit of hand edit after the fact,\nuploaded to minio and become an app on my\n[k8s-pages](https://github.com/waylonwalker/k8s-pages)\n\n!!! Note renamed\n    The original title of this post was \"Replacing Google Search Apps With Self Hosted Web Apps\"\n\nI'm leaning on \u003ca href=\"/web-wakelock/\" class=\"wikilink\" data-title=\"web wakelock\" data-description=\"I\u0026#39;m trying to replace my usage of google inline search apps with real apps, today I used a stopwatch to time some things out at work by opening stopwatch....\" data-date=\"2025-05-21\"\u003eweb wakelock\u003c/a\u003e to keep the screen on while these apps are\nrunning, primarily clos, timer, and stopwatch.\n\n## Clock\n\nA large displya clock.\n\n[![screenshot of https://clock.wayl.one](https://shots.waylonwalker.com/shot/?url=https://clock.wayl.one\u0026height=450\u0026width=800\u0026scaled_width=800\u0026scaled_height=450\u0026selectors=)](https://clock.wayl.one)\n\n## Timer\n\nA simple timer that counts down from thet set time.\n\n[![screenshot of https://timer.wayl.one](https://shots.waylonwalker.com/shot/?url=https://timer.wayl.one\u0026height=450\u0026width=800\u0026scaled_width=800\u0026scaled_height=450\u0026selectors=)](https://timer.wayl.one)\n\n## Stopwatch\n\nThis is the one that inspired it all, I need to run a few stopwatches at work,\nand chose to just do it right in the google search with a few tabs running.\n\n[![screenshot of https://stopwatch.wayl.one](https://shots.waylonwalker.com/shot/?url=https://stopwatch.wayl.one\u0026height=450\u0026width=800\u0026scaled_width=800\u0026scaled_height=450\u0026selectors=)](https://stopwatch.wayl.one)\n\n## Dice\n\nA simple dice roller, this one is the one that I decided to start adding `?`\nfor help.\n\n[![screenshot of https://dice.wayl.one](https://shots.waylonwalker.com/shot/?url=https://dice.wayl.one\u0026height=450\u0026width=800\u0026scaled_width=800\u0026scaled_height=450\u0026selectors=)](https://dice.wayl.one)\n\n## UUID\n\nIt displays a uuid, thats it.  \u003ckbd\u003ectrl\u003c/kbd\u003e + \u003ckbd\u003ec\u003c/kbd\u003e to copy.\n\n[![screenshot of https://uuid.wayl.one](https://shots.waylonwalker.com/shot/?url=https://uuid.wayl.one\u0026height=450\u0026width=800\u0026scaled_width=800\u0026scaled_height=450\u0026selectors=)](https://uuid.wayl.one)\n\n## b64\n\nToday i spent some time on [b64](b64.wayl.one), it is a base64 decoder/encoder.\nJust start tying to enter text, or paste, escape to deselect the text box, d to\ndecode, e to encode, ? for help.  It took a bit to get all of the keymaps right\nwith the differnt modes and make sure that for instance you don't keep typing\nin the input box while in help mode, or decode/encode while in the input box.\n\n[![screenshot of https://b64.wayl.one](https://shots.waylonwalker.com/shot/?url=https://b64.wayl.one\u0026height=450\u0026width=800\u0026scaled_width=800\u0026scaled_height=450\u0026selectors=)](https://b64.wayl.one)\n\n## PocketCal\n\nThis one is not mine, it's made by [Cassidy\nWilliams](https://cassidoo.co/post/pocketcal-build-log/)), but is within the\nethos and deserves a mention here.  Its a single page calendar that is a static\nsite completely rendered on the front end, data is stored in the url as you\ninteract with it.  None of your data goes to a server.\n\n[![screenshot of https://pocketcal.com](https://shots.waylonwalker.com/shot/?url=https://pocketcal.com\u0026height=450\u0026width=800\u0026scaled_width=800\u0026scaled_height=450\u0026selectors=)](https://pocketcal.com)\n\n## qrcode\n\nToday I wanted to finish an article that I was on afk and It killed me to get\nit from my work computer to my phone, so I made a qrcode generator.  Paste in\nor type in your message and it shows up as a qr code live.  This one needed an\nevent listener for window resize since the library creates a rigid canvas qr\ncode that does not fit on the screen once you create it then resize the window.\n\n[![screenshot of https://b64.wayl.one](https://shots.waylonwalker.com/shot/?url=https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps%2F%3Ftext%3Dhttps%3A%2F%2Fshots.waylonwalker.com%2F\u0026width=450\u0026height=500)](https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps/)\n\nI even added query params to pass hex codes in for `color` and `bg`.\n\n[![screenshot of https://b64.wayl.one](https://shots.waylonwalker.com/shot/?url=https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps%2F%3Ftext%3Dhttps%3A%2F%2Fshots.waylonwalker.com%2F%26color%3Dff69b4%26bg%3Dffcc00\u0026width=450\u0026height=500)](https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps/)\n",
      "summary": "I'm working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...",
      "date_published": "2025-05-22T14:31:29Z",
      "date_modified": "2025-05-22T14:31:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "self-hosted",
        "slash",
        "meta"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/analytics/",
      "url": "https://go.waylonwalker.com/analytics/",
      "title": "analytics",
      "content_html": "\u003cp\u003eI’ve been posting on this site since 2016, when layoffs were rolling through\nthe company I worked for at the time.  Starting a personal blog and a pile of\nside projects felt like one of the best things I could do for my resume, so off\nI went.  This site is built on \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\" data-preview=\"This post is a work in progress.\"\u003emarkata\u003c/a\u003e, more about that in the\n\u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"/colophon\" data-description=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\" data-date=\"2025-01-02\" data-preview=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\"\u003e/colophon\u003c/a\u003e.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/7b6cf2c2-2299-4320-b58f-b0bebf2d0504.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/7b6cf2c2-2299-4320-b58f-b0bebf2d0504.png\" alt=\"screenshot-2025-01-31T21-23-13-643Z.png\"/ data-glightbox=\"description: screenshot-2025-01-31T21-23-13-643Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThe old version of this page embedded static SVGs from my Python Markata build.\nThose files are gone in the \u003ccode\u003emarkata-go\u003c/code\u003e site, so this page now renders the\nyearly posting history directly from the current content set.\u003c/p\u003e\n\u003ch2 id=\"post-contributions-all-time-monthly\"\u003ePost Contributions All Time Monthly \u003ca href=\"#post-contributions-all-time-monthly\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"contribution-graph-container contribution-graph-error\"\u003e\n  \u003cp\u003eContribution Graph Error: Invalid JSON configuration\u003c/p\u003e\n  \u003cpre\u003einvalid character \u0026#39;%\u0026#39; looking for beginning of object key string\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2026\"\u003ePost Contributions in 2026 \u003ca href=\"#post-contributions-in-2026\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-1\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2025\"\u003ePost Contributions in 2025 \u003ca href=\"#post-contributions-in-2025\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-2\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2024\"\u003ePost Contributions in 2024 \u003ca href=\"#post-contributions-in-2024\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-3\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2023\"\u003ePost Contributions in 2023 \u003ca href=\"#post-contributions-in-2023\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e2023 was a very busy year for me and I started slowing down.  About mid year I\nfelt like I had a lot that I wanted to get out, but felt like I couldn’t,\nbecause I did not have the time to blog, so I added \u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\" data-preview=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\"\u003eThoughts\u003c/a\u003e on 7/22/2023\nwith this \u003ca href=\"https://waylonwalker.com/thoughts-2/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003efirst thought\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-4\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNotice the huge uptick that started immediately as shots was released\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"post-contributions-in-2022\"\u003ePost Contributions in 2022 \u003ca href=\"#post-contributions-in-2022\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-5\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2021\"\u003ePost Contributions in 2021 \u003ca href=\"#post-contributions-in-2021\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAt the End of 2021 I started posting [[ til ]]s daily for a few months.  This\nis the point when I really started lowering the barrier to entry to make a blog\npost.  A blog post did not need to be a super long essay, but could be the size\nof a tweet.\u003c/p\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-6\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2020\"\u003ePost Contributions in 2020 \u003ca href=\"#post-contributions-in-2020\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-7\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2019\"\u003ePost Contributions in 2019 \u003ca href=\"#post-contributions-in-2019\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e2019 was a huge learning year for me.  I was very busy leading a migration to\nthe cloud, containerized data pipeline orchestration, and setting up new\nprojects and templates using \u003ca href=\"/kedro/\" class=\"wikilink\" data-title=\"Kedro\" data-description=\"My Notes about using kedro\" data-date=\"2019-11-02\" data-preview=\"My Notes about using kedro\"\u003eKedro\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-8\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2018\"\u003ePost Contributions in 2018 \u003ca href=\"#post-contributions-in-2018\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis was the year I really started reaching for the terminal kicking off the\nyear with \u003ca href=\"/vim-notes/\" class=\"wikilink\" data-title=\"Vim Notes\" data-description=\"norcalli/neovim-plugin\" data-date=\"2018-02-01\" data-preview=\"norcalli/neovim-plugin\"\u003eVim Notes\u003c/a\u003e and rounding out with \u003ca href=\"/bash/\" class=\"wikilink\" data-title=\"📝 Bash Notes\" data-description=\"Waylon Walker\u0026#39;s Bash Notes\" data-date=\"2019-09-08\" data-preview=\"Waylon Walker\u0026#39;s Bash Notes\"\u003e📝 Bash Notes\u003c/a\u003e.  I had been\nwatching luke smith for a awhile, and started managing my first linux server at\nwork.  I was stuck with windows at the time, but wsl was a new thing that let\nme run linux in the terminal.\u003c/p\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-9\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2017\"\u003ePost Contributions in 2017 \u003ca href=\"#post-contributions-in-2017\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e2017 was the year of getting started, I was coming up on 5 years into my\ncareer, and layoffs were happening hard at the time.  I remember fist landing 5\nyears before and being told in the companies long history they have never laid\noff engineers, it was a very safe place to be.  This was a wake up call that it\nmight all turn around and I would take nothing with me.  Blogging became my way\nto document things I was learning, it was making be better at communicating,\nand giving me a reason to take a deeper dive into interesting topics.\u003c/p\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-10\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"post-contributions-in-2016\"\u003ePost Contributions in 2016 \u003ca href=\"#post-contributions-in-2016\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e2016 was the year that I created my github account, and really got serious\nabout career switching from Mechanical Engineering to Software Engineering.\nAll of my 2016 posts are back-dated github stars.\u003c/p\u003e\n\u003cdiv class=\"contribution-graph-container\"\u003e\n  \u003cdiv id=\"contribution-graph-11\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cstyle\u003e\n.contribution-graph-container {\n  width: 100%;\n  overflow: hidden;\n  margin: 1rem 0;\n  display: flex;\n  justify-content: center;\n}\n.contribution-graph-container \u003e div {\n  flex-shrink: 0;\n  transform-origin: top center;\n}\n#ch-tooltip {\n  background: var(--color-surface, #333);\n  color: var(--color-text, #fff);\n  padding: 0.5rem 0.75rem;\n  border-radius: 4px;\n  font-size: 0.875rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n  z-index: 10000 !important;\n}\n\u003c/style\u003e\n\u003clink rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/cal-heatmap@4.2.4/dist/cal-heatmap.css\"\u003e\n\u003cscript src=\"https://d3js.org/d3.v7.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://unpkg.com/@popperjs/core@2\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/cal-heatmap@4.2.4/dist/cal-heatmap.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/cal-heatmap@4.2.4/dist/plugins/Tooltip.min.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n  // Initialize graphs\n  \n  (function() {\n    const graphId = 'contribution-graph-1';\n    const data = [{\"date\":\"2026-01-01\",\"value\":3},{\"date\":\"2026-01-02\",\"value\":3},{\"date\":\"2026-01-03\",\"value\":3},{\"date\":\"2026-01-04\",\"value\":5},{\"date\":\"2026-01-05\",\"value\":3},{\"date\":\"2026-01-06\",\"value\":1},{\"date\":\"2026-01-07\",\"value\":1},{\"date\":\"2026-01-08\",\"value\":7},{\"date\":\"2026-01-09\",\"value\":3},{\"date\":\"2026-01-10\",\"value\":2},{\"date\":\"2026-01-11\",\"value\":6},{\"date\":\"2026-01-12\",\"value\":4},{\"date\":\"2026-01-13\",\"value\":6},{\"date\":\"2026-01-14\",\"value\":6},{\"date\":\"2026-01-15\",\"value\":6},{\"date\":\"2026-01-17\",\"value\":1},{\"date\":\"2026-01-18\",\"value\":1},{\"date\":\"2026-01-19\",\"value\":3},{\"date\":\"2026-01-21\",\"value\":3},{\"date\":\"2026-01-22\",\"value\":2},{\"date\":\"2026-01-23\",\"value\":2},{\"date\":\"2026-01-24\",\"value\":2},{\"date\":\"2026-01-25\",\"value\":1},{\"date\":\"2026-01-26\",\"value\":5},{\"date\":\"2026-01-27\",\"value\":1},{\"date\":\"2026-01-28\",\"value\":1},{\"date\":\"2026-01-29\",\"value\":1},{\"date\":\"2026-01-30\",\"value\":1},{\"date\":\"2026-02-02\",\"value\":2},{\"date\":\"2026-02-03\",\"value\":6},{\"date\":\"2026-02-04\",\"value\":1},{\"date\":\"2026-02-05\",\"value\":2},{\"date\":\"2026-02-06\",\"value\":3},{\"date\":\"2026-02-07\",\"value\":3},{\"date\":\"2026-02-09\",\"value\":2},{\"date\":\"2026-02-10\",\"value\":2},{\"date\":\"2026-02-11\",\"value\":6},{\"date\":\"2026-02-12\",\"value\":1},{\"date\":\"2026-02-13\",\"value\":1},{\"date\":\"2026-02-14\",\"value\":3},{\"date\":\"2026-02-16\",\"value\":4},{\"date\":\"2026-02-17\",\"value\":3},{\"date\":\"2026-02-18\",\"value\":1},{\"date\":\"2026-02-19\",\"value\":4},{\"date\":\"2026-02-20\",\"value\":1},{\"date\":\"2026-02-21\",\"value\":1},{\"date\":\"2026-02-22\",\"value\":1},{\"date\":\"2026-02-23\",\"value\":6},{\"date\":\"2026-02-24\",\"value\":4},{\"date\":\"2026-02-25\",\"value\":5},{\"date\":\"2026-02-26\",\"value\":2},{\"date\":\"2026-02-27\",\"value\":3},{\"date\":\"2026-02-28\",\"value\":3},{\"date\":\"2026-03-01\",\"value\":1},{\"date\":\"2026-03-02\",\"value\":4},{\"date\":\"2026-03-03\",\"value\":2},{\"date\":\"2026-03-04\",\"value\":5},{\"date\":\"2026-03-05\",\"value\":2},{\"date\":\"2026-03-06\",\"value\":3},{\"date\":\"2026-03-07\",\"value\":2},{\"date\":\"2026-03-09\",\"value\":4},{\"date\":\"2026-03-10\",\"value\":1},{\"date\":\"2026-03-12\",\"value\":1},{\"date\":\"2026-03-13\",\"value\":1},{\"date\":\"2026-03-15\",\"value\":3},{\"date\":\"2026-03-16\",\"value\":3},{\"date\":\"2026-03-17\",\"value\":12},{\"date\":\"2026-03-18\",\"value\":3},{\"date\":\"2026-03-19\",\"value\":4},{\"date\":\"2026-03-20\",\"value\":1},{\"date\":\"2026-03-21\",\"value\":1},{\"date\":\"2026-03-22\",\"value\":2},{\"date\":\"2026-03-23\",\"value\":5},{\"date\":\"2026-03-24\",\"value\":1},{\"date\":\"2026-03-25\",\"value\":3},{\"date\":\"2026-03-26\",\"value\":4},{\"date\":\"2026-03-27\",\"value\":2},{\"date\":\"2026-03-28\",\"value\":2},{\"date\":\"2026-03-29\",\"value\":5},{\"date\":\"2026-03-30\",\"value\":1},{\"date\":\"2026-03-31\",\"value\":9},{\"date\":\"2026-04-01\",\"value\":2},{\"date\":\"2026-04-02\",\"value\":7},{\"date\":\"2026-04-03\",\"value\":4},{\"date\":\"2026-04-04\",\"value\":1},{\"date\":\"2026-04-05\",\"value\":1},{\"date\":\"2026-04-08\",\"value\":4},{\"date\":\"2026-04-09\",\"value\":2},{\"date\":\"2026-04-12\",\"value\":2},{\"date\":\"2026-04-13\",\"value\":4},{\"date\":\"2026-04-14\",\"value\":4},{\"date\":\"2026-04-15\",\"value\":4},{\"date\":\"2026-04-16\",\"value\":1},{\"date\":\"2026-04-17\",\"value\":1},{\"date\":\"2026-04-18\",\"value\":2},{\"date\":\"2026-04-19\",\"value\":1}];\n    const options = {date: { start: new Date('2026-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 12;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-2';\n    const data = [{\"date\":\"2025-01-02\",\"value\":6},{\"date\":\"2025-01-03\",\"value\":6},{\"date\":\"2025-01-04\",\"value\":5},{\"date\":\"2025-01-06\",\"value\":3},{\"date\":\"2025-01-07\",\"value\":1},{\"date\":\"2025-01-08\",\"value\":3},{\"date\":\"2025-01-09\",\"value\":12},{\"date\":\"2025-01-10\",\"value\":3},{\"date\":\"2025-01-11\",\"value\":3},{\"date\":\"2025-01-12\",\"value\":3},{\"date\":\"2025-01-13\",\"value\":5},{\"date\":\"2025-01-16\",\"value\":1},{\"date\":\"2025-01-17\",\"value\":2},{\"date\":\"2025-01-18\",\"value\":2},{\"date\":\"2025-01-19\",\"value\":5},{\"date\":\"2025-01-20\",\"value\":3},{\"date\":\"2025-01-21\",\"value\":11},{\"date\":\"2025-01-22\",\"value\":2},{\"date\":\"2025-01-23\",\"value\":2},{\"date\":\"2025-01-24\",\"value\":2},{\"date\":\"2025-01-25\",\"value\":1},{\"date\":\"2025-01-27\",\"value\":1},{\"date\":\"2025-01-28\",\"value\":2},{\"date\":\"2025-01-29\",\"value\":2},{\"date\":\"2025-01-30\",\"value\":2},{\"date\":\"2025-01-31\",\"value\":7},{\"date\":\"2025-02-01\",\"value\":4},{\"date\":\"2025-02-02\",\"value\":5},{\"date\":\"2025-02-03\",\"value\":2},{\"date\":\"2025-02-05\",\"value\":2},{\"date\":\"2025-02-07\",\"value\":3},{\"date\":\"2025-02-08\",\"value\":2},{\"date\":\"2025-02-09\",\"value\":3},{\"date\":\"2025-02-10\",\"value\":2},{\"date\":\"2025-02-11\",\"value\":2},{\"date\":\"2025-02-12\",\"value\":6},{\"date\":\"2025-02-13\",\"value\":6},{\"date\":\"2025-02-14\",\"value\":7},{\"date\":\"2025-02-15\",\"value\":6},{\"date\":\"2025-02-16\",\"value\":1},{\"date\":\"2025-02-17\",\"value\":11},{\"date\":\"2025-02-18\",\"value\":3},{\"date\":\"2025-02-20\",\"value\":1},{\"date\":\"2025-02-21\",\"value\":3},{\"date\":\"2025-02-22\",\"value\":1},{\"date\":\"2025-02-23\",\"value\":2},{\"date\":\"2025-02-25\",\"value\":1},{\"date\":\"2025-02-26\",\"value\":1},{\"date\":\"2025-02-28\",\"value\":2},{\"date\":\"2025-03-01\",\"value\":3},{\"date\":\"2025-03-02\",\"value\":1},{\"date\":\"2025-03-03\",\"value\":1},{\"date\":\"2025-03-04\",\"value\":1},{\"date\":\"2025-03-06\",\"value\":2},{\"date\":\"2025-03-08\",\"value\":1},{\"date\":\"2025-03-11\",\"value\":1},{\"date\":\"2025-03-12\",\"value\":1},{\"date\":\"2025-03-13\",\"value\":1},{\"date\":\"2025-03-14\",\"value\":2},{\"date\":\"2025-03-15\",\"value\":2},{\"date\":\"2025-03-17\",\"value\":2},{\"date\":\"2025-03-20\",\"value\":2},{\"date\":\"2025-03-24\",\"value\":1},{\"date\":\"2025-03-25\",\"value\":1},{\"date\":\"2025-03-26\",\"value\":1},{\"date\":\"2025-03-29\",\"value\":1},{\"date\":\"2025-04-04\",\"value\":1},{\"date\":\"2025-04-07\",\"value\":2},{\"date\":\"2025-04-09\",\"value\":3},{\"date\":\"2025-04-12\",\"value\":2},{\"date\":\"2025-04-13\",\"value\":1},{\"date\":\"2025-04-15\",\"value\":3},{\"date\":\"2025-04-17\",\"value\":1},{\"date\":\"2025-04-19\",\"value\":1},{\"date\":\"2025-04-20\",\"value\":1},{\"date\":\"2025-04-22\",\"value\":2},{\"date\":\"2025-04-24\",\"value\":1},{\"date\":\"2025-04-25\",\"value\":1},{\"date\":\"2025-04-27\",\"value\":1},{\"date\":\"2025-04-28\",\"value\":6},{\"date\":\"2025-04-30\",\"value\":1},{\"date\":\"2025-05-01\",\"value\":9},{\"date\":\"2025-05-02\",\"value\":2},{\"date\":\"2025-05-04\",\"value\":4},{\"date\":\"2025-05-05\",\"value\":3},{\"date\":\"2025-05-06\",\"value\":2},{\"date\":\"2025-05-07\",\"value\":4},{\"date\":\"2025-05-09\",\"value\":4},{\"date\":\"2025-05-10\",\"value\":4},{\"date\":\"2025-05-11\",\"value\":2},{\"date\":\"2025-05-12\",\"value\":1},{\"date\":\"2025-05-16\",\"value\":1},{\"date\":\"2025-05-18\",\"value\":1},{\"date\":\"2025-05-19\",\"value\":1},{\"date\":\"2025-05-21\",\"value\":1},{\"date\":\"2025-05-22\",\"value\":3},{\"date\":\"2025-05-23\",\"value\":1},{\"date\":\"2025-05-24\",\"value\":4},{\"date\":\"2025-05-25\",\"value\":1},{\"date\":\"2025-05-26\",\"value\":1},{\"date\":\"2025-05-27\",\"value\":5},{\"date\":\"2025-05-28\",\"value\":5},{\"date\":\"2025-05-29\",\"value\":3},{\"date\":\"2025-05-31\",\"value\":10},{\"date\":\"2025-06-01\",\"value\":1},{\"date\":\"2025-06-02\",\"value\":2},{\"date\":\"2025-06-03\",\"value\":3},{\"date\":\"2025-06-04\",\"value\":2},{\"date\":\"2025-06-05\",\"value\":3},{\"date\":\"2025-06-06\",\"value\":8},{\"date\":\"2025-06-07\",\"value\":7},{\"date\":\"2025-06-08\",\"value\":2},{\"date\":\"2025-06-09\",\"value\":1},{\"date\":\"2025-06-10\",\"value\":4},{\"date\":\"2025-06-11\",\"value\":2},{\"date\":\"2025-06-13\",\"value\":1},{\"date\":\"2025-06-14\",\"value\":2},{\"date\":\"2025-06-15\",\"value\":1},{\"date\":\"2025-06-16\",\"value\":1},{\"date\":\"2025-06-17\",\"value\":2},{\"date\":\"2025-06-18\",\"value\":2},{\"date\":\"2025-06-19\",\"value\":2},{\"date\":\"2025-06-21\",\"value\":1},{\"date\":\"2025-06-22\",\"value\":1},{\"date\":\"2025-06-23\",\"value\":4},{\"date\":\"2025-06-24\",\"value\":3},{\"date\":\"2025-06-25\",\"value\":1},{\"date\":\"2025-06-26\",\"value\":2},{\"date\":\"2025-06-27\",\"value\":2},{\"date\":\"2025-06-29\",\"value\":3},{\"date\":\"2025-06-30\",\"value\":2},{\"date\":\"2025-07-01\",\"value\":2},{\"date\":\"2025-07-02\",\"value\":2},{\"date\":\"2025-07-04\",\"value\":3},{\"date\":\"2025-07-05\",\"value\":2},{\"date\":\"2025-07-06\",\"value\":7},{\"date\":\"2025-07-07\",\"value\":2},{\"date\":\"2025-07-08\",\"value\":3},{\"date\":\"2025-07-09\",\"value\":3},{\"date\":\"2025-07-10\",\"value\":1},{\"date\":\"2025-07-11\",\"value\":1},{\"date\":\"2025-07-12\",\"value\":2},{\"date\":\"2025-07-15\",\"value\":2},{\"date\":\"2025-07-16\",\"value\":2},{\"date\":\"2025-07-17\",\"value\":3},{\"date\":\"2025-07-18\",\"value\":4},{\"date\":\"2025-07-19\",\"value\":1},{\"date\":\"2025-07-21\",\"value\":2},{\"date\":\"2025-07-22\",\"value\":2},{\"date\":\"2025-07-23\",\"value\":1},{\"date\":\"2025-07-24\",\"value\":1},{\"date\":\"2025-07-25\",\"value\":4},{\"date\":\"2025-07-26\",\"value\":2},{\"date\":\"2025-07-27\",\"value\":2},{\"date\":\"2025-07-28\",\"value\":4},{\"date\":\"2025-07-29\",\"value\":6},{\"date\":\"2025-07-30\",\"value\":5},{\"date\":\"2025-07-31\",\"value\":2},{\"date\":\"2025-08-01\",\"value\":2},{\"date\":\"2025-08-02\",\"value\":7},{\"date\":\"2025-08-03\",\"value\":2},{\"date\":\"2025-08-04\",\"value\":4},{\"date\":\"2025-08-05\",\"value\":6},{\"date\":\"2025-08-06\",\"value\":4},{\"date\":\"2025-08-07\",\"value\":3},{\"date\":\"2025-08-08\",\"value\":3},{\"date\":\"2025-08-09\",\"value\":3},{\"date\":\"2025-08-10\",\"value\":4},{\"date\":\"2025-08-11\",\"value\":2},{\"date\":\"2025-08-12\",\"value\":4},{\"date\":\"2025-08-13\",\"value\":1},{\"date\":\"2025-08-14\",\"value\":3},{\"date\":\"2025-08-15\",\"value\":2},{\"date\":\"2025-08-16\",\"value\":2},{\"date\":\"2025-08-17\",\"value\":4},{\"date\":\"2025-08-18\",\"value\":4},{\"date\":\"2025-08-21\",\"value\":5},{\"date\":\"2025-08-22\",\"value\":1},{\"date\":\"2025-08-23\",\"value\":11},{\"date\":\"2025-08-24\",\"value\":1},{\"date\":\"2025-08-25\",\"value\":7},{\"date\":\"2025-08-26\",\"value\":5},{\"date\":\"2025-08-27\",\"value\":5},{\"date\":\"2025-08-28\",\"value\":2},{\"date\":\"2025-08-29\",\"value\":6},{\"date\":\"2025-08-30\",\"value\":7},{\"date\":\"2025-08-31\",\"value\":7},{\"date\":\"2025-09-02\",\"value\":5},{\"date\":\"2025-09-03\",\"value\":2},{\"date\":\"2025-09-04\",\"value\":3},{\"date\":\"2025-09-05\",\"value\":3},{\"date\":\"2025-09-07\",\"value\":1},{\"date\":\"2025-09-08\",\"value\":1},{\"date\":\"2025-09-10\",\"value\":2},{\"date\":\"2025-09-11\",\"value\":1},{\"date\":\"2025-09-13\",\"value\":1},{\"date\":\"2025-09-16\",\"value\":8},{\"date\":\"2025-09-17\",\"value\":3},{\"date\":\"2025-09-18\",\"value\":2},{\"date\":\"2025-09-19\",\"value\":4},{\"date\":\"2025-09-20\",\"value\":6},{\"date\":\"2025-09-21\",\"value\":5},{\"date\":\"2025-09-23\",\"value\":3},{\"date\":\"2025-09-25\",\"value\":1},{\"date\":\"2025-09-26\",\"value\":3},{\"date\":\"2025-09-27\",\"value\":7},{\"date\":\"2025-09-28\",\"value\":1},{\"date\":\"2025-09-29\",\"value\":4},{\"date\":\"2025-10-01\",\"value\":1},{\"date\":\"2025-10-02\",\"value\":1},{\"date\":\"2025-10-03\",\"value\":5},{\"date\":\"2025-10-05\",\"value\":1},{\"date\":\"2025-10-08\",\"value\":1},{\"date\":\"2025-10-09\",\"value\":1},{\"date\":\"2025-10-10\",\"value\":2},{\"date\":\"2025-10-11\",\"value\":1},{\"date\":\"2025-10-12\",\"value\":3},{\"date\":\"2025-10-15\",\"value\":1},{\"date\":\"2025-10-16\",\"value\":1},{\"date\":\"2025-10-18\",\"value\":2},{\"date\":\"2025-10-19\",\"value\":1},{\"date\":\"2025-10-20\",\"value\":1},{\"date\":\"2025-10-21\",\"value\":1},{\"date\":\"2025-10-22\",\"value\":3},{\"date\":\"2025-10-23\",\"value\":2},{\"date\":\"2025-10-24\",\"value\":5},{\"date\":\"2025-10-26\",\"value\":1},{\"date\":\"2025-10-27\",\"value\":1},{\"date\":\"2025-10-28\",\"value\":2},{\"date\":\"2025-10-29\",\"value\":3},{\"date\":\"2025-10-30\",\"value\":1},{\"date\":\"2025-10-31\",\"value\":1},{\"date\":\"2025-11-01\",\"value\":3},{\"date\":\"2025-11-02\",\"value\":6},{\"date\":\"2025-11-04\",\"value\":3},{\"date\":\"2025-11-05\",\"value\":2},{\"date\":\"2025-11-06\",\"value\":1},{\"date\":\"2025-11-09\",\"value\":2},{\"date\":\"2025-11-11\",\"value\":4},{\"date\":\"2025-11-12\",\"value\":3},{\"date\":\"2025-11-15\",\"value\":2},{\"date\":\"2025-11-17\",\"value\":1},{\"date\":\"2025-11-18\",\"value\":1},{\"date\":\"2025-11-19\",\"value\":2},{\"date\":\"2025-11-20\",\"value\":1},{\"date\":\"2025-11-21\",\"value\":2},{\"date\":\"2025-11-23\",\"value\":4},{\"date\":\"2025-11-24\",\"value\":1},{\"date\":\"2025-11-26\",\"value\":1},{\"date\":\"2025-11-27\",\"value\":1},{\"date\":\"2025-11-28\",\"value\":4},{\"date\":\"2025-11-29\",\"value\":1},{\"date\":\"2025-11-30\",\"value\":1},{\"date\":\"2025-12-01\",\"value\":7},{\"date\":\"2025-12-02\",\"value\":2},{\"date\":\"2025-12-03\",\"value\":2},{\"date\":\"2025-12-04\",\"value\":3},{\"date\":\"2025-12-05\",\"value\":3},{\"date\":\"2025-12-06\",\"value\":15},{\"date\":\"2025-12-07\",\"value\":8},{\"date\":\"2025-12-08\",\"value\":6},{\"date\":\"2025-12-09\",\"value\":9},{\"date\":\"2025-12-10\",\"value\":4},{\"date\":\"2025-12-11\",\"value\":1},{\"date\":\"2025-12-12\",\"value\":3},{\"date\":\"2025-12-13\",\"value\":2},{\"date\":\"2025-12-14\",\"value\":4},{\"date\":\"2025-12-15\",\"value\":1},{\"date\":\"2025-12-16\",\"value\":3},{\"date\":\"2025-12-17\",\"value\":3},{\"date\":\"2025-12-18\",\"value\":2},{\"date\":\"2025-12-19\",\"value\":3},{\"date\":\"2025-12-20\",\"value\":3},{\"date\":\"2025-12-21\",\"value\":6},{\"date\":\"2025-12-22\",\"value\":7},{\"date\":\"2025-12-23\",\"value\":2},{\"date\":\"2025-12-24\",\"value\":2},{\"date\":\"2025-12-25\",\"value\":1},{\"date\":\"2025-12-28\",\"value\":1},{\"date\":\"2025-12-29\",\"value\":2},{\"date\":\"2025-12-31\",\"value\":1}];\n    const options = {date: { start: new Date('2025-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 15;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-3';\n    const data = [{\"date\":\"2024-01-12\",\"value\":1},{\"date\":\"2024-01-14\",\"value\":1},{\"date\":\"2024-01-25\",\"value\":1},{\"date\":\"2024-01-26\",\"value\":4},{\"date\":\"2024-01-28\",\"value\":1},{\"date\":\"2024-01-30\",\"value\":3},{\"date\":\"2024-02-03\",\"value\":1},{\"date\":\"2024-02-09\",\"value\":1},{\"date\":\"2024-02-11\",\"value\":1},{\"date\":\"2024-02-16\",\"value\":1},{\"date\":\"2024-02-27\",\"value\":2},{\"date\":\"2024-03-01\",\"value\":3},{\"date\":\"2024-03-04\",\"value\":3},{\"date\":\"2024-03-06\",\"value\":3},{\"date\":\"2024-03-07\",\"value\":5},{\"date\":\"2024-03-09\",\"value\":2},{\"date\":\"2024-03-14\",\"value\":1},{\"date\":\"2024-03-15\",\"value\":4},{\"date\":\"2024-03-16\",\"value\":2},{\"date\":\"2024-03-18\",\"value\":1},{\"date\":\"2024-03-19\",\"value\":3},{\"date\":\"2024-03-20\",\"value\":2},{\"date\":\"2024-03-21\",\"value\":1},{\"date\":\"2024-03-24\",\"value\":1},{\"date\":\"2024-03-25\",\"value\":1},{\"date\":\"2024-03-26\",\"value\":3},{\"date\":\"2024-03-27\",\"value\":2},{\"date\":\"2024-03-28\",\"value\":1},{\"date\":\"2024-03-29\",\"value\":1},{\"date\":\"2024-03-30\",\"value\":1},{\"date\":\"2024-04-01\",\"value\":5},{\"date\":\"2024-04-02\",\"value\":1},{\"date\":\"2024-04-03\",\"value\":2},{\"date\":\"2024-04-04\",\"value\":1},{\"date\":\"2024-04-05\",\"value\":1},{\"date\":\"2024-04-06\",\"value\":1},{\"date\":\"2024-04-07\",\"value\":4},{\"date\":\"2024-04-08\",\"value\":3},{\"date\":\"2024-04-09\",\"value\":3},{\"date\":\"2024-04-10\",\"value\":2},{\"date\":\"2024-04-11\",\"value\":2},{\"date\":\"2024-04-12\",\"value\":1},{\"date\":\"2024-04-13\",\"value\":2},{\"date\":\"2024-04-14\",\"value\":1},{\"date\":\"2024-04-15\",\"value\":1},{\"date\":\"2024-04-16\",\"value\":3},{\"date\":\"2024-04-17\",\"value\":5},{\"date\":\"2024-04-18\",\"value\":3},{\"date\":\"2024-04-19\",\"value\":3},{\"date\":\"2024-04-20\",\"value\":5},{\"date\":\"2024-04-21\",\"value\":1},{\"date\":\"2024-04-22\",\"value\":1},{\"date\":\"2024-04-23\",\"value\":1},{\"date\":\"2024-04-24\",\"value\":1},{\"date\":\"2024-04-25\",\"value\":2},{\"date\":\"2024-04-30\",\"value\":7},{\"date\":\"2024-05-01\",\"value\":3},{\"date\":\"2024-05-02\",\"value\":3},{\"date\":\"2024-05-08\",\"value\":1},{\"date\":\"2024-05-09\",\"value\":1},{\"date\":\"2024-05-10\",\"value\":1},{\"date\":\"2024-05-11\",\"value\":1},{\"date\":\"2024-05-12\",\"value\":3},{\"date\":\"2024-05-14\",\"value\":3},{\"date\":\"2024-05-16\",\"value\":2},{\"date\":\"2024-05-21\",\"value\":2},{\"date\":\"2024-05-22\",\"value\":4},{\"date\":\"2024-05-25\",\"value\":2},{\"date\":\"2024-05-26\",\"value\":2},{\"date\":\"2024-05-30\",\"value\":8},{\"date\":\"2024-05-31\",\"value\":3},{\"date\":\"2024-06-01\",\"value\":4},{\"date\":\"2024-06-03\",\"value\":4},{\"date\":\"2024-06-04\",\"value\":2},{\"date\":\"2024-06-06\",\"value\":4},{\"date\":\"2024-06-07\",\"value\":3},{\"date\":\"2024-06-08\",\"value\":1},{\"date\":\"2024-06-09\",\"value\":3},{\"date\":\"2024-06-10\",\"value\":3},{\"date\":\"2024-06-11\",\"value\":1},{\"date\":\"2024-06-12\",\"value\":4},{\"date\":\"2024-06-14\",\"value\":1},{\"date\":\"2024-06-16\",\"value\":2},{\"date\":\"2024-06-18\",\"value\":1},{\"date\":\"2024-06-23\",\"value\":1},{\"date\":\"2024-06-24\",\"value\":5},{\"date\":\"2024-06-25\",\"value\":2},{\"date\":\"2024-06-26\",\"value\":3},{\"date\":\"2024-06-28\",\"value\":5},{\"date\":\"2024-06-30\",\"value\":1},{\"date\":\"2024-07-01\",\"value\":4},{\"date\":\"2024-07-02\",\"value\":5},{\"date\":\"2024-07-03\",\"value\":5},{\"date\":\"2024-07-04\",\"value\":3},{\"date\":\"2024-07-05\",\"value\":1},{\"date\":\"2024-07-06\",\"value\":7},{\"date\":\"2024-07-07\",\"value\":1},{\"date\":\"2024-07-09\",\"value\":2},{\"date\":\"2024-07-10\",\"value\":4},{\"date\":\"2024-07-11\",\"value\":5},{\"date\":\"2024-07-12\",\"value\":1},{\"date\":\"2024-07-15\",\"value\":3},{\"date\":\"2024-07-17\",\"value\":2},{\"date\":\"2024-07-18\",\"value\":1},{\"date\":\"2024-07-19\",\"value\":1},{\"date\":\"2024-07-20\",\"value\":1},{\"date\":\"2024-07-21\",\"value\":1},{\"date\":\"2024-07-22\",\"value\":1},{\"date\":\"2024-07-23\",\"value\":1},{\"date\":\"2024-07-24\",\"value\":6},{\"date\":\"2024-07-25\",\"value\":4},{\"date\":\"2024-07-26\",\"value\":2},{\"date\":\"2024-07-27\",\"value\":1},{\"date\":\"2024-07-30\",\"value\":1},{\"date\":\"2024-07-31\",\"value\":2},{\"date\":\"2024-08-01\",\"value\":4},{\"date\":\"2024-08-02\",\"value\":2},{\"date\":\"2024-08-04\",\"value\":1},{\"date\":\"2024-08-05\",\"value\":7},{\"date\":\"2024-08-07\",\"value\":1},{\"date\":\"2024-08-12\",\"value\":2},{\"date\":\"2024-08-15\",\"value\":1},{\"date\":\"2024-08-21\",\"value\":2},{\"date\":\"2024-08-23\",\"value\":1},{\"date\":\"2024-08-27\",\"value\":1},{\"date\":\"2024-08-29\",\"value\":2},{\"date\":\"2024-09-03\",\"value\":1},{\"date\":\"2024-09-07\",\"value\":2},{\"date\":\"2024-09-13\",\"value\":2},{\"date\":\"2024-09-15\",\"value\":1},{\"date\":\"2024-09-16\",\"value\":1},{\"date\":\"2024-09-18\",\"value\":2},{\"date\":\"2024-09-23\",\"value\":1},{\"date\":\"2024-09-24\",\"value\":1},{\"date\":\"2024-09-27\",\"value\":1},{\"date\":\"2024-09-28\",\"value\":1},{\"date\":\"2024-09-29\",\"value\":1},{\"date\":\"2024-09-30\",\"value\":1},{\"date\":\"2024-10-02\",\"value\":1},{\"date\":\"2024-10-03\",\"value\":1},{\"date\":\"2024-10-04\",\"value\":4},{\"date\":\"2024-10-05\",\"value\":1},{\"date\":\"2024-10-08\",\"value\":8},{\"date\":\"2024-10-09\",\"value\":1},{\"date\":\"2024-10-11\",\"value\":3},{\"date\":\"2024-10-15\",\"value\":2},{\"date\":\"2024-10-16\",\"value\":1},{\"date\":\"2024-10-20\",\"value\":2},{\"date\":\"2024-10-25\",\"value\":1},{\"date\":\"2024-10-27\",\"value\":3},{\"date\":\"2024-10-29\",\"value\":9},{\"date\":\"2024-10-30\",\"value\":1},{\"date\":\"2024-10-31\",\"value\":1},{\"date\":\"2024-11-01\",\"value\":1},{\"date\":\"2024-11-04\",\"value\":1},{\"date\":\"2024-11-05\",\"value\":3},{\"date\":\"2024-11-06\",\"value\":2},{\"date\":\"2024-11-08\",\"value\":1},{\"date\":\"2024-11-12\",\"value\":1},{\"date\":\"2024-11-15\",\"value\":1},{\"date\":\"2024-11-16\",\"value\":1},{\"date\":\"2024-11-17\",\"value\":2},{\"date\":\"2024-11-18\",\"value\":1},{\"date\":\"2024-11-19\",\"value\":2},{\"date\":\"2024-11-21\",\"value\":2},{\"date\":\"2024-11-22\",\"value\":1},{\"date\":\"2024-11-24\",\"value\":2},{\"date\":\"2024-11-25\",\"value\":3},{\"date\":\"2024-11-27\",\"value\":1},{\"date\":\"2024-12-02\",\"value\":1},{\"date\":\"2024-12-03\",\"value\":2},{\"date\":\"2024-12-04\",\"value\":2},{\"date\":\"2024-12-05\",\"value\":1},{\"date\":\"2024-12-06\",\"value\":1},{\"date\":\"2024-12-11\",\"value\":2},{\"date\":\"2024-12-13\",\"value\":1},{\"date\":\"2024-12-14\",\"value\":4},{\"date\":\"2024-12-16\",\"value\":2},{\"date\":\"2024-12-17\",\"value\":1},{\"date\":\"2024-12-18\",\"value\":11},{\"date\":\"2024-12-19\",\"value\":1},{\"date\":\"2024-12-22\",\"value\":3},{\"date\":\"2024-12-23\",\"value\":1},{\"date\":\"2024-12-24\",\"value\":6},{\"date\":\"2024-12-25\",\"value\":4},{\"date\":\"2024-12-26\",\"value\":3},{\"date\":\"2024-12-27\",\"value\":4},{\"date\":\"2024-12-28\",\"value\":3},{\"date\":\"2024-12-30\",\"value\":6},{\"date\":\"2024-12-31\",\"value\":2}];\n    const options = {date: { start: new Date('2024-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 6;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-4';\n    const data = [{\"date\":\"2023-01-15\",\"value\":1},{\"date\":\"2023-01-16\",\"value\":4},{\"date\":\"2023-01-18\",\"value\":1},{\"date\":\"2023-01-19\",\"value\":2},{\"date\":\"2023-01-23\",\"value\":2},{\"date\":\"2023-01-27\",\"value\":2},{\"date\":\"2023-01-28\",\"value\":4},{\"date\":\"2023-01-30\",\"value\":1},{\"date\":\"2023-02-01\",\"value\":1},{\"date\":\"2023-02-02\",\"value\":1},{\"date\":\"2023-02-05\",\"value\":2},{\"date\":\"2023-02-06\",\"value\":1},{\"date\":\"2023-02-07\",\"value\":2},{\"date\":\"2023-02-09\",\"value\":1},{\"date\":\"2023-02-11\",\"value\":2},{\"date\":\"2023-02-12\",\"value\":2},{\"date\":\"2023-02-13\",\"value\":1},{\"date\":\"2023-02-15\",\"value\":1},{\"date\":\"2023-02-20\",\"value\":1},{\"date\":\"2023-02-21\",\"value\":4},{\"date\":\"2023-02-28\",\"value\":1},{\"date\":\"2023-03-03\",\"value\":1},{\"date\":\"2023-03-07\",\"value\":4},{\"date\":\"2023-03-08\",\"value\":1},{\"date\":\"2023-03-13\",\"value\":2},{\"date\":\"2023-03-21\",\"value\":3},{\"date\":\"2023-04-04\",\"value\":1},{\"date\":\"2023-04-09\",\"value\":2},{\"date\":\"2023-04-10\",\"value\":1},{\"date\":\"2023-04-11\",\"value\":1},{\"date\":\"2023-04-12\",\"value\":1},{\"date\":\"2023-04-18\",\"value\":1},{\"date\":\"2023-04-27\",\"value\":1},{\"date\":\"2023-04-30\",\"value\":1},{\"date\":\"2023-05-01\",\"value\":1},{\"date\":\"2023-05-03\",\"value\":1},{\"date\":\"2023-05-10\",\"value\":1},{\"date\":\"2023-05-15\",\"value\":2},{\"date\":\"2023-05-21\",\"value\":1},{\"date\":\"2023-05-23\",\"value\":1},{\"date\":\"2023-05-27\",\"value\":2},{\"date\":\"2023-05-28\",\"value\":1},{\"date\":\"2023-05-30\",\"value\":3},{\"date\":\"2023-06-15\",\"value\":1},{\"date\":\"2023-06-16\",\"value\":1},{\"date\":\"2023-06-17\",\"value\":1},{\"date\":\"2023-06-24\",\"value\":1},{\"date\":\"2023-06-27\",\"value\":1},{\"date\":\"2023-07-03\",\"value\":1},{\"date\":\"2023-07-09\",\"value\":1},{\"date\":\"2023-07-11\",\"value\":1},{\"date\":\"2023-07-20\",\"value\":1},{\"date\":\"2023-07-25\",\"value\":2},{\"date\":\"2023-07-28\",\"value\":42},{\"date\":\"2023-07-29\",\"value\":8},{\"date\":\"2023-07-30\",\"value\":2},{\"date\":\"2023-07-31\",\"value\":1},{\"date\":\"2023-08-01\",\"value\":2},{\"date\":\"2023-08-02\",\"value\":1},{\"date\":\"2023-08-04\",\"value\":3},{\"date\":\"2023-08-05\",\"value\":3},{\"date\":\"2023-08-06\",\"value\":1},{\"date\":\"2023-08-08\",\"value\":2},{\"date\":\"2023-08-09\",\"value\":3},{\"date\":\"2023-08-10\",\"value\":3},{\"date\":\"2023-08-11\",\"value\":2},{\"date\":\"2023-08-15\",\"value\":1},{\"date\":\"2023-08-16\",\"value\":2},{\"date\":\"2023-08-19\",\"value\":1},{\"date\":\"2023-08-20\",\"value\":1},{\"date\":\"2023-08-21\",\"value\":6},{\"date\":\"2023-08-22\",\"value\":1},{\"date\":\"2023-08-23\",\"value\":2},{\"date\":\"2023-08-24\",\"value\":1},{\"date\":\"2023-08-26\",\"value\":1},{\"date\":\"2023-09-01\",\"value\":1},{\"date\":\"2023-09-02\",\"value\":3},{\"date\":\"2023-09-06\",\"value\":1},{\"date\":\"2023-09-07\",\"value\":2},{\"date\":\"2023-09-08\",\"value\":2},{\"date\":\"2023-09-10\",\"value\":2},{\"date\":\"2023-09-13\",\"value\":1},{\"date\":\"2023-09-17\",\"value\":1},{\"date\":\"2023-09-19\",\"value\":1},{\"date\":\"2023-09-20\",\"value\":3},{\"date\":\"2023-09-22\",\"value\":1},{\"date\":\"2023-09-23\",\"value\":2},{\"date\":\"2023-09-25\",\"value\":1},{\"date\":\"2023-09-29\",\"value\":1},{\"date\":\"2023-09-30\",\"value\":4},{\"date\":\"2023-10-01\",\"value\":2},{\"date\":\"2023-10-03\",\"value\":2},{\"date\":\"2023-10-04\",\"value\":2},{\"date\":\"2023-10-05\",\"value\":3},{\"date\":\"2023-10-08\",\"value\":2},{\"date\":\"2023-10-10\",\"value\":2},{\"date\":\"2023-10-11\",\"value\":2},{\"date\":\"2023-10-12\",\"value\":1},{\"date\":\"2023-10-13\",\"value\":2},{\"date\":\"2023-10-14\",\"value\":3},{\"date\":\"2023-10-17\",\"value\":4},{\"date\":\"2023-10-18\",\"value\":1},{\"date\":\"2023-10-19\",\"value\":1},{\"date\":\"2023-10-20\",\"value\":3},{\"date\":\"2023-10-21\",\"value\":4},{\"date\":\"2023-10-22\",\"value\":4},{\"date\":\"2023-10-23\",\"value\":1},{\"date\":\"2023-10-25\",\"value\":2},{\"date\":\"2023-10-28\",\"value\":4},{\"date\":\"2023-10-30\",\"value\":2},{\"date\":\"2023-10-31\",\"value\":5},{\"date\":\"2023-11-01\",\"value\":3},{\"date\":\"2023-11-03\",\"value\":1},{\"date\":\"2023-11-04\",\"value\":1},{\"date\":\"2023-11-05\",\"value\":1},{\"date\":\"2023-11-11\",\"value\":2},{\"date\":\"2023-11-14\",\"value\":2},{\"date\":\"2023-11-18\",\"value\":1},{\"date\":\"2023-11-22\",\"value\":1},{\"date\":\"2023-11-27\",\"value\":3},{\"date\":\"2023-11-28\",\"value\":1},{\"date\":\"2023-11-29\",\"value\":1},{\"date\":\"2023-11-30\",\"value\":4},{\"date\":\"2023-12-04\",\"value\":1},{\"date\":\"2023-12-06\",\"value\":2},{\"date\":\"2023-12-07\",\"value\":1},{\"date\":\"2023-12-09\",\"value\":1},{\"date\":\"2023-12-10\",\"value\":1},{\"date\":\"2023-12-11\",\"value\":1},{\"date\":\"2023-12-12\",\"value\":2},{\"date\":\"2023-12-13\",\"value\":7},{\"date\":\"2023-12-14\",\"value\":3},{\"date\":\"2023-12-15\",\"value\":3},{\"date\":\"2023-12-17\",\"value\":4},{\"date\":\"2023-12-20\",\"value\":4},{\"date\":\"2023-12-21\",\"value\":1},{\"date\":\"2023-12-22\",\"value\":2},{\"date\":\"2023-12-25\",\"value\":1},{\"date\":\"2023-12-26\",\"value\":1},{\"date\":\"2023-12-28\",\"value\":1}];\n    const options = {date: { start: new Date('2023-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 8;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-5';\n    const data = [{\"date\":\"2022-01-08\",\"value\":2},{\"date\":\"2022-01-14\",\"value\":2},{\"date\":\"2022-01-15\",\"value\":1},{\"date\":\"2022-01-22\",\"value\":1},{\"date\":\"2022-01-26\",\"value\":1},{\"date\":\"2022-01-27\",\"value\":2},{\"date\":\"2022-01-30\",\"value\":1},{\"date\":\"2022-02-01\",\"value\":2},{\"date\":\"2022-02-03\",\"value\":3},{\"date\":\"2022-02-05\",\"value\":3},{\"date\":\"2022-02-06\",\"value\":1},{\"date\":\"2022-02-07\",\"value\":2},{\"date\":\"2022-02-08\",\"value\":2},{\"date\":\"2022-02-11\",\"value\":1},{\"date\":\"2022-02-12\",\"value\":2},{\"date\":\"2022-02-19\",\"value\":1},{\"date\":\"2022-02-21\",\"value\":1},{\"date\":\"2022-02-26\",\"value\":1},{\"date\":\"2022-03-04\",\"value\":2},{\"date\":\"2022-03-08\",\"value\":1},{\"date\":\"2022-03-09\",\"value\":1},{\"date\":\"2022-03-11\",\"value\":1},{\"date\":\"2022-03-19\",\"value\":1},{\"date\":\"2022-03-20\",\"value\":1},{\"date\":\"2022-03-22\",\"value\":1},{\"date\":\"2022-04-01\",\"value\":1},{\"date\":\"2022-04-02\",\"value\":2},{\"date\":\"2022-04-12\",\"value\":2},{\"date\":\"2022-04-14\",\"value\":1},{\"date\":\"2022-04-19\",\"value\":1},{\"date\":\"2022-04-29\",\"value\":1},{\"date\":\"2022-04-30\",\"value\":2},{\"date\":\"2022-05-01\",\"value\":1},{\"date\":\"2022-05-02\",\"value\":1},{\"date\":\"2022-05-03\",\"value\":2},{\"date\":\"2022-05-07\",\"value\":3},{\"date\":\"2022-05-11\",\"value\":1},{\"date\":\"2022-05-12\",\"value\":1},{\"date\":\"2022-05-16\",\"value\":1},{\"date\":\"2022-05-17\",\"value\":1},{\"date\":\"2022-05-28\",\"value\":1},{\"date\":\"2022-06-04\",\"value\":1},{\"date\":\"2022-06-07\",\"value\":1},{\"date\":\"2022-06-09\",\"value\":1},{\"date\":\"2022-06-10\",\"value\":2},{\"date\":\"2022-06-11\",\"value\":1},{\"date\":\"2022-06-13\",\"value\":1},{\"date\":\"2022-06-17\",\"value\":1},{\"date\":\"2022-06-28\",\"value\":1},{\"date\":\"2022-07-05\",\"value\":2},{\"date\":\"2022-07-12\",\"value\":1},{\"date\":\"2022-07-20\",\"value\":2},{\"date\":\"2022-07-23\",\"value\":2},{\"date\":\"2022-07-28\",\"value\":1},{\"date\":\"2022-07-29\",\"value\":1},{\"date\":\"2022-07-30\",\"value\":1},{\"date\":\"2022-08-04\",\"value\":1},{\"date\":\"2022-08-20\",\"value\":1},{\"date\":\"2022-08-21\",\"value\":1},{\"date\":\"2022-08-22\",\"value\":1},{\"date\":\"2022-08-24\",\"value\":1},{\"date\":\"2022-08-25\",\"value\":2},{\"date\":\"2022-08-27\",\"value\":1},{\"date\":\"2022-08-28\",\"value\":1},{\"date\":\"2022-08-29\",\"value\":2},{\"date\":\"2022-08-30\",\"value\":2},{\"date\":\"2022-08-31\",\"value\":2},{\"date\":\"2022-09-01\",\"value\":1},{\"date\":\"2022-09-02\",\"value\":1},{\"date\":\"2022-09-03\",\"value\":1},{\"date\":\"2022-09-06\",\"value\":5},{\"date\":\"2022-09-07\",\"value\":2},{\"date\":\"2022-09-09\",\"value\":1},{\"date\":\"2022-09-11\",\"value\":1},{\"date\":\"2022-09-13\",\"value\":1},{\"date\":\"2022-09-17\",\"value\":2},{\"date\":\"2022-09-18\",\"value\":2},{\"date\":\"2022-09-19\",\"value\":2},{\"date\":\"2022-09-20\",\"value\":3},{\"date\":\"2022-09-24\",\"value\":1},{\"date\":\"2022-09-25\",\"value\":1},{\"date\":\"2022-09-26\",\"value\":2},{\"date\":\"2022-09-27\",\"value\":1},{\"date\":\"2022-10-01\",\"value\":1},{\"date\":\"2022-10-08\",\"value\":2},{\"date\":\"2022-10-09\",\"value\":1},{\"date\":\"2022-10-11\",\"value\":1},{\"date\":\"2022-10-17\",\"value\":1},{\"date\":\"2022-10-18\",\"value\":2},{\"date\":\"2022-10-19\",\"value\":1},{\"date\":\"2022-10-20\",\"value\":1},{\"date\":\"2022-10-24\",\"value\":2},{\"date\":\"2022-10-25\",\"value\":1},{\"date\":\"2022-10-26\",\"value\":4},{\"date\":\"2022-10-27\",\"value\":1},{\"date\":\"2022-10-29\",\"value\":1},{\"date\":\"2022-10-30\",\"value\":1},{\"date\":\"2022-11-01\",\"value\":1},{\"date\":\"2022-11-22\",\"value\":1},{\"date\":\"2022-11-24\",\"value\":1},{\"date\":\"2022-11-29\",\"value\":2},{\"date\":\"2022-11-30\",\"value\":1},{\"date\":\"2022-12-03\",\"value\":3},{\"date\":\"2022-12-04\",\"value\":2},{\"date\":\"2022-12-05\",\"value\":1},{\"date\":\"2022-12-06\",\"value\":2},{\"date\":\"2022-12-07\",\"value\":2},{\"date\":\"2022-12-08\",\"value\":1},{\"date\":\"2022-12-09\",\"value\":1},{\"date\":\"2022-12-10\",\"value\":2},{\"date\":\"2022-12-11\",\"value\":1},{\"date\":\"2022-12-12\",\"value\":1},{\"date\":\"2022-12-13\",\"value\":1},{\"date\":\"2022-12-14\",\"value\":1},{\"date\":\"2022-12-15\",\"value\":1},{\"date\":\"2022-12-16\",\"value\":2},{\"date\":\"2022-12-17\",\"value\":1},{\"date\":\"2022-12-18\",\"value\":1},{\"date\":\"2022-12-19\",\"value\":1},{\"date\":\"2022-12-20\",\"value\":1},{\"date\":\"2022-12-21\",\"value\":7},{\"date\":\"2022-12-22\",\"value\":1},{\"date\":\"2022-12-23\",\"value\":1},{\"date\":\"2022-12-27\",\"value\":1}];\n    const options = {date: { start: new Date('2022-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 7;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-6';\n    const data = [{\"date\":\"2021-01-02\",\"value\":1},{\"date\":\"2021-01-03\",\"value\":1},{\"date\":\"2021-01-04\",\"value\":2},{\"date\":\"2021-01-06\",\"value\":1},{\"date\":\"2021-01-08\",\"value\":3},{\"date\":\"2021-01-09\",\"value\":2},{\"date\":\"2021-01-10\",\"value\":2},{\"date\":\"2021-01-11\",\"value\":2},{\"date\":\"2021-01-14\",\"value\":1},{\"date\":\"2021-01-17\",\"value\":2},{\"date\":\"2021-01-18\",\"value\":1},{\"date\":\"2021-01-19\",\"value\":1},{\"date\":\"2021-01-20\",\"value\":5},{\"date\":\"2021-01-21\",\"value\":1},{\"date\":\"2021-01-22\",\"value\":2},{\"date\":\"2021-01-25\",\"value\":1},{\"date\":\"2021-01-27\",\"value\":1},{\"date\":\"2021-01-28\",\"value\":1},{\"date\":\"2021-02-01\",\"value\":1},{\"date\":\"2021-02-17\",\"value\":1},{\"date\":\"2021-02-25\",\"value\":1},{\"date\":\"2021-03-03\",\"value\":1},{\"date\":\"2021-03-06\",\"value\":2},{\"date\":\"2021-03-08\",\"value\":1},{\"date\":\"2021-03-14\",\"value\":1},{\"date\":\"2021-03-20\",\"value\":1},{\"date\":\"2021-03-22\",\"value\":1},{\"date\":\"2021-03-24\",\"value\":1},{\"date\":\"2021-03-25\",\"value\":1},{\"date\":\"2021-03-26\",\"value\":3},{\"date\":\"2021-03-27\",\"value\":1},{\"date\":\"2021-03-29\",\"value\":1},{\"date\":\"2021-04-01\",\"value\":1},{\"date\":\"2021-04-02\",\"value\":2},{\"date\":\"2021-04-05\",\"value\":2},{\"date\":\"2021-04-07\",\"value\":4},{\"date\":\"2021-04-08\",\"value\":1},{\"date\":\"2021-04-10\",\"value\":1},{\"date\":\"2021-04-12\",\"value\":1},{\"date\":\"2021-04-14\",\"value\":1},{\"date\":\"2021-04-15\",\"value\":2},{\"date\":\"2021-04-16\",\"value\":2},{\"date\":\"2021-04-17\",\"value\":1},{\"date\":\"2021-04-18\",\"value\":1},{\"date\":\"2021-04-19\",\"value\":1},{\"date\":\"2021-04-20\",\"value\":2},{\"date\":\"2021-04-21\",\"value\":1},{\"date\":\"2021-04-23\",\"value\":1},{\"date\":\"2021-04-26\",\"value\":3},{\"date\":\"2021-04-29\",\"value\":1},{\"date\":\"2021-05-02\",\"value\":2},{\"date\":\"2021-05-05\",\"value\":1},{\"date\":\"2021-05-07\",\"value\":2},{\"date\":\"2021-05-10\",\"value\":1},{\"date\":\"2021-05-11\",\"value\":2},{\"date\":\"2021-05-13\",\"value\":1},{\"date\":\"2021-05-14\",\"value\":2},{\"date\":\"2021-05-17\",\"value\":1},{\"date\":\"2021-05-20\",\"value\":1},{\"date\":\"2021-05-21\",\"value\":2},{\"date\":\"2021-05-23\",\"value\":3},{\"date\":\"2021-05-29\",\"value\":1},{\"date\":\"2021-05-31\",\"value\":1},{\"date\":\"2021-06-02\",\"value\":1},{\"date\":\"2021-06-04\",\"value\":4},{\"date\":\"2021-06-05\",\"value\":1},{\"date\":\"2021-06-06\",\"value\":1},{\"date\":\"2021-06-07\",\"value\":1},{\"date\":\"2021-06-08\",\"value\":1},{\"date\":\"2021-06-10\",\"value\":2},{\"date\":\"2021-06-11\",\"value\":2},{\"date\":\"2021-06-12\",\"value\":1},{\"date\":\"2021-06-19\",\"value\":1},{\"date\":\"2021-06-22\",\"value\":1},{\"date\":\"2021-07-01\",\"value\":2},{\"date\":\"2021-07-08\",\"value\":1},{\"date\":\"2021-07-09\",\"value\":1},{\"date\":\"2021-07-14\",\"value\":2},{\"date\":\"2021-07-15\",\"value\":1},{\"date\":\"2021-07-16\",\"value\":1},{\"date\":\"2021-07-17\",\"value\":3},{\"date\":\"2021-07-18\",\"value\":1},{\"date\":\"2021-07-19\",\"value\":1},{\"date\":\"2021-07-20\",\"value\":2},{\"date\":\"2021-07-21\",\"value\":1},{\"date\":\"2021-07-22\",\"value\":1},{\"date\":\"2021-07-23\",\"value\":1},{\"date\":\"2021-07-24\",\"value\":2},{\"date\":\"2021-07-25\",\"value\":1},{\"date\":\"2021-07-26\",\"value\":1},{\"date\":\"2021-07-27\",\"value\":1},{\"date\":\"2021-07-28\",\"value\":1},{\"date\":\"2021-07-29\",\"value\":1},{\"date\":\"2021-07-30\",\"value\":1},{\"date\":\"2021-07-31\",\"value\":2},{\"date\":\"2021-08-01\",\"value\":2},{\"date\":\"2021-08-02\",\"value\":3},{\"date\":\"2021-08-03\",\"value\":2},{\"date\":\"2021-08-04\",\"value\":1},{\"date\":\"2021-08-05\",\"value\":1},{\"date\":\"2021-08-06\",\"value\":1},{\"date\":\"2021-08-07\",\"value\":1},{\"date\":\"2021-08-08\",\"value\":2},{\"date\":\"2021-08-09\",\"value\":1},{\"date\":\"2021-08-11\",\"value\":2},{\"date\":\"2021-08-12\",\"value\":1},{\"date\":\"2021-08-13\",\"value\":1},{\"date\":\"2021-08-14\",\"value\":1},{\"date\":\"2021-08-16\",\"value\":1},{\"date\":\"2021-08-17\",\"value\":1},{\"date\":\"2021-08-18\",\"value\":2},{\"date\":\"2021-08-20\",\"value\":1},{\"date\":\"2021-08-21\",\"value\":1},{\"date\":\"2021-08-22\",\"value\":1},{\"date\":\"2021-08-23\",\"value\":1},{\"date\":\"2021-08-24\",\"value\":1},{\"date\":\"2021-08-28\",\"value\":1},{\"date\":\"2021-08-30\",\"value\":4},{\"date\":\"2021-09-03\",\"value\":2},{\"date\":\"2021-09-05\",\"value\":1},{\"date\":\"2021-09-09\",\"value\":1},{\"date\":\"2021-09-13\",\"value\":2},{\"date\":\"2021-09-19\",\"value\":1},{\"date\":\"2021-10-01\",\"value\":1},{\"date\":\"2021-10-05\",\"value\":1},{\"date\":\"2021-10-10\",\"value\":2},{\"date\":\"2021-10-11\",\"value\":3},{\"date\":\"2021-10-12\",\"value\":1},{\"date\":\"2021-10-15\",\"value\":1},{\"date\":\"2021-10-17\",\"value\":1},{\"date\":\"2021-10-19\",\"value\":2},{\"date\":\"2021-10-20\",\"value\":2},{\"date\":\"2021-10-28\",\"value\":1},{\"date\":\"2021-10-29\",\"value\":2},{\"date\":\"2021-10-30\",\"value\":2},{\"date\":\"2021-11-04\",\"value\":1},{\"date\":\"2021-11-06\",\"value\":1},{\"date\":\"2021-11-08\",\"value\":1},{\"date\":\"2021-11-15\",\"value\":1},{\"date\":\"2021-11-17\",\"value\":1},{\"date\":\"2021-11-20\",\"value\":2},{\"date\":\"2021-11-29\",\"value\":1},{\"date\":\"2021-11-30\",\"value\":3},{\"date\":\"2021-12-02\",\"value\":2},{\"date\":\"2021-12-03\",\"value\":2},{\"date\":\"2021-12-04\",\"value\":1},{\"date\":\"2021-12-08\",\"value\":1},{\"date\":\"2021-12-11\",\"value\":1},{\"date\":\"2021-12-17\",\"value\":1},{\"date\":\"2021-12-20\",\"value\":1},{\"date\":\"2021-12-21\",\"value\":1},{\"date\":\"2021-12-24\",\"value\":1},{\"date\":\"2021-12-28\",\"value\":1},{\"date\":\"2021-12-29\",\"value\":2},{\"date\":\"2021-12-30\",\"value\":1}];\n    const options = {date: { start: new Date('2021-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 5;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-7';\n    const data = [{\"date\":\"2020-01-01\",\"value\":1},{\"date\":\"2020-01-03\",\"value\":1},{\"date\":\"2020-01-10\",\"value\":1},{\"date\":\"2020-01-12\",\"value\":1},{\"date\":\"2020-01-13\",\"value\":1},{\"date\":\"2020-01-19\",\"value\":1},{\"date\":\"2020-01-22\",\"value\":1},{\"date\":\"2020-01-23\",\"value\":1},{\"date\":\"2020-01-28\",\"value\":1},{\"date\":\"2020-01-29\",\"value\":2},{\"date\":\"2020-02-01\",\"value\":1},{\"date\":\"2020-02-04\",\"value\":1},{\"date\":\"2020-02-06\",\"value\":1},{\"date\":\"2020-02-07\",\"value\":2},{\"date\":\"2020-02-08\",\"value\":1},{\"date\":\"2020-02-10\",\"value\":1},{\"date\":\"2020-02-11\",\"value\":1},{\"date\":\"2020-02-17\",\"value\":2},{\"date\":\"2020-02-18\",\"value\":1},{\"date\":\"2020-02-19\",\"value\":3},{\"date\":\"2020-02-21\",\"value\":1},{\"date\":\"2020-02-22\",\"value\":2},{\"date\":\"2020-02-24\",\"value\":2},{\"date\":\"2020-02-25\",\"value\":1},{\"date\":\"2020-02-26\",\"value\":2},{\"date\":\"2020-03-01\",\"value\":1},{\"date\":\"2020-03-02\",\"value\":1},{\"date\":\"2020-03-03\",\"value\":1},{\"date\":\"2020-03-06\",\"value\":1},{\"date\":\"2020-03-07\",\"value\":1},{\"date\":\"2020-03-14\",\"value\":1},{\"date\":\"2020-03-16\",\"value\":2},{\"date\":\"2020-03-18\",\"value\":1},{\"date\":\"2020-03-22\",\"value\":1},{\"date\":\"2020-03-29\",\"value\":1},{\"date\":\"2020-03-31\",\"value\":1},{\"date\":\"2020-04-01\",\"value\":1},{\"date\":\"2020-04-03\",\"value\":1},{\"date\":\"2020-04-04\",\"value\":1},{\"date\":\"2020-04-05\",\"value\":2},{\"date\":\"2020-04-07\",\"value\":1},{\"date\":\"2020-04-08\",\"value\":2},{\"date\":\"2020-04-09\",\"value\":1},{\"date\":\"2020-04-13\",\"value\":1},{\"date\":\"2020-04-15\",\"value\":1},{\"date\":\"2020-04-16\",\"value\":1},{\"date\":\"2020-04-27\",\"value\":2},{\"date\":\"2020-04-29\",\"value\":2},{\"date\":\"2020-04-30\",\"value\":1},{\"date\":\"2020-05-01\",\"value\":1},{\"date\":\"2020-05-03\",\"value\":1},{\"date\":\"2020-05-04\",\"value\":1},{\"date\":\"2020-05-07\",\"value\":1},{\"date\":\"2020-05-08\",\"value\":2},{\"date\":\"2020-05-09\",\"value\":1},{\"date\":\"2020-05-10\",\"value\":2},{\"date\":\"2020-05-12\",\"value\":1},{\"date\":\"2020-05-15\",\"value\":4},{\"date\":\"2020-05-17\",\"value\":1},{\"date\":\"2020-05-18\",\"value\":1},{\"date\":\"2020-05-20\",\"value\":1},{\"date\":\"2020-05-22\",\"value\":1},{\"date\":\"2020-05-23\",\"value\":1},{\"date\":\"2020-05-24\",\"value\":2},{\"date\":\"2020-05-28\",\"value\":1},{\"date\":\"2020-05-29\",\"value\":1},{\"date\":\"2020-05-31\",\"value\":1},{\"date\":\"2020-06-03\",\"value\":1},{\"date\":\"2020-06-04\",\"value\":1},{\"date\":\"2020-06-05\",\"value\":2},{\"date\":\"2020-06-08\",\"value\":2},{\"date\":\"2020-06-10\",\"value\":1},{\"date\":\"2020-06-11\",\"value\":2},{\"date\":\"2020-06-15\",\"value\":3},{\"date\":\"2020-06-16\",\"value\":1},{\"date\":\"2020-06-19\",\"value\":3},{\"date\":\"2020-06-22\",\"value\":2},{\"date\":\"2020-06-25\",\"value\":1},{\"date\":\"2020-06-29\",\"value\":1},{\"date\":\"2020-07-02\",\"value\":1},{\"date\":\"2020-07-04\",\"value\":1},{\"date\":\"2020-07-05\",\"value\":1},{\"date\":\"2020-07-06\",\"value\":1},{\"date\":\"2020-07-08\",\"value\":3},{\"date\":\"2020-07-09\",\"value\":1},{\"date\":\"2020-07-10\",\"value\":1},{\"date\":\"2020-07-11\",\"value\":3},{\"date\":\"2020-07-12\",\"value\":3},{\"date\":\"2020-07-13\",\"value\":4},{\"date\":\"2020-07-14\",\"value\":1},{\"date\":\"2020-07-16\",\"value\":1},{\"date\":\"2020-07-18\",\"value\":1},{\"date\":\"2020-07-21\",\"value\":3},{\"date\":\"2020-07-22\",\"value\":1},{\"date\":\"2020-07-23\",\"value\":1},{\"date\":\"2020-07-24\",\"value\":1},{\"date\":\"2020-07-25\",\"value\":3},{\"date\":\"2020-07-27\",\"value\":2},{\"date\":\"2020-07-28\",\"value\":1},{\"date\":\"2020-07-29\",\"value\":1},{\"date\":\"2020-07-31\",\"value\":1},{\"date\":\"2020-08-01\",\"value\":1},{\"date\":\"2020-08-03\",\"value\":4},{\"date\":\"2020-08-06\",\"value\":1},{\"date\":\"2020-08-07\",\"value\":1},{\"date\":\"2020-08-10\",\"value\":1},{\"date\":\"2020-08-11\",\"value\":1},{\"date\":\"2020-08-13\",\"value\":1},{\"date\":\"2020-09-01\",\"value\":1},{\"date\":\"2020-09-04\",\"value\":2},{\"date\":\"2020-09-13\",\"value\":1},{\"date\":\"2020-09-15\",\"value\":3},{\"date\":\"2020-09-27\",\"value\":1},{\"date\":\"2020-09-29\",\"value\":4},{\"date\":\"2020-09-30\",\"value\":1},{\"date\":\"2020-10-01\",\"value\":2},{\"date\":\"2020-10-02\",\"value\":1},{\"date\":\"2020-10-08\",\"value\":1},{\"date\":\"2020-10-11\",\"value\":1},{\"date\":\"2020-10-17\",\"value\":3},{\"date\":\"2020-10-18\",\"value\":1},{\"date\":\"2020-10-20\",\"value\":1},{\"date\":\"2020-10-21\",\"value\":3},{\"date\":\"2020-10-23\",\"value\":1},{\"date\":\"2020-10-25\",\"value\":1},{\"date\":\"2020-10-27\",\"value\":1},{\"date\":\"2020-10-28\",\"value\":2},{\"date\":\"2020-10-31\",\"value\":1},{\"date\":\"2020-11-01\",\"value\":1},{\"date\":\"2020-11-02\",\"value\":2},{\"date\":\"2020-11-06\",\"value\":2},{\"date\":\"2020-11-07\",\"value\":1},{\"date\":\"2020-11-12\",\"value\":2},{\"date\":\"2020-11-16\",\"value\":1},{\"date\":\"2020-11-18\",\"value\":2},{\"date\":\"2020-11-21\",\"value\":1},{\"date\":\"2020-11-23\",\"value\":1},{\"date\":\"2020-11-25\",\"value\":1},{\"date\":\"2020-11-27\",\"value\":1},{\"date\":\"2020-12-01\",\"value\":3},{\"date\":\"2020-12-02\",\"value\":1},{\"date\":\"2020-12-04\",\"value\":1},{\"date\":\"2020-12-07\",\"value\":1},{\"date\":\"2020-12-10\",\"value\":1},{\"date\":\"2020-12-11\",\"value\":2},{\"date\":\"2020-12-13\",\"value\":4},{\"date\":\"2020-12-20\",\"value\":2},{\"date\":\"2020-12-30\",\"value\":1}];\n    const options = {date: { start: new Date('2020-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 4;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-8';\n    const data = [{\"date\":\"2019-01-01\",\"value\":1},{\"date\":\"2019-01-05\",\"value\":1},{\"date\":\"2019-01-06\",\"value\":1},{\"date\":\"2019-01-12\",\"value\":1},{\"date\":\"2019-01-21\",\"value\":1},{\"date\":\"2019-01-26\",\"value\":2},{\"date\":\"2019-01-30\",\"value\":1},{\"date\":\"2019-02-01\",\"value\":1},{\"date\":\"2019-02-02\",\"value\":1},{\"date\":\"2019-02-05\",\"value\":1},{\"date\":\"2019-02-09\",\"value\":1},{\"date\":\"2019-03-04\",\"value\":3},{\"date\":\"2019-03-11\",\"value\":2},{\"date\":\"2019-03-13\",\"value\":1},{\"date\":\"2019-04-23\",\"value\":1},{\"date\":\"2019-05-10\",\"value\":1},{\"date\":\"2019-05-18\",\"value\":1},{\"date\":\"2019-05-20\",\"value\":1},{\"date\":\"2019-05-27\",\"value\":1},{\"date\":\"2019-05-30\",\"value\":2},{\"date\":\"2019-06-19\",\"value\":1},{\"date\":\"2019-06-20\",\"value\":1},{\"date\":\"2019-06-28\",\"value\":1},{\"date\":\"2019-07-07\",\"value\":1},{\"date\":\"2019-08-10\",\"value\":1},{\"date\":\"2019-08-31\",\"value\":1},{\"date\":\"2019-09-05\",\"value\":1},{\"date\":\"2019-09-06\",\"value\":1},{\"date\":\"2019-09-07\",\"value\":1},{\"date\":\"2019-09-08\",\"value\":4},{\"date\":\"2019-09-10\",\"value\":1},{\"date\":\"2019-09-11\",\"value\":1},{\"date\":\"2019-09-13\",\"value\":1},{\"date\":\"2019-09-15\",\"value\":1},{\"date\":\"2019-09-18\",\"value\":2},{\"date\":\"2019-09-22\",\"value\":1},{\"date\":\"2019-09-24\",\"value\":1},{\"date\":\"2019-09-25\",\"value\":1},{\"date\":\"2019-09-26\",\"value\":1},{\"date\":\"2019-10-01\",\"value\":1},{\"date\":\"2019-10-03\",\"value\":1},{\"date\":\"2019-10-06\",\"value\":1},{\"date\":\"2019-10-14\",\"value\":1},{\"date\":\"2019-10-15\",\"value\":1},{\"date\":\"2019-10-18\",\"value\":1},{\"date\":\"2019-10-19\",\"value\":1},{\"date\":\"2019-10-28\",\"value\":1},{\"date\":\"2019-10-29\",\"value\":1},{\"date\":\"2019-11-02\",\"value\":1},{\"date\":\"2019-11-07\",\"value\":1},{\"date\":\"2019-11-10\",\"value\":1},{\"date\":\"2019-11-11\",\"value\":1},{\"date\":\"2019-11-12\",\"value\":1},{\"date\":\"2019-11-13\",\"value\":1},{\"date\":\"2019-11-14\",\"value\":1},{\"date\":\"2019-11-17\",\"value\":1},{\"date\":\"2019-11-21\",\"value\":1},{\"date\":\"2019-11-27\",\"value\":1},{\"date\":\"2019-11-28\",\"value\":1},{\"date\":\"2019-12-02\",\"value\":1},{\"date\":\"2019-12-04\",\"value\":1},{\"date\":\"2019-12-21\",\"value\":1}];\n    const options = {date: { start: new Date('2019-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 4;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-9';\n    const data = [{\"date\":\"2018-01-01\",\"value\":1},{\"date\":\"2018-01-07\",\"value\":1},{\"date\":\"2018-01-24\",\"value\":1},{\"date\":\"2018-02-01\",\"value\":1},{\"date\":\"2018-02-06\",\"value\":1},{\"date\":\"2018-02-19\",\"value\":1},{\"date\":\"2018-02-25\",\"value\":1},{\"date\":\"2018-03-13\",\"value\":1},{\"date\":\"2018-03-16\",\"value\":2},{\"date\":\"2018-04-22\",\"value\":1},{\"date\":\"2018-04-28\",\"value\":1},{\"date\":\"2018-05-02\",\"value\":2},{\"date\":\"2018-05-05\",\"value\":1},{\"date\":\"2018-05-06\",\"value\":1},{\"date\":\"2018-05-08\",\"value\":1},{\"date\":\"2018-05-22\",\"value\":1},{\"date\":\"2018-06-09\",\"value\":2},{\"date\":\"2018-07-05\",\"value\":1},{\"date\":\"2018-07-09\",\"value\":1},{\"date\":\"2018-07-12\",\"value\":1},{\"date\":\"2018-07-20\",\"value\":1},{\"date\":\"2018-08-06\",\"value\":1},{\"date\":\"2018-08-08\",\"value\":1},{\"date\":\"2018-08-13\",\"value\":1},{\"date\":\"2018-09-10\",\"value\":1},{\"date\":\"2018-09-22\",\"value\":1},{\"date\":\"2018-09-23\",\"value\":1},{\"date\":\"2018-09-24\",\"value\":1},{\"date\":\"2018-09-25\",\"value\":1},{\"date\":\"2018-09-27\",\"value\":1},{\"date\":\"2018-10-04\",\"value\":1},{\"date\":\"2018-10-09\",\"value\":1},{\"date\":\"2018-10-10\",\"value\":2},{\"date\":\"2018-11-28\",\"value\":1},{\"date\":\"2018-11-29\",\"value\":1}];\n    const options = {date: { start: new Date('2018-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 2;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-10';\n    const data = [{\"date\":\"2017-01-21\",\"value\":1},{\"date\":\"2017-04-20\",\"value\":1},{\"date\":\"2017-04-28\",\"value\":1},{\"date\":\"2017-05-10\",\"value\":1},{\"date\":\"2017-05-16\",\"value\":1},{\"date\":\"2017-06-10\",\"value\":1},{\"date\":\"2017-06-14\",\"value\":1},{\"date\":\"2017-07-04\",\"value\":1},{\"date\":\"2017-08-31\",\"value\":1},{\"date\":\"2017-09-16\",\"value\":2},{\"date\":\"2017-09-21\",\"value\":1},{\"date\":\"2017-09-24\",\"value\":1},{\"date\":\"2017-12-01\",\"value\":1},{\"date\":\"2017-12-02\",\"value\":1},{\"date\":\"2017-12-13\",\"value\":1}];\n    const options = {date: { start: new Date('2017-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 2;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  (function() {\n    const graphId = 'contribution-graph-11';\n    const data = [{\"date\":\"2016-01-01\",\"value\":1},{\"date\":\"2016-10-05\",\"value\":1},{\"date\":\"2016-11-18\",\"value\":1},{\"date\":\"2016-11-22\",\"value\":2},{\"date\":\"2016-12-09\",\"value\":1},{\"date\":\"2016-12-13\",\"value\":1}];\n    const options = {date: { start: new Date('2016-01-01') }, domain: { type: 'year' }, subDomain: { type: 'day' }, range: 1};\n    const maxValue = 2;\n    const displayData = data.map(function(point) {\n      const value = point.value || 0;\n      if (options.maxValue \u0026\u0026 value \u003e options.maxValue) {\n        return Object.assign({}, point, { value: options.maxValue });\n      }\n      return point;\n    });\n\n    function fitGraph() {\n      const inner = document.getElementById(graphId);\n      if (!inner) return;\n\n      const outer = inner.parentElement;\n      if (!outer) return;\n\n      if (!inner.dataset.baseWidth) {\n        inner.dataset.baseWidth = String(inner.scrollWidth || inner.getBoundingClientRect().width || 0);\n      }\n\n      const baseWidth = Number(inner.dataset.baseWidth) || inner.scrollWidth || inner.getBoundingClientRect().width || 0;\n      const scale = baseWidth \u003e 0 ? Math.min(1, outer.clientWidth / baseWidth) : 1;\n      inner.style.zoom = String(scale);\n    }\n\n    function paintGraph() {\n      // Clear existing graph\n      const container = document.getElementById(graphId);\n      if (!container) return;\n      container.innerHTML = '';\n      delete container.dataset.baseWidth;\n\n      // Get theme colors from CSS variables\n      const styles = getComputedStyle(document.documentElement);\n      const bgColor = styles.getPropertyValue('--color-background').trim();\n      const surfaceColor = styles.getPropertyValue('--color-surface').trim();\n      const primaryColor = styles.getPropertyValue('--color-primary').trim();\n\n      // Use surface color as base, primary as accent\n      const baseColor = surfaceColor || bgColor || '#ebedf0';\n      const accentColor = primaryColor || '#216e39';\n\n      const cal = new CalHeatmap();\n      cal.paint(\n        {\n          itemSelector: '#' + graphId,\n          data: {\n            source: displayData,\n            x: 'date',\n            y: 'value'\n          },\n          date: options.date,\n          domain: options.domain || { type: 'year' },\n          subDomain: options.subDomain || { type: 'day' },\n          range: options.range,\n          scale: {\n            color: {\n              type: 'linear',\n              range: [baseColor, accentColor],\n              domain: [0, maxValue]\n            }\n          }\n        },\n        [\n          [\n            Tooltip,\n            {\n              text: function (date, value, dayjsDate) {\n                const original = data.find(function(point) {\n                  return point.date === dayjsDate.format('YYYY-MM-DD');\n                });\n                const originalValue = original ? (original.value || 0) : (value || 0);\n                return (originalValue ? originalValue : 'No') + ' posts on ' + dayjsDate.format('MMM D, YYYY');\n              },\n            },\n          ],\n        ]\n      );\n\n      fitGraph();\n    }\n\n    // Initial paint\n    paintGraph();\n\n    // Register for theme changes\n    if (!window._contributionGraphPainters) {\n      window._contributionGraphPainters = [];\n    }\n    window._contributionGraphPainters.push(paintGraph);\n\n    if (!window._contributionGraphFitters) {\n      window._contributionGraphFitters = [];\n    }\n    window._contributionGraphFitters.push(fitGraph);\n  })();\n\n  // Watch for theme/palette changes and re-paint graphs\n  const observer = new MutationObserver(function(mutations) {\n    mutations.forEach(function(mutation) {\n      if (mutation.attributeName === 'data-palette' || mutation.attributeName === 'class') {\n        // Small delay to let CSS variables update\n        setTimeout(function() {\n          if (window._contributionGraphPainters) {\n            window._contributionGraphPainters.forEach(function(paint) {\n              paint();\n            });\n          }\n        }, 50);\n      }\n    });\n  });\n\n  observer.observe(document.documentElement, { attributes: true });\n  observer.observe(document.body, { attributes: true });\n\n  window.addEventListener('resize', function() {\n    if (window._contributionGraphFitters) {\n      window._contributionGraphFitters.forEach(function(fit) {\n        fit();\n      });\n    }\n  });\n});\n\u003c/script\u003e",
      "content_text": "\nI've been posting on this site since 2016, when layoffs were rolling through\nthe company I worked for at the time.  Starting a personal blog and a pile of\nside projects felt like one of the best things I could do for my resume, so off\nI went.  This site is built on \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\"\u003emarkata\u003c/a\u003e, more about that in the\n\u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"/colophon\" data-description=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\" data-date=\"2025-01-02\"\u003e/colophon\u003c/a\u003e.\n\n![screenshot-2025-01-31T21-23-13-643Z.png](https://dropper.waylonwalker.com/api/file/7b6cf2c2-2299-4320-b58f-b0bebf2d0504.png)\n\nThe old version of this page embedded static SVGs from my Python Markata build.\nThose files are gone in the `markata-go` site, so this page now renders the\nyearly posting history directly from the current content set.\n\n## Post Contributions All Time Monthly\n\n```contribution-graph\n{\n  \"data\": [\n    {% for post in core.filter(\"published == true\") %}\n    {\"date\": \"{{ post.Date.Format \\\"2006-01-02\\\" }}\", \"value\": 1}{% if not loop.last %},{% endif %}\n    {% endfor %}\n  ],\n  \"options\": {\n    \"year\": 2016,\n    \"range\": 120,\n    \"domain\": \"month\",\n    \"subDomain\": \"day\",\n    \"maxPercentile\": 95\n  }\n}\n```\n## Post Contributions in 2026\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2026,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n\n## Post Contributions in 2025\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2025,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n\n## Post Contributions in 2024\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2024,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\",\n    \"maxPercentile\": 95\n  }\n}\n```\n\n## Post Contributions in 2023\n\n2023 was a very busy year for me and I started slowing down.  About mid year I\nfelt like I had a lot that I wanted to get out, but felt like I couldn't,\nbecause I did not have the time to blog, so I added \u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\"\u003eThoughts\u003c/a\u003e on 7/22/2023\nwith this [first thought](https://waylonwalker.com/thoughts-2/).\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2023,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\",\n    \"maxValue\": 8\n  }\n}\n```\n\n\u003e Notice the huge uptick that started immediately as shots was released\n\n## Post Contributions in 2022\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2022,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n\n## Post Contributions in 2021\n\nAt the End of 2021 I started posting [[ til ]]s daily for a few months.  This\nis the point when I really started lowering the barrier to entry to make a blog\npost.  A blog post did not need to be a super long essay, but could be the size\nof a tweet.\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2021,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n\n## Post Contributions in 2020\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2020,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n\n## Post Contributions in 2019\n\n2019 was a huge learning year for me.  I was very busy leading a migration to\nthe cloud, containerized data pipeline orchestration, and setting up new\nprojects and templates using \u003ca href=\"/kedro/\" class=\"wikilink\" data-title=\"Kedro\" data-description=\"My Notes about using kedro\" data-date=\"2019-11-02\"\u003eKedro\u003c/a\u003e\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2019,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n\n## Post Contributions in 2018\n\nThis was the year I really started reaching for the terminal kicking off the\nyear with \u003ca href=\"/vim-notes/\" class=\"wikilink\" data-title=\"Vim Notes\" data-description=\"norcalli/neovim-plugin\" data-date=\"2018-02-01\"\u003eVim Notes\u003c/a\u003e and rounding out with \u003ca href=\"/bash/\" class=\"wikilink\" data-title=\"📝 Bash Notes\" data-description=\"Waylon Walker\u0026#39;s Bash Notes\" data-date=\"2019-09-08\"\u003e📝 Bash Notes\u003c/a\u003e.  I had been\nwatching luke smith for a awhile, and started managing my first linux server at\nwork.  I was stuck with windows at the time, but wsl was a new thing that let\nme run linux in the terminal.\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2018,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n\n## Post Contributions in 2017\n\n2017 was the year of getting started, I was coming up on 5 years into my\ncareer, and layoffs were happening hard at the time.  I remember fist landing 5\nyears before and being told in the companies long history they have never laid\noff engineers, it was a very safe place to be.  This was a wake up call that it\nmight all turn around and I would take nothing with me.  Blogging became my way\nto document things I was learning, it was making be better at communicating,\nand giving me a reason to take a deeper dive into interesting topics.\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2017,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n\n## Post Contributions in 2016\n\n2016 was the year that I created my github account, and really got serious\nabout career switching from Mechanical Engineering to Software Engineering.\nAll of my 2016 posts are back-dated github stars.\n\n```contribution-graph\n{\n  \"options\": {\n    \"year\": 2016,\n    \"range\": 1,\n    \"domain\": \"year\",\n    \"subDomain\": \"day\"\n  }\n}\n```\n",
      "summary": "I've been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...",
      "date_published": "2025-01-22T08:36:27Z",
      "date_modified": "2025-01-22T08:36:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash",
        "meta"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/now/",
      "url": "https://go.waylonwalker.com/now/",
      "title": "/now",
      "content_html": "\u003cp\u003eThis page is meant to be simple view into what is happening in my life right now. Inspired by \u003ca href=\"https://nownownow.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/nownownow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/nownownow.com.ico\" class=\"has-avatar  has-avatar-before\"\u003e@NowNowNow\u003c/a\u003e. and Derek Sivers.\u003c/p\u003e\n\u003cp\u003eLast Update 2026-04-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003emarkata-go\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eLast Update 2025-10-29\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSilksong has my attention, it’s great\u003c/li\u003e\n\u003cli\u003eWorking on new features for dropper\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/vibe-coding/\" class=\"glossary-term\" title=\"A coding style popularized in 2025. It is the act of using LLMs to generate code for an application, but the author never looks at the output. The author...\"\u003eVibe coding\u003c/a\u003e sucks\u003c/li\u003e\n\u003cli\u003eImages will soon be able to be resized and be more efficient over the network.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTrying to branch out and add more than software to the blog.  Things like design and 3d printing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr/\u003e\n\u003cp\u003eLast Update 2025-05-22 14:27:47\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWorking on [[ninesui]]\u003c/li\u003e\n\u003cli\u003eWorking on [[krayt]]\u003c/li\u003e\n\u003cli\u003elearning observability with grafana\u003c/li\u003e\n\u003cli\u003eFairly happy with \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\" data-preview=\"This post is a work in progress.\"\u003emarkata\u003c/a\u003e, at the moment, less focus and some small fixes\u003c/li\u003e\n\u003cli\u003eThe blog is fully k8s, love the experience\u003c/li\u003e\n\u003cli\u003ereplacing Google apps with \u003ca href=\"/self-host/\" class=\"glossary-term\" title=\"Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...\"\u003eself hosted\u003c/a\u003e apps [[replacing-google-search-apps-with-self-hosted-web-apps]]\u003c/li\u003e\n\u003cli\u003eDoing a second run through \u003ca href=\"/hollow-knight-home-row-layout/\" class=\"wikilink\" data-title=\"hollow knight home row layout\" data-description=\"I just made it past 100% in my main hollow knight run, so now I will allow myself to get silksong when it comes out. I did this with a little bit of YT...\" data-date=\"2025-05-05\" data-preview=\"I just made it past 100% in my main hollow knight run, so now I will allow myself to get silksong when it comes out. I did this with a little bit of YT...\"\u003ehollow knight home row layout\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlso second run of animal well\u003c/li\u003e\n\u003cli\u003eput a pause on the thps gap project \u003ca href=\"/tags/thps-gaps/\" class=\"wikilink\" data-title=\"Posts tagged: thps-gaps\" data-description=\"All posts with the tag \u0026#34;thps-gaps\u0026#34;\" data-preview=\"All posts with the tag \u0026#34;thps-gaps\u0026#34;\"\u003ePosts tagged: thps-gaps\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eworking on a split version of my keyboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr/\u003e\n\u003cp\u003eLast update Fri Jan 31 08:43:10 PM CST 2025\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHeavy Focus in on \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\" data-preview=\"This post is a work in progress.\"\u003emarkata\u003c/a\u003e, upcoming \u003ca href=\"/markata-search/\" class=\"wikilink\" data-title=\"markata search\" data-description=\"A side effect of markata-didyoumean is that we are able to implement some rudimentary search based on slug, title, tags, and description.\" data-date=\"2025-01-30\" data-preview=\"A side effect of markata-didyoumean is that we are able to implement some rudimentary search based on slug, title, tags, and description.\"\u003emarkata search\u003c/a\u003e and \u003ca href=\"/markata-didyoumean/\" class=\"wikilink\" data-title=\"Markata DidYouMean\" data-description=\"Coming in Markata 0.9.1 is far better documentation. i.e. Documentation that actually exists for everything. As part of poking around I realized that I often...\" data-date=\"2025-01-29\" data-preview=\"Coming in Markata 0.9.1 is far better documentation. i.e. Documentation that actually exists for everything. As part of poking around I realized that I often...\"\u003eMarkata DidYouMean\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMoving from Arch to Bazzite, I’m fully here but making everything just that\nmuch smoother in a container based world.\u003c/li\u003e\n\u003cli\u003ekubernetes - trying to get better\u003c/li\u003e\n\u003cli\u003ek8s in the \u003ca href=\"/homelab/\" class=\"glossary-term\" title=\"A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...\"\u003ehomelab\u003c/a\u003e - All of my services I run in my homelab are currently\nk8s, trying to make it all smooth and consistent\u003c/li\u003e\n\u003cli\u003ek8s in the blog, I’m building this static site in k8s and its never been\nbetter.\u003c/li\u003e\n\u003cli\u003elearning agentic workflows - I’m trying to build out a few side projects\nminimally touching the code and only instructing windsurf\u003c/li\u003e\n\u003cli\u003emostly-one-shot-apps - I just built \u003ca href=\"/nvim-manager/\" class=\"wikilink\" data-title=\"nvim-manager\" data-description=\"I recently built a cli application as a nearly-one-shot-app called nvim-manager. It manages your nvim dotfiles install.\" data-date=\"2025-01-12\" data-preview=\"I recently built a cli application as a nearly-one-shot-app called nvim-manager. It manages your nvim dotfiles install.\"\u003envim-manager\u003c/a\u003e as a mostly\none-shot-app (i.e. the app was nearly v1 out of the first prompt)\u003c/li\u003e\n\u003cli\u003emarkata plugins with chatgpt project using rag - \u003ca href=\"/analytics/\" class=\"wikilink\" data-title=\"analytics\" data-description=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\" data-date=\"2025-01-22\" data-preview=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\"\u003eanalytics\u003c/a\u003e - tag aggregator\u003c/li\u003e\n\u003cli\u003eFamily focus - \u003ca href=\"/we-beat-trailmakers/\" class=\"wikilink\" data-title=\"we beat trailmakers\" data-description=\"Today we broke through the atmosphere in trailmakers ready for pickup from those back at mission conrol.\" data-date=\"2025-01-10\" data-preview=\"Today we broke through the atmosphere in trailmakers ready for pickup from those back at mission conrol.\"\u003ewe beat trailmakers\u003c/a\u003e \u003ca href=\"/a-night-of-rounds/\" class=\"wikilink\" data-title=\"a night of rounds\" data-description=\"Tonight my son and I played rounds, I pulled clips of all the final rounds of each set of rounds. We play hardly any games with guns in them, this is one of...\" data-date=\"2025-01-16\" data-preview=\"Tonight my son and I played rounds, I pulled clips of all the final rounds of each set of rounds. We play hardly any games with guns in them, this is one of...\"\u003ea night of rounds\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "This page is meant to be simple view into what is happening in my life right now. Inspired by [@NowNowNow](https://nownownow.com/). and Derek Sivers.\n\n\nLast Update 2026-04-19\n\n* markata-go\n\nLast Update 2025-10-29\n\n* Silksong has my attention, it's great\n* Working on new features for dropper\n   * Vibe coding sucks\n   * Images will soon be able to be resized and be more efficient over the network.\n* Trying to branch out and add more than software to the blog.  Things like design and 3d printing.\n\n---\n\nLast Update 2025-05-22 14:27:47\n\n* Working on [[ninesui]]\n* Working on [[krayt]]\n* learning observability with grafana\n* Fairly happy with \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\"\u003emarkata\u003c/a\u003e, at the moment, less focus and some small fixes\n* The blog is fully k8s, love the experience\n* replacing Google apps with self hosted apps [[replacing-google-search-apps-with-self-hosted-web-apps]]\n* Doing a second run through \u003ca href=\"/hollow-knight-home-row-layout/\" class=\"wikilink\" data-title=\"hollow knight home row layout\" data-description=\"I just made it past 100% in my main hollow knight run, so now I will allow myself to get silksong when it comes out. I did this with a little bit of YT...\" data-date=\"2025-05-05\"\u003ehollow knight home row layout\u003c/a\u003e\n* Also second run of animal well\n* put a pause on the thps gap project \u003ca href=\"/tags/thps-gaps/\" class=\"wikilink\" data-title=\"Posts tagged: thps-gaps\" data-description=\"All posts with the tag \u0026#34;thps-gaps\u0026#34;\"\u003ePosts tagged: thps-gaps\u003c/a\u003e\n* working on a split version of my keyboard\n\n---\n\nLast update Fri Jan 31 08:43:10 PM CST 2025\n\n* Heavy Focus in on \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\"\u003emarkata\u003c/a\u003e, upcoming \u003ca href=\"/markata-search/\" class=\"wikilink\" data-title=\"markata search\" data-description=\"A side effect of markata-didyoumean is that we are able to implement some rudimentary search based on slug, title, tags, and description.\" data-date=\"2025-01-30\"\u003emarkata search\u003c/a\u003e and \u003ca href=\"/markata-didyoumean/\" class=\"wikilink\" data-title=\"Markata DidYouMean\" data-description=\"Coming in Markata 0.9.1 is far better documentation. i.e. Documentation that actually exists for everything. As part of poking around I realized that I often...\" data-date=\"2025-01-29\"\u003eMarkata DidYouMean\u003c/a\u003e\n* Moving from Arch to Bazzite, I'm fully here but making everything just that\n  much smoother in a container based world.\n* kubernetes - trying to get better\n* k8s in the homelab - All of my services I run in my homelab are currently\n  k8s, trying to make it all smooth and consistent\n* k8s in the blog, I'm building this static site in k8s and its never been\n  better.\n* learning agentic workflows - I'm trying to build out a few side projects\n  minimally touching the code and only instructing windsurf\n* mostly-one-shot-apps - I just built \u003ca href=\"/nvim-manager/\" class=\"wikilink\" data-title=\"nvim-manager\" data-description=\"I recently built a cli application as a nearly-one-shot-app called nvim-manager. It manages your nvim dotfiles install.\" data-date=\"2025-01-12\"\u003envim-manager\u003c/a\u003e as a mostly\n  one-shot-app (i.e. the app was nearly v1 out of the first prompt)\n* markata plugins with chatgpt project using rag - \u003ca href=\"/analytics/\" class=\"wikilink\" data-title=\"analytics\" data-description=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\" data-date=\"2025-01-22\"\u003eanalytics\u003c/a\u003e - tag aggregator\n* Family focus - \u003ca href=\"/we-beat-trailmakers/\" class=\"wikilink\" data-title=\"we beat trailmakers\" data-description=\"Today we broke through the atmosphere in trailmakers ready for pickup from those back at mission conrol.\" data-date=\"2025-01-10\"\u003ewe beat trailmakers\u003c/a\u003e \u003ca href=\"/a-night-of-rounds/\" class=\"wikilink\" data-title=\"a night of rounds\" data-description=\"Tonight my son and I played rounds, I pulled clips of all the final rounds of each set of rounds. We play hardly any games with guns in them, this is one of...\" data-date=\"2025-01-16\"\u003ea night of rounds\u003c/a\u003e\n",
      "summary": "This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.",
      "date_published": "2025-01-12T21:07:12Z",
      "date_modified": "2025-01-12T21:07:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/start/",
      "url": "https://go.waylonwalker.com/start/",
      "title": "/start",
      "content_html": "\u003cp\u003eWelcome to waylonwalker.com, my small corner of the internet.  I currently have\n3606 posts published,\nhere are some links to help you get started around here.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://dropper.waylonwalker.com/api/file/1896de8d-abd9-4652-95df-b41dc7eaf48b.webp\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://dropper.waylonwalker.com/api/file/1896de8d-abd9-4652-95df-b41dc7eaf48b.webp\" alt=\"2fcdafc0-f152-4fa9-ac91-799acd9084d3-239-1.webp\" class=\"more-cinematic glightbox\"/ data-glightbox=\"description: 2fcdafc0-f152-4fa9-ac91-799acd9084d3-239-1.webp\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"feeds\"\u003eFeeds \u003ca href=\"#feeds\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have quite a few different feeds that you can browse or subscribe to in your\nrss reader, you can find them on my \u003ca href=\"/feeds/\" class=\"wikilink\" data-title=\"feeds\" data-description=\"I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...\" data-date=\"2024-04-02\" data-preview=\"I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...\"\u003efeeds\u003c/a\u003e page.\u003c/p\u003e\n\u003ch2 id=\"slash-posts\"\u003eSlash posts \u003ca href=\"#slash-posts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e[[ slashes ]]\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://slashpages.net/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/slashpages.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/slashpages.net.png\" class=\"has-avatar  has-avatar-before\"\u003eSlash pages\u003c/a\u003e are some evergreen pages that I will do my best to keep up to date,\nthey are typically not targeted to a specific moment in time, but designed to\nbe ever living.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/about/\" class=\"wikilink\" data-title=\"Waylon Walker\" data-description=\"Husband, dad of two, and hobbyist builder of things on the internet.\" data-date=\"2021-11-20\" data-preview=\"Husband, dad of two, and hobbyist builder of things on the internet.\"\u003eWaylon Walker\u003c/a\u003e - Husband, dad of two, and hobbyist builder of things on the internet.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/ai/\" class=\"wikilink\" data-title=\"Ai\" data-description=\"Last updated Jan 2026.\" data-date=\"2026-01-11\" data-preview=\"Last updated Jan 2026.\"\u003eAi\u003c/a\u003e - Last updated Jan 2026.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/analytics/\" class=\"wikilink\" data-title=\"analytics\" data-description=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\" data-date=\"2025-01-22\" data-preview=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\"\u003eanalytics\u003c/a\u003e - I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of…\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/carry/\" class=\"wikilink\" data-title=\"/carry/\" data-description=\"I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I\u0026#39;d like, but My EDC is no...\" data-date=\"2026-03-27\" data-preview=\"I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I\u0026#39;d like, but My EDC is no...\"\u003e/carry/\u003c/a\u003e - I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I\u0026#39;d like, but My EDC is no…\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"/colophon\" data-description=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\" data-date=\"2025-01-02\" data-preview=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\"\u003e/colophon\u003c/a\u003e - Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/feeds/\" class=\"wikilink\" data-title=\"feeds\" data-description=\"I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...\" data-date=\"2024-04-02\" data-preview=\"I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...\"\u003efeeds\u003c/a\u003e - I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in…\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\" data-preview=\"This post is a work in progress.\"\u003emarkata\u003c/a\u003e - This post is a work in progress.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/nope/\" class=\"wikilink\" data-title=\"/nope\" data-description=\"Inspired by @baty\u0026#39;s nope slashpage, a list of ** things I don\u0026#39;t like, don\u0026#39;t care, avoid, overhyped, or won\u0026#39;t do in no particular order, updated as I think...\" data-date=\"2026-02-11\" data-preview=\"Inspired by @baty\u0026#39;s nope slashpage, a list of ** things I don\u0026#39;t like, don\u0026#39;t care, avoid, overhyped, or won\u0026#39;t do in no particular order, updated as I think...\"\u003e/nope\u003c/a\u003e - Inspired by @baty\u0026#39;s nope slashpage, a list of ** things I don\u0026#39;t like, don\u0026#39;t care, avoid, overhyped, or won\u0026#39;t do in no particular order, updated as I think…\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/now/\" class=\"wikilink\" data-title=\"/now\" data-description=\"This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.\" data-date=\"2025-01-12\" data-preview=\"This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.\"\u003e/now\u003c/a\u003e - This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/start/\" class=\"wikilink\" data-title=\"/start\" data-description=\"Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.\" data-date=\"2025-01-03\" data-preview=\"Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.\"\u003e/start\u003c/a\u003e - Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\" data-preview=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\"\u003eThoughts\u003c/a\u003e - These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my…\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/tinyapps/\" class=\"wikilink\" data-title=\"tinyapps\" data-description=\"I\u0026#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...\" data-date=\"2025-05-22\" data-preview=\"I\u0026#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...\"\u003etinyapps\u003c/a\u003e - I\u0026#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own \u003ca href=\"/homelab/\" class=\"glossary-term\" title=\"A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...\"\u003ehomelab\u003c/a\u003e. The first three that…\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/top4/\" class=\"wikilink\" data-title=\"/top4\" data-description=\"Definitive ranked lists of my top 3 favorites plus an honorable mention.\" data-date=\"2026-02-11\" data-preview=\"Definitive ranked lists of my top 3 favorites plus an honorable mention.\"\u003e/top4\u003c/a\u003e - Definitive ranked lists of my top 3 favorites plus an honorable mention.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/verify/\" class=\"wikilink\" data-title=\"/verify\" data-description=\"Inspired by @mollywhite\u0026#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:\" data-date=\"2026-02-24\" data-preview=\"Inspired by @mollywhite\u0026#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:\"\u003e/verify\u003c/a\u003e - Inspired by @mollywhite\u0026#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/wants/\" class=\"wikilink\" data-title=\"wants\" data-description=\"Inspired by mara.town/wants\" data-date=\"2025-05-27\" data-preview=\"Inspired by mara.town/wants\"\u003ewants\u003c/a\u003e - Inspired by mara.town/wants\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/yep/\" class=\"wikilink\" data-title=\"/yep\" data-description=\"Inspired by @fyrio\u0026#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...\" data-date=\"2026-02-11\" data-preview=\"Inspired by @fyrio\u0026#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...\"\u003e/yep\u003c/a\u003e - Inspired by @fyrio\u0026#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I…\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nWelcome to waylonwalker.com, my small corner of the internet.  I currently have\n3606 posts published,\nhere are some links to help you get started around here.\n\n![2fcdafc0-f152-4fa9-ac91-799acd9084d3-239-1.webp](https://dropper.waylonwalker.com/api/file/1896de8d-abd9-4652-95df-b41dc7eaf48b.webp){.more-cinematic}\n\n## Feeds\n\nI have quite a few different feeds that you can browse or subscribe to in your\nrss reader, you can find them on my \u003ca href=\"/feeds/\" class=\"wikilink\" data-title=\"feeds\" data-description=\"I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...\" data-date=\"2024-04-02\"\u003efeeds\u003c/a\u003e page.\n\n## Slash posts\n\n[[ slashes ]]\n\n[Slash pages](https://slashpages.net/) are some evergreen pages that I will do my best to keep up to date,\nthey are typically not targeted to a specific moment in time, but designed to\nbe ever living.\n\n* \u003ca href=\"/about/\" class=\"wikilink\" data-title=\"Waylon Walker\" data-description=\"Husband, dad of two, and hobbyist builder of things on the internet.\" data-date=\"2021-11-20\"\u003eWaylon Walker\u003c/a\u003e - Husband, dad of two, and hobbyist builder of things on the internet.\n* \u003ca href=\"/ai/\" class=\"wikilink\" data-title=\"Ai\" data-description=\"Last updated Jan 2026.\" data-date=\"2026-01-11\"\u003eAi\u003c/a\u003e - Last updated Jan 2026.\n* \u003ca href=\"/analytics/\" class=\"wikilink\" data-title=\"analytics\" data-description=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\" data-date=\"2025-01-22\"\u003eanalytics\u003c/a\u003e - I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\n* \u003ca href=\"/carry/\" class=\"wikilink\" data-title=\"/carry/\" data-description=\"I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I\u0026#39;d like, but My EDC is no...\" data-date=\"2026-03-27\"\u003e/carry/\u003c/a\u003e - I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I\u0026#39;d like, but My EDC is no...\n* \u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"/colophon\" data-description=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\" data-date=\"2025-01-02\"\u003e/colophon\u003c/a\u003e - Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\n* \u003ca href=\"/feeds/\" class=\"wikilink\" data-title=\"feeds\" data-description=\"I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...\" data-date=\"2024-04-02\"\u003efeeds\u003c/a\u003e - I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...\n* \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\"\u003emarkata\u003c/a\u003e - This post is a work in progress.\n* \u003ca href=\"/nope/\" class=\"wikilink\" data-title=\"/nope\" data-description=\"Inspired by @baty\u0026#39;s nope slashpage, a list of ** things I don\u0026#39;t like, don\u0026#39;t care, avoid, overhyped, or won\u0026#39;t do in no particular order, updated as I think...\" data-date=\"2026-02-11\"\u003e/nope\u003c/a\u003e - Inspired by @baty\u0026#39;s nope slashpage, a list of ** things I don\u0026#39;t like, don\u0026#39;t care, avoid, overhyped, or won\u0026#39;t do in no particular order, updated as I think...\n* \u003ca href=\"/now/\" class=\"wikilink\" data-title=\"/now\" data-description=\"This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.\" data-date=\"2025-01-12\"\u003e/now\u003c/a\u003e - This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.\n* \u003ca href=\"/start/\" class=\"wikilink\" data-title=\"/start\" data-description=\"Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.\" data-date=\"2025-01-03\"\u003e/start\u003c/a\u003e - Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.\n* \u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\"\u003eThoughts\u003c/a\u003e - These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\n* \u003ca href=\"/tinyapps/\" class=\"wikilink\" data-title=\"tinyapps\" data-description=\"I\u0026#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...\" data-date=\"2025-05-22\"\u003etinyapps\u003c/a\u003e - I\u0026#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...\n* \u003ca href=\"/top4/\" class=\"wikilink\" data-title=\"/top4\" data-description=\"Definitive ranked lists of my top 3 favorites plus an honorable mention.\" data-date=\"2026-02-11\"\u003e/top4\u003c/a\u003e - Definitive ranked lists of my top 3 favorites plus an honorable mention.\n* \u003ca href=\"/verify/\" class=\"wikilink\" data-title=\"/verify\" data-description=\"Inspired by @mollywhite\u0026#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:\" data-date=\"2026-02-24\"\u003e/verify\u003c/a\u003e - Inspired by @mollywhite\u0026#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:\n* \u003ca href=\"/wants/\" class=\"wikilink\" data-title=\"wants\" data-description=\"Inspired by mara.town/wants\" data-date=\"2025-05-27\"\u003ewants\u003c/a\u003e - Inspired by mara.town/wants\n* \u003ca href=\"/yep/\" class=\"wikilink\" data-title=\"/yep\" data-description=\"Inspired by @fyrio\u0026#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...\" data-date=\"2026-02-11\"\u003e/yep\u003c/a\u003e - Inspired by @fyrio\u0026#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...\n\n",
      "summary": "Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.",
      "date_published": "2025-01-03T10:49:47Z",
      "date_modified": "2025-01-03T10:49:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "meta",
        "slash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/colophon/",
      "url": "https://go.waylonwalker.com/colophon/",
      "title": "/colophon",
      "content_html": "\u003cblockquote\u003e\n\u003cp\u003e\u003ca href=\"https://indieweb.org/colophon\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/indieweb.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/indieweb.org.ico\" class=\"has-avatar  has-avatar-before\"\u003eColophon\u003c/a\u003e a page that describes how the site\nis made, with what tools, supporting what technologies\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"author\"\u003eAuthor \u003ca href=\"#author\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/profile.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/profile.webp\" alt=\"Waylon Walker’s Profile Picture\"/ data-glightbox=\"description: Waylon Walker’s Profile Picture\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eAll posts on this site are written by \u003ca href=\"https://waylonwalker.com\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eWaylon\nWalker\u003c/a\u003e, the typical content has changed and evolved\nover time.  I go back and make a few corrections, but for the most part things\nstay pretty much as they were published originally.\u003c/p\u003e\n\u003cp\u003esee more in \u003ca href=\"/about/\" class=\"wikilink\" data-title=\"Waylon Walker\" data-description=\"Husband, dad of two, and hobbyist builder of things on the internet.\" data-date=\"2021-11-20\" data-preview=\"Husband, dad of two, and hobbyist builder of things on the internet.\"\u003eWaylon Walker\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"tech\"\u003etech \u003ca href=\"#tech\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis site is a static site build with my own static site generator \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\" data-preview=\"This post is a work in progress.\"\u003emarkata\u003c/a\u003e, \u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\" data-preview=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\"\u003eThoughts\u003c/a\u003e or as Simon Willison calls it a \u003ca href=\"https://simonwillison.net/2024/Dec/22/link-blog/#atom-everything\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\" class=\"has-avatar  has-avatar-before\"\u003elink\nblog\u003c/a\u003e posts\nare pulled in as a regular posts, all is hosted on cloudflare pages.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\" data-preview=\"This post is a work in progress.\"\u003emarkata\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\" data-preview=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\"\u003eThoughts\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ecloudflare pages\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003esee more about these components in \u003ca href=\"/about-this-site/\" class=\"wikilink\" data-title=\"about this site\" data-description=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\" data-date=\"2024-05-31\" data-preview=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\"\u003eabout this site\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"analytics\"\u003eAnalytics \u003ca href=\"#analytics\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI do not track users, I respect the privacy of my readers and do not track\ntheir information.  I do track \u003ca href=\"/analytics/\" class=\"wikilink\" data-title=\"analytics\" data-description=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\" data-date=\"2025-01-22\" data-preview=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\"\u003eanalytics\u003c/a\u003e on my own writing a post rate.\nIts more of an interesting history of the site.\u003c/p\u003e\n\u003ch2 id=\"meta\"\u003emeta \u003ca href=\"#meta\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSome evergreen pages that are more about me or this site from the \u003ca href=\"/tags/meta/\" class=\"wikilink\" data-title=\"Posts tagged: meta\" data-description=\"All posts with the tag \u0026#34;meta\u0026#34;\" data-preview=\"All posts with the tag \u0026#34;meta\u0026#34;\"\u003ePosts tagged: meta\u003c/a\u003e feed.\u003c/p\u003e\n",
      "content_text": "\n\u003e [Colophon](https://indieweb.org/colophon) a page that describes how the site\n\u003e is made, with what tools, supporting what technologies\n\n## Author\n\n![Waylon Walker's Profile Picture](https://images.waylonwalker.com/profile.webp)\n\nAll posts on this site are written by [Waylon\nWalker](https://waylonwalker.com), the typical content has changed and evolved\nover time.  I go back and make a few corrections, but for the most part things\nstay pretty much as they were published originally.\n\nsee more in \u003ca href=\"/about/\" class=\"wikilink\" data-title=\"Waylon Walker\" data-description=\"Husband, dad of two, and hobbyist builder of things on the internet.\" data-date=\"2021-11-20\"\u003eWaylon Walker\u003c/a\u003e\n\n## tech\n\nThis site is a static site build with my own static site generator \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\"\u003emarkata\u003c/a\u003e, \u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\"\u003eThoughts\u003c/a\u003e or as Simon Willison calls it a [link\nblog](https://simonwillison.net/2024/Dec/22/link-blog/#atom-everything) posts\nare pulled in as a regular posts, all is hosted on cloudflare pages.\n\n* \u003ca href=\"/markata/\" class=\"wikilink\" data-title=\"markata\" data-description=\"This post is a work in progress.\" data-date=\"2024-05-30\"\u003emarkata\u003c/a\u003e\n* \u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\"\u003eThoughts\u003c/a\u003e\n* cloudflare pages\n\nsee more about these components in \u003ca href=\"/about-this-site/\" class=\"wikilink\" data-title=\"about this site\" data-description=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\" data-date=\"2024-05-31\"\u003eabout this site\u003c/a\u003e\n\n## Analytics\n\nI do not track users, I respect the privacy of my readers and do not track\ntheir information.  I do track \u003ca href=\"/analytics/\" class=\"wikilink\" data-title=\"analytics\" data-description=\"I\u0026#39;ve been posting on this site since 2016, when layoffs were rolling through the company I worked for at the time. Starting a personal blog and a pile of...\" data-date=\"2025-01-22\"\u003eanalytics\u003c/a\u003e on my own writing a post rate.\nIts more of an interesting history of the site.\n\n## meta\n\nSome evergreen pages that are more about me or this site from the \u003ca href=\"/tags/meta/\" class=\"wikilink\" data-title=\"Posts tagged: meta\" data-description=\"All posts with the tag \u0026#34;meta\u0026#34;\"\u003ePosts tagged: meta\u003c/a\u003e feed.\n\n\n",
      "summary": "Colophon a page that describes how the site \u003e is made, with what tools, supporting what technologies",
      "date_published": "2025-01-02T10:21:23Z",
      "date_modified": "2025-01-02T10:21:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "meta",
        "webdev",
        "slash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markata/",
      "url": "https://go.waylonwalker.com/markata/",
      "title": "markata",
      "content_html": "\u003cp\u003eThis post is a work in progress.\u003c/p\u003e\n\u003cp\u003eMarkata is the static site generator that I created to build my website \u003ca href=\"/about-this-site/\" class=\"wikilink\" data-title=\"about this site\" data-description=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\" data-date=\"2024-05-31\" data-preview=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\"\u003eabout this site\u003c/a\u003e.  I built it for me and I enjoy using it.  I know everying\nit can do and I can extend it to do more easily.  I have set it up for some\nfriends to also use it and am proud that it helps them publish their content.\u003c/p\u003e\n\u003cp\u003eIt’s a meme to create your own static site generator to make your website.  Yes\nits funny, I don’t recommend it if your not ready for the level of work that\ncomes with it, but at the end of the day it’s very rewarding and a great way to\nlearn.\u003c/p\u003e\n\u003ch2 id=\"static-sites-were-all-the-rage\"\u003eStatic Sites were all the rage \u003ca href=\"#static-sites-were-all-the-rage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eJAMStack was 🔥\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eGatsby and Next.js hit the scene as the next generation of static site builders\nand were getting big around the time I started building my site in 2017.  They\nwere based on react.  I dove into react and learned it enough to build my\nwebsite, but I really lacked the depth of knowledge in the js ecosystem to\nreally work on it effectively.  For instance when it got slow, it was hard for\nme to profile and find out why.  What I really wanted was my site written in\npython, which I knew the ecosystem for very well, but I did not find the\nexisting site generators easy to extend to do the things I needed.  Naively I\nthought it would be easier to just build my own than learn how to make one do\nwhat I wanted it to.  Not invented here syndrome hitting hard.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eIn their Defense\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eI really lacked the depth of knowledge in the js ecosystem to really work on\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eit (gatsby) effectively.\u003c/p\u003e\n\u003c/div\u003e\n\u003ch2 id=\"plugins-all-the-way-down\"\u003ePlugins all the way down \u003ca href=\"#plugins-all-the-way-down\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI started building this as I dove deeper into the \u003ca href=\"/kedro/\" class=\"wikilink\" data-title=\"Kedro\" data-description=\"My Notes about using kedro\" data-date=\"2019-11-02\" data-preview=\"My Notes about using kedro\"\u003eKedro\u003c/a\u003e framework for Data\nEngineering pipelines.  They use a plugin framework for allowing users to\nextend it called pluggy.  I had a great experience extending kedro using pluggy\nand wanted to build something with based on pluggy when I had started markata.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/pluggy-minimal-example/\" class=\"wikilink\" data-title=\"A Minimal Pluggy Example\" data-description=\"Pluggy makes it so easy to allow users to modify the behavior of a framework without thier specific feature needing to be implemented in the framework itself.\" data-date=\"2022-01-01\" data-preview=\"Pluggy makes it so easy to allow users to modify the behavior of a framework without thier specific feature needing to be implemented in the framework itself.\"\u003eA Minimal Pluggy Example\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"more-posts\"\u003eMore Posts \u003ca href=\"#more-posts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have more posts about markata in the [[ tag/markata ]].\u003c/p\u003e\n\u003cp\u003e{% for post in markata.feeds.markatafeed.map(reverse=True) %}\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/%7B%7Bpost.slug%7D%7D\"\u003e{{post.title}}\u003c/a\u003e - {{post.date}}\n{% endfor %}\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nThis post is a work in progress.\n\nMarkata is the static site generator that I created to build my website \u003ca href=\"/about-this-site/\" class=\"wikilink\" data-title=\"about this site\" data-description=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\" data-date=\"2024-05-31\"\u003eabout this site\u003c/a\u003e.  I built it for me and I enjoy using it.  I know everying\nit can do and I can extend it to do more easily.  I have set it up for some\nfriends to also use it and am proud that it helps them publish their content.\n\nIt's a meme to create your own static site generator to make your website.  Yes\nits funny, I don't recommend it if your not ready for the level of work that\ncomes with it, but at the end of the day it's very rewarding and a great way to\nlearn.\n\n## Static Sites were all the rage\n\n**JAMStack was 🔥**\n\nGatsby and Next.js hit the scene as the next generation of static site builders\nand were getting big around the time I started building my site in 2017.  They\nwere based on react.  I dove into react and learned it enough to build my\nwebsite, but I really lacked the depth of knowledge in the js ecosystem to\nreally work on it effectively.  For instance when it got slow, it was hard for\nme to profile and find out why.  What I really wanted was my site written in\npython, which I knew the ecosystem for very well, but I did not find the\nexisting site generators easy to extend to do the things I needed.  Naively I\nthought it would be easier to just build my own than learn how to make one do\nwhat I wanted it to.  Not invented here syndrome hitting hard.\n\n!!! Note \"In their Defense\"\n    I really lacked the depth of knowledge in the js ecosystem to really work on\n    it (gatsby) effectively.\n\n## Plugins all the way down\n\nI started building this as I dove deeper into the \u003ca href=\"/kedro/\" class=\"wikilink\" data-title=\"Kedro\" data-description=\"My Notes about using kedro\" data-date=\"2019-11-02\"\u003eKedro\u003c/a\u003e framework for Data\nEngineering pipelines.  They use a plugin framework for allowing users to\nextend it called pluggy.  I had a great experience extending kedro using pluggy\nand wanted to build something with based on pluggy when I had started markata.\n\n\u003ca href=\"/pluggy-minimal-example/\" class=\"wikilink\" data-title=\"A Minimal Pluggy Example\" data-description=\"Pluggy makes it so easy to allow users to modify the behavior of a framework without thier specific feature needing to be implemented in the framework itself.\" data-date=\"2022-01-01\"\u003eA Minimal Pluggy Example\u003c/a\u003e\n\n## More Posts\n\nI have more posts about markata in the [[ tag/markata ]].\n\n{% for post in markata.feeds.markatafeed.map(reverse=True) %}\n\n* [{{post.title}}](/{{post.slug}}) - {{post.date}}\n{% endfor %}\n",
      "summary": "This post is a work in progress.",
      "date_published": "2024-05-30T13:45:54Z",
      "date_modified": "2024-05-30T13:45:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata",
        "slash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/feeds/",
      "url": "https://go.waylonwalker.com/feeds/",
      "title": "feeds",
      "content_html": "\u003cp\u003eI have several feeds that you can consume my content with.  Many posts will\ncross between them, so if you would like to follow a certain stream of content\nin your rss reader thats what this is for. This one might feel like it has some\nextra noise with multiple posts per day, including starts, and instagram style\nposts, for a bit less look at the [[ main ]] feed.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eTLDR\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eIf you are looking for everything look here \u0026lt;https://waylonwalker.com/archive/rss.xml\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 id=\"all\"\u003eAll \u003ca href=\"#all\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is a feed of everything that I have published on my site to date\nincluding \u003ca href=\"/tags/blog/\" class=\"wikilink\" data-title=\"Posts tagged: blog\" data-description=\"All posts with the tag \u0026#34;blog\u0026#34;\" data-preview=\"All posts with the tag \u0026#34;blog\u0026#34;\"\u003ePosts tagged: blog\u003c/a\u003e, [[ til ]], \u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\" data-preview=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\"\u003eThoughts\u003c/a\u003e, [[ stars ]], \u003ca href=\"/tags/shots/\" class=\"wikilink\" data-title=\"Posts tagged: shots\" data-description=\"All posts with the tag \u0026#34;shots\u0026#34;\" data-preview=\"All posts with the tag \u0026#34;shots\u0026#34;\"\u003ePosts tagged: shots\u003c/a\u003e,\n[[ pings ]].\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/published/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/published/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"main\"\u003eMain \u003ca href=\"#main\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLike the All feed, but drops the shots (instagram style posts) and stars\n(github stars).\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/main/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/main/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"til---dailyish\"\u003etil - daily(ish) \u003ca href=\"#til---dailyish\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ethink gist with a tweet\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eThis is a feed of all of my TIL’s (Today I Learned).  These are generally short\nsingle topic posts that I write up quickly.  They are generally things that are\nfairly new to me, often things that I struggled to find support for on the\ninternet, and felt that It needed yet one more article with my voice.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/til/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/til/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"shots---dailyish\"\u003eshots - daily(ish) \u003ca href=\"#shots---dailyish\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ethink Instagram\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eThis feed is a collection of images, sometimes I post a few a day, sometimes a\nfew weeks will go by, it really just depends on what I have going on.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/shots/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/shots/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"pings---dailyish\"\u003epings - daily(ish) \u003ca href=\"#pings---dailyish\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ethink tweet\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eThese are ephemeral thoughts that pop in my head and I post as they occur.\nMaybe inspired by something I see or hear, but typically no more context is\nprovided.  I hate how social media has become very much trigger engagement\nbait… This is adjacent to that, but I try to be less hard on the bait.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/pings/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/pings/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"thoughts---daily\"\u003eThoughts - daily+ \u003ca href=\"#thoughts---daily\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese are generally my thoughts on a web page or some sort of url, except a\nrare few don’t have a link.  These are dual published off of my\n\u003ca href=\"https://thoughts.waylonwalker.com\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/thoughts.waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ethoughts.waylonwalker.com\u003c/a\u003e site.  It’s a\nfully dynamically rendered site 2000’s style.  Posts are stored in a database\nand instantly available.  Almost all of the posts were written in a small\n\u003ccode\u003e\u0026lt;textarea\u0026gt;\u003c/code\u003e field within a chrome extension that I built for it.\u003c/p\u003e\n\u003cp\u003eThese posts are intended to in two ways.  One, link building for the author.  I\nhope that I give the people helping me out along the way just a little bit of a\nboost.  Two, they serve as a permanant commented bookmark for me to search, and\ncome back to later when I have forgotten where I have seen something.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/thoughts/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/thoughts/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"stars\"\u003estars \u003ca href=\"#stars\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI pull in all of my github stars into one feed \u003ca href=\"/pesos/\" class=\"wikilink\" data-title=\"pesos\" data-description=\"Pesos is the act of Publish Elsewhere Syncicate to Own Site. It is an indieweb concept that I recently started applying to my own site.\" data-date=\"2025-01-25\" data-preview=\"Pesos is the act of Publish Elsewhere Syncicate to Own Site. It is an indieweb concept that I recently started applying to my own site.\"\u003epesos\u003c/a\u003e style.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/stars/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/stars/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"recent\"\u003eRecent \u003ca href=\"#recent\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is a shorter version of \u003cstrong\u003eAll\u003c/strong\u003e, as it is filtered down to only the posts\ncreated within the last 30 days.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/recent/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/recent/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"blog---weeklymonthly\"\u003eBlog - weekly/monthly \u003ca href=\"#blog---weeklymonthly\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese are my full big \u003cstrong\u003eB\u003c/strong\u003e \u003cstrong\u003eB\u003c/strong\u003elog posts.  They are what I started writing,\ntypically take a bit more time to put together.  I write fewer of them these\ndays than I used to.  I’d like to think that they are the more polished posts\nof the bunch.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/blog/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/blog/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"today\"\u003eToday \u003ca href=\"#today\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese are only the posts that went live the day that the site last built.  If\nmy scheduled builds keep working as intended they are today’s posts.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/today/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/today/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"python\"\u003ePython \u003ca href=\"#python\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese are all the posts related to the python programming language.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/python/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/python/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"linux\"\u003eLinux \u003ca href=\"#linux\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese are all the posts related to linux.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/linux/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/linux/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"vim\"\u003evim \u003ca href=\"#vim\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese are all the posts related to the greatest way to edit text, vim.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/vim/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/vim/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCareful, you might not make it out\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"kedro\"\u003ekedro \u003ca href=\"#kedro\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese are all the posts related to the python data engineering framework kedro.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/kedro/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/kedro/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"gratitude\"\u003egratitude \u003ca href=\"#gratitude\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI used to do daily gratitude posts, I might get back into it.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/gratitude/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/gratitude/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nI have several feeds that you can consume my content with.  Many posts will\ncross between them, so if you would like to follow a certain stream of content\nin your rss reader thats what this is for. This one might feel like it has some\nextra noise with multiple posts per day, including starts, and instagram style\nposts, for a bit less look at the [[ main ]] feed.\n\n!!! Note TLDR\n    If you are looking for everything look here \u003chttps://waylonwalker.com/archive/rss.xml\u003e\n\n## All\n\n\nThis is a feed of everything that I have published on my site to date\nincluding \u003ca href=\"/tags/blog/\" class=\"wikilink\" data-title=\"Posts tagged: blog\" data-description=\"All posts with the tag \u0026#34;blog\u0026#34;\"\u003ePosts tagged: blog\u003c/a\u003e, [[ til ]], \u003ca href=\"/thoughts/\" class=\"wikilink\" data-title=\"Thoughts\" data-description=\"These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026#39;t have a link. These are dual published off of my...\" data-date=\"2024-04-01\"\u003eThoughts\u003c/a\u003e, [[ stars ]], \u003ca href=\"/tags/shots/\" class=\"wikilink\" data-title=\"Posts tagged: shots\" data-description=\"All posts with the tag \u0026#34;shots\u0026#34;\"\u003ePosts tagged: shots\u003c/a\u003e,\n[[ pings ]].\n\n* [web](https://waylonwalker.com/published/)\n* [rss](https://waylonwalker.com/published/rss.xml)\n\n## Main\n\nLike the All feed, but drops the shots (instagram style posts) and stars\n(github stars).\n\n\n* [web](https://waylonwalker.com/main/)\n* [rss](https://waylonwalker.com/main/rss.xml)\n\n## til - daily(ish)\n\n_think gist with a tweet_\n\nThis is a feed of all of my TIL's (Today I Learned).  These are generally short\nsingle topic posts that I write up quickly.  They are generally things that are\nfairly new to me, often things that I struggled to find support for on the\ninternet, and felt that It needed yet one more article with my voice.\n\n* [web](https://waylonwalker.com/til/)\n* [rss](https://waylonwalker.com/til/rss.xml)\n\n## shots - daily(ish)\n\n_think Instagram_\n\nThis feed is a collection of images, sometimes I post a few a day, sometimes a\nfew weeks will go by, it really just depends on what I have going on.\n\n* [web](https://waylonwalker.com/shots/)\n* [rss](https://waylonwalker.com/shots/rss.xml)\n\n## pings - daily(ish)\n\n_think tweet_\n\nThese are ephemeral thoughts that pop in my head and I post as they occur.\nMaybe inspired by something I see or hear, but typically no more context is\nprovided.  I hate how social media has become very much trigger engagement\nbait... This is adjacent to that, but I try to be less hard on the bait.\n\n* [web](https://waylonwalker.com/pings/)\n* [rss](https://waylonwalker.com/pings/rss.xml)\n\n## Thoughts - daily+\n\nThese are generally my thoughts on a web page or some sort of url, except a\nrare few don't have a link.  These are dual published off of my\n[thoughts.waylonwalker.com](https://thoughts.waylonwalker.com) site.  It's a\nfully dynamically rendered site 2000's style.  Posts are stored in a database\nand instantly available.  Almost all of the posts were written in a small\n`\u003ctextarea\u003e` field within a chrome extension that I built for it.\n\nThese posts are intended to in two ways.  One, link building for the author.  I\nhope that I give the people helping me out along the way just a little bit of a\nboost.  Two, they serve as a permanant commented bookmark for me to search, and\ncome back to later when I have forgotten where I have seen something.\n\n* [web](https://waylonwalker.com/thoughts/)\n* [rss](https://waylonwalker.com/thoughts/rss.xml)\n\n## stars\n\nI pull in all of my github stars into one feed \u003ca href=\"/pesos/\" class=\"wikilink\" data-title=\"pesos\" data-description=\"Pesos is the act of Publish Elsewhere Syncicate to Own Site. It is an indieweb concept that I recently started applying to my own site.\" data-date=\"2025-01-25\"\u003epesos\u003c/a\u003e style.\n\n* [web](https://waylonwalker.com/stars/)\n* [rss](https://waylonwalker.com/stars/rss.xml)\n\n## Recent\n\nThis is a shorter version of **All**, as it is filtered down to only the posts\ncreated within the last 30 days.\n\n* [web](https://waylonwalker.com/recent/)\n* [rss](https://waylonwalker.com/recent/rss.xml)\n\n## Blog - weekly/monthly\n\nThese are my full big **B** **B**log posts.  They are what I started writing,\ntypically take a bit more time to put together.  I write fewer of them these\ndays than I used to.  I'd like to think that they are the more polished posts\nof the bunch.\n\n* [web](https://waylonwalker.com/blog/)\n* [rss](https://waylonwalker.com/blog/rss.xml)\n\n## Today\n\nThese are only the posts that went live the day that the site last built.  If\nmy scheduled builds keep working as intended they are today's posts.\n\n* [web](https://waylonwalker.com/today/)\n* [rss](https://waylonwalker.com/today/rss.xml)\n\n## Python\n\nThese are all the posts related to the python programming language.\n\n* [web](https://waylonwalker.com/python/)\n* [rss](https://waylonwalker.com/python/rss.xml)\n\n## Linux\n\nThese are all the posts related to linux.\n\n* [web](https://waylonwalker.com/linux/)\n* [rss](https://waylonwalker.com/linux/rss.xml)\n\n## vim\n\nThese are all the posts related to the greatest way to edit text, vim.\n\n* [web](https://waylonwalker.com/vim/)\n* [rss](https://waylonwalker.com/vim/rss.xml)\n\n\u003e Careful, you might not make it out\n\n## kedro\n\nThese are all the posts related to the python data engineering framework kedro.\n\n* [web](https://waylonwalker.com/kedro/)\n* [rss](https://waylonwalker.com/kedro/rss.xml)\n\n## gratitude\n\nI used to do daily gratitude posts, I might get back into it.\n\n* [web](https://waylonwalker.com/gratitude/)\n* [rss](https://waylonwalker.com/gratitude/rss.xml)\n",
      "summary": "I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...",
      "date_published": "2024-04-02T20:01:44Z",
      "date_modified": "2024-04-02T20:01:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "slash",
        "meta"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thoughts/",
      "url": "https://go.waylonwalker.com/thoughts/",
      "title": "Thoughts",
      "content_html": "\u003cp\u003eThese are generally my thoughts on a web page or some sort of url, except a\nrare few don’t have a link.  These are dual published off of my\n\u003ca href=\"https://thoughts.waylonwalker.com\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/thoughts.waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ethoughts.waylonwalker.com\u003c/a\u003e site.  It’s a\nfully dynamically rendered site 2000’s style.  Posts are stored in a database\nand instantly available.  Almost all of the posts were written in a small\n\u003ccode\u003e\u0026lt;textarea\u0026gt;\u003c/code\u003e field within a chrome extension that I built for it.\u003c/p\u003e\n\u003cp\u003eThese posts are intended to in two ways.  One, link building for the author.  I\nhope that I give the people helping me out along the way just a little bit of a\nboost.  Two, they serve as a permanant commented bookmark for me to search, and\ncome back to later when I have forgotten where I have seen something.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/tags/thought\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/tags/thought/rss.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003erss\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAll thoughts posts cross posted to my site are prefixed with a thought balloon 💭.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"the-tech\"\u003eThe tech \u003ca href=\"#the-tech\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSince this blog is mostly a tech blog about software development, and my\njourney as I learn, lets talk tech.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003epython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/fastapi/\" class=\"glossary-term\" title=\"FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.\"\u003efastapi\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003esqlite\u003c/li\u003e\n\u003cli\u003edocker\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://fly.io\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/fly.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/fly.io.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://fly.io\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"fastapi\"\u003efastapi \u003ca href=\"#fastapi\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe core of the site is a python web server running fastapi.  Most of the\nendpoints return \u003ca href=\"/html/\" class=\"glossary-term\" title=\"HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...\"\u003ehtml\u003c/a\u003e via jinja templates to the browser and json to anything\nelse.  So you go to the list of posts at\n[https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999 in](\u003ca href=\"https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/thoughts.waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999\u003c/a\u003e in){.hoverlink}\na web browser it will be a rendered feed, but from curl you will get json.\u003c/p\u003e\n\u003ch3 id=\"htmx\"\u003ehtmx \u003ca href=\"#htmx\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe main page is an infite scrolling feed of the posts.  All loaded in with\nhtmx.  Which just works so beautifully for this.  I really like python its my\njam, I can make endpoints that return things out of a database very effectively\nwith it, but it takes me some time to do the js side, htmx just makes these\ncommon patterns available right in html.\u003c/p\u003e\n\u003ch3 id=\"sqlite\"\u003esqlite \u003ca href=\"#sqlite\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe data storage is a sqlite database using the sqlmodel orm.  This was my very\nfirst time using sqlmodel, which is an ORM built on top of pydantic.  It works\nreally well with fastapi.  The only thing that it lacks is the same history,\ncommunity, and stack overflow posts that sqlalchemy has.\u003c/p\u003e\n\u003ch3 id=\"docker\"\u003edocker \u003ca href=\"#docker\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eDocker is my go to way for containerizing web applications.  I know it really\nwell and makes it easy to build and deploy on a number of platforms.\u003c/p\u003e\n\u003ch3 id=\"httpsflyio\"\u003e\u003ca href=\"https://fly.io\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/fly.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/fly.io.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://fly.io\u003c/a\u003e \u003ca href=\"#httpsflyio\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eI have this running on \u003ca href=\"https://fly.io\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/fly.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/fly.io.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://fly.io\u003c/a\u003e.  Its my first real production application\nrunning on \u003ca href=\"https://fly.io\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/fly.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/fly.io.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://fly.io\u003c/a\u003e, and its been great for me.  It runs my container for me,\ngives me tools to scale, and ssh right into the running container.  It’s still\nfree for the time being, but goes up quick for my cheap taste if I were to\nscale it up much.\u003c/p\u003e\n\u003cp\u003eId highly recomend it if you have a server that you want to get running on the\npublic internet, and you don’t want to manage any of your own infrastructure.\u003c/p\u003e\n",
      "content_text": "\nThese are generally my thoughts on a web page or some sort of url, except a\nrare few don't have a link.  These are dual published off of my\n[thoughts.waylonwalker.com](https://thoughts.waylonwalker.com) site.  It's a\nfully dynamically rendered site 2000's style.  Posts are stored in a database\nand instantly available.  Almost all of the posts were written in a small\n`\u003ctextarea\u003e` field within a chrome extension that I built for it.\n\nThese posts are intended to in two ways.  One, link building for the author.  I\nhope that I give the people helping me out along the way just a little bit of a\nboost.  Two, they serve as a permanant commented bookmark for me to search, and\ncome back to later when I have forgotten where I have seen something.\n\n* [web](https://waylonwalker.com/tags/thought)\n* [rss](https://waylonwalker.com/tags/thought/rss.xml)\n\n\u003e All thoughts posts cross posted to my site are prefixed with a thought balloon 💭.\n\n## The tech\n\nSince this blog is mostly a tech blog about software development, and my\njourney as I learn, lets talk tech.\n\n* python\n* fastapi\n* htmx\n* sqlite\n* docker\n* \u003chttps://fly.io\u003e\n\n### fastapi\n\nThe core of the site is a python web server running fastapi.  Most of the\nendpoints return html via jinja templates to the browser and json to anything\nelse.  So you go to the list of posts at\n[https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999 in](\u003chttps://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999\u003e in){.hoverlink}\na web browser it will be a rendered feed, but from curl you will get json.\n\n### htmx\n\nThe main page is an infite scrolling feed of the posts.  All loaded in with\nhtmx.  Which just works so beautifully for this.  I really like python its my\njam, I can make endpoints that return things out of a database very effectively\nwith it, but it takes me some time to do the js side, htmx just makes these\ncommon patterns available right in html.\n\n### sqlite\n\nThe data storage is a sqlite database using the sqlmodel orm.  This was my very\nfirst time using sqlmodel, which is an ORM built on top of pydantic.  It works\nreally well with fastapi.  The only thing that it lacks is the same history,\ncommunity, and stack overflow posts that sqlalchemy has.\n\n### docker\n\nDocker is my go to way for containerizing web applications.  I know it really\nwell and makes it easy to build and deploy on a number of platforms.\n\n### \u003chttps://fly.io\u003e\n\nI have this running on \u003chttps://fly.io\u003e.  Its my first real production application\nrunning on \u003chttps://fly.io\u003e, and its been great for me.  It runs my container for me,\ngives me tools to scale, and ssh right into the running container.  It's still\nfree for the time being, but goes up quick for my cheap taste if I were to\nscale it up much.\n\nId highly recomend it if you have a server that you want to get running on the\npublic internet, and you don't want to manage any of your own infrastructure.\n",
      "summary": "These are generally my thoughts on a web page or some sort of url, except a rare few don't have a link. These are dual published off of my...",
      "date_published": "2024-04-01T16:14:47Z",
      "date_modified": "2024-04-01T16:14:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "meta",
        "slash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/about/",
      "url": "https://go.waylonwalker.com/about/",
      "title": "Waylon Walker",
      "content_html": "\u003ch2 id=\"hi-hello-im-waylon\"\u003eHi, Hello, I’m Waylon \u003ca href=\"#hi-hello-im-waylon\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHusband, dad of two, and hobbyist builder of things on the internet.\u003c/p\u003e\n\u003cp\u003eWhen I’m not wrangling data pipeline platforms or building web platforms,\nyou’ll find me \u003ca href=\"/tags/gaming/\" class=\"wikilink\" data-title=\"Posts tagged: gaming\" data-description=\"All posts with the tag \u0026#34;gaming\u0026#34;\" data-preview=\"All posts with the tag \u0026#34;gaming\u0026#34;\"\u003egaming\u003c/a\u003e with my kids, making art, or skating\naround the neighborhood.  Reliving my mechanical engineering days with my 3d\nprinter.  Winding down at the end of the day binge-watching Big Bang Theory\nwith my wife.\u003c/p\u003e\n\u003ch2 id=\"what-i-do\"\u003eWhat I Do \u003ca href=\"#what-i-do\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’m a Senior Software Engineer who specializes in data pipelines and\nPython-based web platforms. I help teams turn messy data into reliable systems\nthat actually work.\u003c/p\u003e\n\u003ch2 id=\"why-i-built-this-site\"\u003eWhy I Built This Site \u003ca href=\"#why-i-built-this-site\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003efrom scratch\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eI got tired of:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBuild times that took forever\u003c/li\u003e\n\u003cli\u003eNode modules folders that became black holes\u003c/li\u003e\n\u003cli\u003eBloated pages that took ages to load\u003c/li\u003e\n\u003cli\u003eSEO tools that felt like an afterthought\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSo I built my own platform from scratch using \u003cstrong\u003epluggy\u003c/strong\u003e and \u003cstrong\u003ediskcache\u003c/strong\u003e.\nIt’s under-funded, over-dreamed, barely documented, and I love it. This site is\nmy sandbox for learning, teaching, and sharing ideas on my own terms.\u003c/p\u003e\n\u003ch2 id=\"infrastructure\"\u003eInfrastructure \u003ca href=\"#infrastructure\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBecause apparently I don’t have enough hobbies, I also run this site from a\n\u003cstrong\u003e\u003ca href=\"/tags/kubernetes/\" class=\"wikilink\" data-title=\"Posts tagged: kubernetes\" data-description=\"All posts with the tag \u0026#34;kubernetes\u0026#34;\" data-preview=\"All posts with the tag \u0026#34;kubernetes\u0026#34;\"\u003eKubernetes\u003c/a\u003e cluster in my basement\u003c/strong\u003e. Nothing says “I\nlove DevOps” like maintaining your own bare-metal cluster just to host a static\nblog.\u003c/p\u003e\n\u003ch2 id=\"explore\"\u003eExplore \u003ca href=\"#explore\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCurious about the tech? Check out \u003ca href=\"/about-this-site/\" class=\"wikilink\" data-title=\"about this site\" data-description=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\" data-date=\"2024-05-31\" data-preview=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\"\u003eabout this site\u003c/a\u003e for my philosophy on\nthis space, or \u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"/colophon\" data-description=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\" data-date=\"2025-01-02\" data-preview=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\"\u003e/colophon\u003c/a\u003e for the full stack breakdown.\u003c/p\u003e\n\u003ch2 id=\"meta-pages\"\u003eMeta Pages \u003ca href=\"#meta-pages\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eEvergreen pages about me and this site:\u003c/p\u003e\n",
      "content_text": "\n## Hi, Hello, I'm Waylon\n\nHusband, dad of two, and hobbyist builder of things on the internet.\n\nWhen I'm not wrangling data pipeline platforms or building web platforms,\nyou'll find me \u003ca href=\"/tags/gaming/\" class=\"wikilink\" data-title=\"Posts tagged: gaming\" data-description=\"All posts with the tag \u0026#34;gaming\u0026#34;\"\u003egaming\u003c/a\u003e with my kids, making art, or skating\naround the neighborhood.  Reliving my mechanical engineering days with my 3d\nprinter.  Winding down at the end of the day binge-watching Big Bang Theory\nwith my wife.\n\n## What I Do\n\nI'm a Senior Software Engineer who specializes in data pipelines and\nPython-based web platforms. I help teams turn messy data into reliable systems\nthat actually work.\n\n## Why I Built This Site\n\n_from scratch_\n\nI got tired of:\n- Build times that took forever\n- Node modules folders that became black holes\n- Bloated pages that took ages to load\n- SEO tools that felt like an afterthought\n\nSo I built my own platform from scratch using **pluggy** and **diskcache**.\nIt's under-funded, over-dreamed, barely documented, and I love it. This site is\nmy sandbox for learning, teaching, and sharing ideas on my own terms.\n\n## Infrastructure\n\nBecause apparently I don't have enough hobbies, I also run this site from a\n**\u003ca href=\"/tags/kubernetes/\" class=\"wikilink\" data-title=\"Posts tagged: kubernetes\" data-description=\"All posts with the tag \u0026#34;kubernetes\u0026#34;\"\u003eKubernetes\u003c/a\u003e cluster in my basement**. Nothing says \"I\nlove DevOps\" like maintaining your own bare-metal cluster just to host a static\nblog.\n\n## Explore\n\nCurious about the tech? Check out \u003ca href=\"/about-this-site/\" class=\"wikilink\" data-title=\"about this site\" data-description=\"I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...\" data-date=\"2024-05-31\"\u003eabout this site\u003c/a\u003e for my philosophy on\nthis space, or \u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"/colophon\" data-description=\"Colophon a page that describes how the site \u0026gt; is made, with what tools, supporting what technologies\" data-date=\"2025-01-02\"\u003e/colophon\u003c/a\u003e for the full stack breakdown.\n\n## Meta Pages\n\nEvergreen pages about me and this site:\n\n\n\n \n",
      "summary": "Husband, dad of two, and hobbyist builder of things on the internet.",
      "date_published": "2021-11-20T10:38:00Z",
      "date_modified": "2021-11-20T10:38:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "meta",
        "slash"
      ]
    }
  ]
}